Aller au contenu

Node.js et npm

Avec Node.js, on peut écrire des serveurs web, des scripts d’automatisation, des outils en ligne de commande, et bien plus — le tout en JavaScript. Dans ce cours, on construit des applications web complètes. Node.js nous permet d’utiliser un seul langage pour le client et le serveur.

Rendez-vous sur nodejs.org et téléchargez la version LTS (Long Term Support) — c’est la version stable recommandée pour le développement.

L’installateur inclut deux programmes :

  • node — l’interpréteur JavaScript
  • npm — le gestionnaire de paquets (Node Package Manager)

Après l’installation, ouvrez un terminal et vérifiez :

Fenêtre de terminal
node --version # ex: v22.15.0
npm --version # ex: 10.9.2

Exécuter un fichier :

Fenêtre de terminal
node mon_script.js

Mode interactif (REPL) — utile pour tester rapidement :

Fenêtre de terminal
node
> 2 + 2
4
> "Bonjour".toUpperCase()
'BONJOUR'
> .exit

Un projet Node.js est un dossier contenant au minimum un fichier package.json qui décrit le projet et ses dépendances.

Fenêtre de terminal
mkdir mon-projet
cd mon-projet
npm init -y

La commande npm init crée le fichier package.json qui définit les informations de ton projet (nom, version, description, auteur) ainsi que la liste de ses dépendances.

Le drapeau -y répond oui à toutes les questions et génère le fichier avec des valeurs par défaut. Sans -y, npm pose une série de questions de façon interactive.

Fenêtre de terminal
npm install express

Cette commande fait trois choses :

  1. Télécharge express et toutes ses dépendances dans le dossier node_modules/
  2. Ajoute express à la section dependencies de package.json
  3. Crée ou met à jour package-lock.json (verrouillage des versions exactes)

On peut en installer plusieurs d’un coup, ou cibler une version précise :

Fenêtre de terminal
npm install lodash axios # plusieurs paquets à la fois
npm install express@4.21.0 # une version spécifique

Toutes les dépendances ne servent pas au même moment. Certaines sont nécessaires pour que l’application fonctionne (ex: un serveur a besoin d’Express). D’autres ne servent qu’au développement : formateurs de code, outils de test, linters.

On les sépare avec -D (ou --save-dev) :

Fenêtre de terminal
npm install -D prettier # ajouté à devDependencies

Les devDependencies ne sont pas installées en production. Cette distinction réduit le poids de l’environnement de production.

Certains outils en ligne de commande s’installent globalement, pour être disponibles depuis n’importe quel dossier (projet) :

Fenêtre de terminal
npm install -g <paquet>

mon-projet/
├── node_modules/ ← dépendances (généré, ne pas modifier)
├── src/
│ ├── index.js ← point d'entrée
│ ├── routes/ ← définition des routes
│ └── utils/ ← fonctions utilitaires
├── public/ ← fichiers statiques (HTML, CSS, images)
├── package.json ← manifeste du projet
├── package-lock.json ← versions verrouillées exactes
└── .gitignore ← doit contenir node_modules/

node_modules/ doit toujours apparaître dans .gitignore.
Le dossier node_modules/ peut contenir des milliers de fichiers et se régénère avec npm install. On ne versionne jamais les dépendances elles-mêmes — seulement la liste des dépendances dans package.json.

package-lock.json doit être versionné.
Il garantit que tous les développeurs d’une équipe installent exactement les mêmes versions.

Un collaborateur qui clone le projet fait simplement :

Fenêtre de terminal
git clone <url>
cd mon-projet
npm install # recrée node_modules/ à partir de package.json

C’est le manifeste du projet (équivalent du pom.xml en Java). Il décrit le projet, ses dépendances, et ses scripts.

{
"name": "mon-serveur",
"version": "1.0.0",
"description": "Serveur web pour IFT3225",
"main": "src/index.js",
"type": "module",
"scripts": {
"start": "node src/index.js",
"dev": "node --watch src/index.js"
},
"dependencies": {
"express": "^4.21.0"
},
"devDependencies": {
"prettier": "^3.3.0"
}
}

"type": "module" : Active la syntaxe import/export (ES Modules). Sans cette ligne, Node.js utilise l’ancien système require() (CommonJS).

"scripts" : Définit des commandes personnalisées exécutables via npm run <nom>. Le script "dev" ci-dessus utilise --watch, un mode qui redémarre automatiquement le serveur quand un fichier change.

"dependencies" : Les paquets nécessaires en production (le serveur en a besoin pour fonctionner).

"devDependencies" : Les paquets utilisés seulement pendant le développement (formateurs, outils de test, etc.).

Le préfixe ^ dans les versions (ex: "^4.21.0") signifie « compatible avec 4.21.0 » — npm pourra installer 4.21.5 ou 4.22.0, mais pas 5.0.0.


Les scripts automatisent les tâches répétitives du projet : lancer le serveur, exécuter les tests, construire le code. On les définit dans la section "scripts" du package.json :

"scripts": {
"start": "node src/index.js",
"dev": "node --watch src/index.js",
"test": "node --test"
}

On les exécute avec npm run <nom> :

Fenêtre de terminal
npm run dev

Le -- sépare les arguments destinés à npm de ceux destinés au script lui-même :

Fenêtre de terminal
npm run dev -- --port 8080

Tout ce qui suit -- est transmis tel quel à la commande du script.


npx est livré avec npm. Il exécute un paquet sans l’installer globalement : npx le télécharge temporairement, l’exécute, puis le retire. C’est idéal pour les outils qu’on utilise rarement ou une seule fois.

Fenêtre de terminal
npx create-astro@latest mon-site # échafauder un projet Astro
npx prettier --write . # formater sans installer prettier globalement

Un récapitulatif des commandes npm les plus utilisées, pour consultation rapide.

Commande Effet
npm init -y Crée un package.json avec les valeurs par défaut
npm install (ou npm i) Installe toutes les dépendances du package.json
npm install <pkg> Installe un paquet et l’ajoute aux dependencies
npm install <pkg>@<version> Installe une version précise
npm install -D <pkg> Installe en devDependencies
npm install -g <pkg> Installe globalement (hors projet)
npm uninstall <pkg> Retire un paquet
Commande Effet
npm update Met à jour selon les plages de versions autorisées
npm update <pkg> Met à jour un paquet précis
npm outdated Liste les paquets ayant une version plus récente
npm list Affiche l’arbre des dépendances locales
npm list -g Affiche les paquets installés globalement
npm -v Affiche la version de npm
Commande Effet
npm run <script> Exécute un script défini dans package.json
npm run Liste tous les scripts disponibles
npm start Raccourci pour npm run start
npm test Raccourci pour npm run test
npm run <script> -- <args> Passe des arguments au script
npx <pkg> Exécute un paquet sans l’installer