À propos de ce cours
Découvrez Node.js, l'environnement qui exécute JavaScript en dehors du navigateur, et npm, son gestionnaire de paquets. La leçon présente les différences avec le navigateur, l'installation de la version LTS (Node.js 26), l'exécution de scripts et les modules, un exemple complet de génération de bulletin à partir d'un fichier JSON, le fichier package.json, les commandes npm, les numéros de version (SemVer) et la sécurité des dépendances. Avec des activités corrigées.
-
Objectifs
- Comprendre ce qu'est Node.js et en quoi il diffère du JavaScript du navigateur.
- Installer la bonne version de Node.js et exécuter un script.
- Utiliser npm :
package.json, installation de paquets, scripts,npx. - Comprendre les numéros de version et les règles de sécurité des dépendances.
-
Qu'est-ce que Node.js ?
- Node.js est un environnement d'exécution qui permet de lancer du JavaScript en dehors du navigateur: sur votre ordinateur ou sur un serveur.
- Il a été créé en 2009 par Ryan Dahl à partir de V8, le moteur JavaScript de Chrome. Il est aujourd'hui géré par l'OpenJS Foundation.
- Il sert à :
- créer des serveurs et des API (avec Express, Fastify, NestJS…) ;
- faire tourner les outils du développeur front-end: Vite, ESLint, Prettier, Vitest, TypeScript, Angular CLI… Même si vous ne codez que pour le navigateur, vous avez besoin de Node.js ;
- écrire des scripts (traitement de fichiers, automatisation).

-
Navigateur ou Node.js : ce qui change
-
Installer Node.js
- Téléchargez la version LTS (Long Term Support, maintenue longtemps) sur nodejs.org. Fin 2026, il s'agit de Node.js 26, entré en LTS active le 28 octobre 2026 et maintenu jusqu'en avril 2029. Node.js 24 et 22 sont encore maintenus, Node.js 20 ne l'est plus.
- À partir de Node.js 27, une seule version majeure sortira chaque année, et toutes deviendront LTS.
- Vérifiez l'installation dans un terminal (celui de VS Code par exemple) :
node -v # v26.x.x npm -v # npm est installé avec Node.js- Pour passer d'une version à l'autre selon les projets, on utilise un gestionnaire de versions : nvm (macOS/Linux), nvm-windows ou fnm.
-
Exécuter du JavaScript avec Node.js
- Mode interactif (REPL): tapez
node, puis du JavaScript ;.exit(ou Ctrl + C deux fois) pour quitter. - Exécuter un fichier:
node mon-script.js. - Relancer à chaque modification:
node --watch mon-script.js. - Les modules: Node.js accepte deux systèmes. Le système moderne (ESM,
import/export) est activé par"type": "module"danspackage.jsonou par l'extension.mjs. L'ancien système (CommonJS,require()) se rencontre encore dans beaucoup de projets. - Les modules intégrés à Node.js s'importent avec le préfixe
node::node:fs/promises(fichiers),node:path(chemins),node:os…
- Mode interactif (REPL): tapez
| Navigateur | Node.js | |
|---|---|---|
| Langage | Le même JavaScript (ECMAScript) : variables, fonctions, classes, promesses… | |
| Objet global | window | global (et globalThis partout) |
| Page et DOM | document, alert(), événements de la page | N'existent pas |
| Fichiers | Accès très limité (sécurité) | Lecture et écriture avec le module node:fs |
| Informations sur le programme | location, navigator | process (arguments, variables d'environnement) |
| Communs aux deux | console, setTimeout, fetch, URL, JSON… | |
-
Exemple : générer un bulletin à partir d'un fichier JSON
- Fichier
donnees/stagiaires.json:
[ { "nom": "Sami", "groupe": "DEV101", "notes": [14, 15, 9] }, { "nom": "Rim", "groupe": "DEV101", "notes": [17, 16, 18] }, { "nom": "Yassine", "groupe": "DEV102", "notes": [8, 12, 10] } ]- Fichier
bulletin.js(avec"type": "module"danspackage.json) :
import { readFile, writeFile } from "node:fs/promises"; const SEUIL_ADMISSION = 10; function calculerMoyenne(notes) { const total = notes.reduce((somme, note) => somme + note, 0); return total / notes.length; } async function genererBulletin(groupe) { const contenu = await readFile("donnees/stagiaires.json", "utf-8"); const stagiaires = JSON.parse(contenu).filter((s) => !groupe || s.groupe === groupe); const lignes = stagiaires.map((s) => { const moyenne = calculerMoyenne(s.notes); const decision = moyenne >= SEUIL_ADMISSION ? "Admis" : "Ajourné"; return `${s.nom.padEnd(10)} ${moyenne.toFixed(2).padStart(6)} ${decision}`; }); console.log(lignes.join("\n")); await writeFile("bulletin.txt", lignes.join("\n"), "utf-8"); console.log(`\n${stagiaires.length} stagiaire(s) – fichier bulletin.txt créé`); } const groupe = process.argv[2]; // argument facultatif : node bulletin.js DEV101 genererBulletin(groupe).catch((erreur) => { console.error("Erreur :", erreur.message); process.exitCode = 1; });- Exécution :
$ node bulletin.js DEV101 Sami 12.67 Admis Rim 17.00 Admis 2 stagiaire(s) – fichier bulletin.txt crééprocess.argvcontient les arguments de la ligne de commande :process.argv[2]est le premier argument après le nom du script.- Si le fichier JSON est introuvable, le
.catch()affiche Erreur : ENOENT: no such file or directory… etprocess.exitCode = 1signale l'échec au système.
- Fichier
-
npm : le gestionnaire de paquets
- npm (Node Package Manager) donne accès au registre npm (npmjs.com), qui contient des millions de bibliothèques réutilisables appelées paquets.
- Chaque projet est décrit par un fichier
package.json, créé avecnpm init -y:
{ "name": "bulletin", "version": "1.0.0", "type": "module", "scripts": { "bulletin": "node bulletin.js", "test": "vitest" }, "dependencies": { "bootstrap": "^5.3.9" }, "devDependencies": { "vitest": "^5.1.0" } }Commande Effet npm install bootstrapInstalle un paquet utilisé par l'application (section dependencies).npm install --save-dev vitestInstalle un outil de développement (section devDependencies).npm installInstalle toutes les dépendances listées (après un git clone).npm uninstall bootstrapSupprime un paquet. npm run bulletinLance un script défini dans package.json(npm testetnpm startfonctionnent sansrun).npm outdated/npm updateListe / met à jour les paquets dépassés. npx outilExécute un outil installé dans le projet (ou le télécharge temporairement) : npx eslint .node_modules/contient les paquets installés. Ce dossier peut peser des centaines de mégaoctets : il ne va jamais sur GitHub (.gitignore). On le recrée avecnpm install.package-lock.jsonfige les versions exactes installées : il doit être commité, pour que toute l'équipe ait les mêmes versions.
-
Les numéros de version (SemVer)
- Les paquets suivent la gestion sémantique de version:
MAJEURE.MINEURE.CORRECTIF, par exemple5.3.9.- Correctif (5.3.9) : correction de bugs, rien ne change pour vous.
- Mineure (5.3. 9) : nouvelles fonctionnalités, compatibles avec l'existant.
- Majeure (5. 3.9) : changements qui peuvent casser votre code.
"^5.3.9"accepte toutes les versions 5.x.x à partir de 5.3.9 (pas la 6) ;"~5.3.9"accepte seulement les correctifs 5.3.x ;"5.3.9"fixe la version exacte.
- Les paquets suivent la gestion sémantique de version:
-
Sécurité des dépendances
- Chaque paquet installé peut exécuter du code sur votre machine et se retrouver dans votre application : choisissez des paquets reconnus (nombre de téléchargements, mises à jour récentes, dépôt GitHub actif).
- Vérifiez l'orthographe : des paquets malveillants imitent des noms connus (typosquatting).
npm auditsignale les failles connues dans vos dépendances ;npm audit fixapplique les mises à jour sûres.- Autres gestionnaires compatibles avec le même registre : pnpm, Yarn, Bun.
-
Activités
Activité 1 : installation et REPL
- Installez Node.js LTS et notez les versions de
nodeetnpm. - Dans le REPL, tapez
typeof window,typeof document,typeof processetprocess.platform. Expliquez les résultats.
Activité 2 : le bulletin
- Dans un dépôt GitHub
js-node-npm, reproduisez l'exemple du bulletin. Ajoutez un stagiaire et un deuxième groupe. - Améliorez le script : affichez la moyenne du groupe et le nombre d'admis à la fin.
- Ajoutez le script npm
"bulletin"et lanceznpm run bulletin -- DEV102.
Activité 3 : premières dépendances
- Installez
bootstrapcomme dépendance etprettiercomme dépendance de développement. Ouvrezpackage.json: dans quelles sections apparaissent-ils ? - Créez le
.gitignore, faites un commit, puis supprimeznode_moduleset retrouvez-le avecnpm install. - Lancez
npm auditetnpm outdated, et notez les résultats.
Activité 4 : SemVer
- Pour la contrainte
"^5.3.9", indiquez si chaque version est acceptée : 5.3.10, 5.4.0, 6.0.0, 5.3.8. Même question pour"~5.3.9".
Corrigés. Activité 1 :
"undefined", "undefined" (pas de page dans Node.js), "object", puis le système ("win32", "linux" ou "darwin"). Activité 3 : bootstrap dans dependencies, prettier dans devDependencies. Activité 4 : avec ^5.3.9 → 5.3.10 oui, 5.4.0 oui, 6.0.0 non, 5.3.8 non ; avec ~5.3.9 → 5.3.10 oui, 5.4.0 non, 6.0.0 non, 5.3.8 non.À retenir
- Node.js exécute du JavaScript hors du navigateur : pas de DOM, mais l'accès aux fichiers et au système.
- On installe la version LTS; tous les outils front-end modernes en ont besoin.
- npm gère les dépendances décrites dans
package.json; on commitepackage-lock.json, jamaisnode_modules. - On choisit ses paquets avec soin et on surveille les failles avec
npm audit.
Sources : nodejs.org, docs.npmjs.com, vite.dev, typescriptlang.org, angular.dev, react.dev, vuejs.org, MDN Web Docs.