Dans l'article précédent de la série, on a vu comment npm interprète les ranges du package.json.
Ici, on zoome sur le package-lock.json.
package.json vs package-lock.json
Le package-lock.json est conçu pour être versionné dans son repo afin que les devs et la CI installent les mêmes dépendances (dans l’intention), même si cela peut varier selon l’OS/arch, les dépendances optionnelles ou les champs os/cpu.
- package.json décrit l’intention : dépendances + plages (^, ~, intervalles, etc.).
- package-lock.json décrit l’état exact résolu : l’arbre complet des dépendances (y compris transitives), avec versions précises, sources de téléchargement (resolved) et empreintes (integrity).
Ce qu’on trouve dedans
- lockfileVersion : version du format.
- packages : description des packages par chemin, avec resolved et integrity (surtout présent avec le package-lock.json v2+, npm 7+ ; la structure diffère sur les versions plus anciennes).
npm install vs npm ci
-
npm install: installe en s’appuyant sur package.json et le package-lock.json ; il peut le régénérer ou le modifier selon les cas. -
npm ci: installation suivant le package-lock.json, elle échoue si le package.json et le package-lock.json ne correspondent pas, supprime les node_modules avant de lancer l'installation et ne touche pas au package-lock.json.
Cas avancés
-
package-lock.json vs npm-shrinkwrap.json :
npm-shrinkwrap.jsonfige l’arbre pour les libs publiées (prioritaire sur package-lock.json). - Workspaces / monorepo : le package-lock.json centralise la résolution sur tout le workspace.
-
Overrides (
overrides) : permet de forcer une version précise d’une dépendance transitive.
Bonnes pratiques
- Commit systématique du package-lock.json.
- Éviter d’éditer à la main (laisser npm le gérer).
-
npm cien CI pour des installs reproductibles. - Contrôler les diffs du package-lock.json lors des mises à jour.
À retenir
Le package-lock.json n’est pas là “en plus” : c’est la photo exacte de l’état des dépendances.
En l’ignorant, on perd la reproductibilité des installs, et on se complique la vie en CI.
Merci d'avoir lu cet article !
Il a été posté initialement sur mon blog : https://616.earth/package-lock-json-avec-npm
Top comments (0)