À propos de ce cours
Objectifs de la leçon
- Créer un projet Node.js et comprendre le fichier package.json.
- Installer, mettre à jour et supprimer des dépendances.
- Lire un numéro de version sémantique.
- Créer et lancer des scripts npm, utiliser npx.
npm, le gestionnaire de paquets
npm (Node Package Manager) est installé avec Node.js. Il donne accès au registre npm (npmjs.com), qui contient des centaines de milliers de paquets (bibliothèques) réutilisables. NestJS lui-même est distribué sous forme de paquets npm : @nestjs/core, @nestjs/common…
D'autres gestionnaires compatibles existent (pnpm, yarn) ; la CLI Nest vous proposera de choisir. Dans ce cours, nous utilisons npm.
Créer un projet : npm init
mkdir api-stagiaires
cd api-stagiaires
npm init -y # crée package.json avec les valeurs par défaut
Le fichier package.json
C'est la carte d'identité du projet : nom, version, scripts et liste des dépendances.
Les quatre parties essentielles d'un package.json.
Installer des dépendances
| Commande | Effet |
|---|---|
npm install express (ou npm i express) | Installe un paquet et l'ajoute à dependencies |
npm i -D jest | Ajoute à devDependencies (outils de développement) |
npm i -g @nestjs/cli | Installation globale d'un outil en ligne de commande |
npm install | Installe toutes les dépendances listées dans package.json |
npm ci | Installation propre et exacte à partir de package-lock.json (serveurs, CI) |
npm uninstall express | Supprime un paquet |
npm outdated / npm update | Voir / appliquer les mises à jour compatibles |
npm ls --depth=0 | Lister les paquets installés |
dependencies: nécessaires au fonctionnement de l'application (par exemple @nestjs/core, typeorm). devDependencies: utiles uniquement pour développer (TypeScript, Jest, ESLint, la CLI Nest locale).
Les numéros de version
npm utilise le versionnage sémantique MAJEUR.MINEUR.CORRECTIF:
- CORRECTIF (1.4.2) : corrections de bugs.
- MINEUR (1.5. 0) : nouvelles fonctions, compatibles.
- MAJEUR (2. 0.0) : changements incompatibles.
| Écriture | Accepte |
|---|---|
"^5.1.0" | 5.1.0 et toutes les versions 5.x.x supérieures (pas 6.0.0) |
"~5.1.0" | 5.1.x uniquement |
"5.1.0" | exactement 5.1.0 |
node_modules et package-lock.json
- node_modules/ contient le code de tous les paquets installés (et de leurs propres dépendances). Ce dossier est très volumineux : on ne le copie jamais et on ne le met jamais sur GitHub. Un simple
npm installle recrée. - package-lock.json enregistre la version exacte de chaque paquet installé. Il doit être versionné : toute l'équipe et le serveur installeront ainsi exactement les mêmes versions.
# .gitignore
node_modules/
dist/
.env
Les scripts npm
La section scripts donne des raccourcis pour les commandes du projet. On les lance avec npm run nom (npm start et npm test fonctionnent sans run).
"scripts": {
"start": "node index.js",
"dev": "node --watch index.js",
"test": "jest"
}
Un projet NestJS est livré avec des scripts prêts à l'emploi : npm run start:dev, npm run build, npm run test, npm run lint… Vous les découvrirez à la leçon 2.4.
npx : exécuter sans installer
npx exécute la commande d'un paquet sans l'installer globalement. Par exemple, npx @nestjs/cli new mon-api crée un projet NestJS même si la CLI n'est pas installée.
Activités
Activité 1 Créer et configurer un projet
- Créez le dossier
api-stagiaireset initialisez-le avecnpm init -y. - Installez
expressen dépendance etnodemonen dépendance de développement. - Ouvrez
package.json: dans quelles sections apparaissent-ils ? - Ajoutez les scripts
start(node index.js) etdev(nodemon index.js). - Créez un
index.jsExpress qui répond{ "message": "API stagiaires" }sur/et lanceznpm run dev.
Voir le corrigé
npm i express
npm i -D nodemon
const express = require('express');
const app = express();
app.get('/', (req, res) => res.json({ message: 'API stagiaires' }));
app.listen(3000, () => console.log('http://localhost:3000'));
express est dans dependencies, nodemon dans devDependencies.
Activité 2 Supprimer puis restaurer node_modules
Supprimez le dossier node_modules, lancez npm run dev et lisez l'erreur. Comment réparer ? Que montre cette expérience ?
Voir le corrigé
L'erreur indique que le module express est introuvable. Un npm install recrée le dossier à partir de package.json et package-lock.json. C'est pour cela que node_modules n'est jamais partagé ni versionné.
Activité 3 Lire des versions
Pour "^10.2.3", les versions suivantes sont-elles acceptées : 10.2.9 ; 10.5.0 ; 11.0.0 ? Et pour "~10.2.3"?
Voir le corrigé
Avec ^10.2.3: 10.2.9 oui, 10.5.0 oui, 11.0.0 non. Avec ~10.2.3: 10.2.9 oui, 10.5.0 non, 11.0.0 non.
À retenir
- npm installe les paquets du registre npm et gère les dépendances du projet.
- package.json décrit le projet ; package-lock.json fixe les versions exactes.
- dependencies pour l'exécution, devDependencies pour le développement.
- node_modules ne se versionne jamais : npm install le recrée.
- npm run lance un script ; npx exécute un outil sans l'installer.