Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
JavaScript

Introduction à Node.js et npm

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 versi...

0 chapitres 0 QCM Accès gratuit
Dans cet article

À 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.
  1. 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.
  2. 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).

    Node.js et npm : V8 hors du navigateur, package.json, node_modules et registre npm

  3. NavigateurNode.js
    LangageLe même JavaScript (ECMAScript) : variables, fonctions, classes, promesses…
    Objet globalwindowglobal (et globalThis partout)
    Page et DOMdocument, alert(), événements de la pageN'existent pas
    FichiersAccès très limité (sécurité)Lecture et écriture avec le module node:fs
    Informations sur le programmelocation, navigatorprocess (arguments, variables d'environnement)
    Communs aux deuxconsole, setTimeout, fetch, URL, JSON…
  4. 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.
  5. 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" dans package.json ou 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…
  1. 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" dans package.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.argv contient 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… et process.exitCode = 1 signale l'échec au système.
  2. 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éé avec npm 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"
      }
    }
    CommandeEffet
    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 test et npm start fonctionnent sans run).
    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 avec npm install.
    • package-lock.json fige les versions exactes installées : il doit être commité, pour que toute l'équipe ait les mêmes versions.
  3. Les numéros de version (SemVer)

    • Les paquets suivent la gestion sémantique de version: MAJEURE.MINEURE.CORRECTIF, par exemple 5.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.
  4. 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 audit signale les failles connues dans vos dépendances ; npm audit fix applique les mises à jour sûres.
    • Autres gestionnaires compatibles avec le même registre : pnpm, Yarn, Bun.
  5. Activités

  6. Activité 1 : installation et REPL

  • Installez Node.js LTS et notez les versions de node et npm.
  • Dans le REPL, tapez typeof window, typeof document, typeof process et process.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 lancez npm run bulletin -- DEV102.

Activité 3 : premières dépendances

  • Installez bootstrap comme dépendance et prettier comme dépendance de développement. Ouvrez package.json: dans quelles sections apparaissent-ils ?
  • Créez le .gitignore, faites un commit, puis supprimez node_modules et retrouvez-le avec npm install.
  • Lancez npm audit et npm 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 commite package-lock.json, jamais node_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.