npm et modules
npm : le gestionnaire de paquets de Node.js
npm (Node Package Manager) est l'outil qui vient avec Node.js. Il te permet d'installer des milliers de bibliothèques et d'outils prêts à l'emploi publiés sur npmjs.com — le plus grand registre de packages JavaScript au monde.
Besoin d'envoyer des emails, de manipuler des dates, de faire des requêtes HTTP, de chiffrer des données ? Il existe un package npm pour ça. Au lieu de tout coder toi-même, tu réutilises du code vérifié par la communauté.
npmjs.com héberge plus de 2 millions de packages. Chaque package est versionné
selon la norme semver (ex : 1.4.2). Tu peux rechercher un package,
lire sa documentation et voir ses dépendances directement sur le site.
Pour démarrer un nouveau projet Node.js, crée un dossier et initialise npm :
# Crée un dossier pour ton projet
mkdir mon-projet
cd mon-projet
# Initialise npm avec les valeurs par défaut
npm init -y
Le flag -y répond "oui" à toutes les questions et crée un fichier
package.json immédiatement. Sans -y, npm te pose des questions
interactives (nom du projet, version, auteur…).
package.json : la carte d'identité du projet
Le fichier package.json décrit ton projet : son nom, sa version, ses scripts
et ses dépendances. C'est le premier fichier que tu regardes quand tu reprends un projet.
{
"name": "mon-projet",
"version": "1.0.0",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.1.0"
}
}
Les champs importants :
name— nom du projet (minuscules, sans espaces)version— version du projet au formatmajeur.mineur.patchscripts— des raccourcis de commandes lancés avecnpm run <nom>dependencies— packages nécessaires en productiondevDependencies— packages utilisés uniquement en développement
Pour lancer le script start défini dans package.json, tape
npm start. Pour les autres scripts, utilise npm run dev,
npm run build, etc.
Installer, désinstaller des packages
Les commandes npm essentielles pour gérer tes dépendances :
# Installer un package (ajouté dans "dependencies")
npm install express
# Installer plusieurs packages en une seule commande
npm install express dotenv axios
# Installer un package de développement uniquement
# (ajouté dans "devDependencies")
npm install --save-dev nodemon
# Désinstaller un package
npm uninstall axios
# Installer toutes les dépendances d'un projet existant
npm install
La distinction entre dependencies et devDependencies est importante.
nodemon redémarre automatiquement ton serveur à chaque modification du code :
utile en développement, mais inutile en production. --save-dev l'indique clairement.
npm install --save-dev peut aussi s'écrire npm i -D.
De même, npm install s'abrège en npm i. Ces raccourcis sont courants
dans les tutoriels et la documentation.
node_modules et .gitignore
Quand tu installes un package, npm crée un dossier node_modules/ dans ton projet
et y télécharge le package ainsi que toutes ses dépendances. Ce dossier peut rapidement
contenir des centaines de fichiers et peser plusieurs dizaines de Mo.
# Ne jamais versionner node_modules
node_modules/
# Fichiers d'environnement (mots de passe, clés API)
.env
# Logs npm
npm-debug.log*
Tu ne mets jamais node_modules/ dans Git. Le fichier
package.json (et package-lock.json) suffit : quand quelqu'un clone
ton dépôt, un simple npm install recrée le dossier node_modules/
avec exactement les mêmes versions.
CommonJS : require() et module.exports
Node.js supporte deux systèmes de modules. Le plus ancien — et le plus répandu dans les
tutoriels — est CommonJS. Il utilise les fonctions require()
pour importer et module.exports pour exporter.
// On définit des fonctions
function additionner(a, b) {
return a + b;
}
function multiplier(a, b) {
return a * b;
}
// On exporte ce qu'on veut rendre disponible
module.exports = { additionner, multiplier };
// Importer son propre module (chemin relatif avec ./)
const { additionner, multiplier } = require('./math');
// Importer un package npm (sans ./ ni chemin)
const express = require('express');
console.log(additionner(3, 4)); // 7
console.log(multiplier(3, 4)); // 12
Pour tes propres fichiers, le chemin commence par ./ (dossier courant) ou
../ (dossier parent). Pour les packages npm, tu écris juste le nom du package.
ES Modules : import / export
Les ES Modules (ESM) sont le système de modules standard de JavaScript,
utilisé nativement dans les navigateurs. Node.js les supporte depuis la version 12.
La syntaxe utilise import et export.
Pour activer les ES Modules dans Node.js, ajoute "type": "module" dans ton
package.json — ou utilise l'extension .mjs pour tes fichiers.
{
"name": "mon-projet",
"version": "1.0.0",
"type": "module"
}
// Export nommé : on exporte directement chaque fonction
export function additionner(a, b) {
return a + b;
}
export function multiplier(a, b) {
return a * b;
}
// Import nommé depuis un fichier local
import { additionner, multiplier } from './math.js';
// Import depuis un package npm
import express from 'express';
console.log(additionner(5, 3)); // 8
CommonJS ou ESM ? Les deux coexistent. CommonJS reste très présent dans les projets existants et l'écosystème serveur. ESM est le standard moderne, recommandé pour les nouveaux projets. Dans ce cours, tu verras les deux. L'essentiel : ne mélange pas les deux systèmes dans le même projet sans configuration spécifique.
Modules natifs de Node.js
Node.js inclut des modules intégrés (built-in) disponibles sans installation. Voici les plus utiles :
const path = require('path');
const os = require('os');
const { URL } = require('url');
const crypto = require('crypto');
// path — manipuler les chemins de fichiers
const fichier = '/home/user/projet/index.js';
console.log(path.basename(fichier)); // index.js
console.log(path.dirname(fichier)); // /home/user/projet
console.log(path.extname(fichier)); // .js
console.log(path.join('dossier', 'sous', 'fichier.txt'));
// dossier/sous/fichier.txt (séparateur adapté à l'OS)
// os — infos sur le système
console.log(os.platform()); // linux, darwin, win32
console.log(os.hostname()); // nom de la machine
console.log(os.homedir()); // /home/user
console.log(os.cpus().length); // nombre de coeurs CPU
// url — manipuler des URLs
const monUrl = new URL('https://example.com/page?id=42');
console.log(monUrl.hostname); // example.com
console.log(monUrl.searchParams.get('id')); // 42
// crypto — hacher des données
const hash = crypto
.createHash('sha256')
.update('mon-mot-de-passe')
.digest('hex');
console.log(hash); // empreinte sha256 en hexadécimal
Ces modules s'importent exactement comme un package npm, mais tu n'as rien à installer.
Le module path est particulièrement utile pour construire des chemins de fichiers
portables (Windows utilise \, Linux et macOS utilisent /).
npx : exécuter sans installer globalement
npx (inclus avec npm) te permet de lancer un package directement, sans l'installer dans ton projet ni globalement sur ta machine. C'est idéal pour les outils qu'on utilise une seule fois ou pour initialiser des projets.
# Créer un projet React sans installer create-react-app globalement
npx create-react-app mon-app
# Créer un projet Express avec le générateur officiel
npx express-generator mon-api
# Lancer un serveur HTTP statique temporaire dans le dossier courant
npx serve .
# Vérifier la version d'un outil sans l'installer
npx cowsay "Bonjour !"
npx télécharge le package, l'exécute, puis ne le conserve pas. Ton système reste propre, et tu utilises toujours la dernière version du package sans avoir à le mettre à jour manuellement.
- npm est le gestionnaire de paquets de Node.js — il installe des bibliothèques depuis npmjs.com.
npm init -ycrée unpackage.jsonavec les valeurs par défaut.npm install expressajoute express dansdependencies.npm install --save-dev nodemonajoute nodemon dansdevDependencies.- Ne jamais versionner
node_modules/— l'ajouter dans.gitignore. - CommonJS :
require()/module.exports— système historique de Node.js. - ESM :
import/export— standard moderne, activer avec"type": "module". - Modules natifs utiles :
path,os,url,crypto— aucune installation nécessaire. - npx exécute un package sans l'installer globalement.