Versions, plages et audit
Semver, plages ^~, lockfile et npm audit.
Objectifs
À la fin de cette leçon, vous saurez :
- lire une version sémantique et les plages ^ et ~ ;
- expliquer le rôle du lockfile face à ces plages ;
- auditer vos dépendances avec npm audit.
Semver : décoder 1.4.2
1.4.2
│ │ └─ patch : corrections de bugs (aucun changement d'usage)
│ └─── minor : nouvelles fonctionnalités rétrocompatibles
└───── major : changements incompatibles (migration nécessaire)
Règle mnémotechnique du projet Node lui-même : « major = peut casser ».
Les plages par défaut
Quand npm install pg écrit "pg": "^8.11.0" :
| Plage | Signifie | Accepte |
|---|---|---|
^8.11.0 | 8.x ≥ 8.11.0 | 8.11.3 ✅ / 9.0.0 ❌ |
~8.11.0 | 8.11.x | 8.11.5 ✅ / 8.12.0 ❌ |
8.11.0 | exactement ça | rien d'autre |
^ (le défaut) autorise patches + minors : les correctifs arrivent sans action de votre part, mais un major exige votre décision — protection contre les ruptures.
Lockfile : la plage devient version fixe
Le package.json déclare des plages ; le package-lock.json fige des versions exactes pour tout l'arbre :
"node_modules/pg": { "version": "8.11.3", ... }
Conséquence pratique : npm install sur n'importe quelle machine installe exactement ce que le lockfile décrit, pas « la dernière qui correspond ». Les deux fichiers se versionnent ensemble dans Git.
Mise à jour contrôlée :
npm outdated # quoi a vieilli ?
npm update # monte DANS les plages (lockfile mis à jour)
npm install pg@latest # change la plage elle-même (major possible !)
Audit : connaître ses vulnérabilités
npm audit
Croise votre arbre de dépendances avec la base des vulnérabilités connues :
found 2 vulnerabilities (1 low, 1 moderate)
Chaque entrée indique : package concerné, gravité, description, existence d'un correctif. npm audit fix applique les mises à jour compatibles plages ; les majors demandent une vraie migration. Fréquence recommandée : régulièrement en dev, systématiquement avant chaque release — votre future CI en fera une étape.
Exercice
- Votre dépendance est en
^2.3.0. La 2.9.1 sort, puis la 3.0.0. Qu'installenpm update? Etnpm install pkg@latest? - Pourquoi ne pas tout épingler (
2.3.0exact) dans package.json ? - Lancez
npm auditsur votre projet todo : interprétez le résultat.
Résumé
- Semver : major peut casser, minor ajoute, patch corrige.
- ^/~ définissent les tolérances ; le lockfile fige la réalité.
- audit régulier = hygiène de sécurité élémentaire.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 1. npm update → 2.9.1 (dans la plage ^). install@latest → 3.0.0 (change la plage vers ^3.x) : à faire consciemment, avec lecture du guide de migration.
Question 2. L'épinglage strict bloque les correctifs de sécurité automatiques et multiplie les conflits entre projets. Le duo ^+lockfile offre le meilleur compromis : reproductible ET maintenable.