DEV Community

Cover image for Le package-lock.json avec npm
Benjamin Auzanneau
Benjamin Auzanneau

Posted on • Originally published at 616.earth

Le package-lock.json avec npm

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.json fige 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 ci en 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)