Ai-je besoin de package-lock.json et package.json?

149

Après avoir mis à jour mon NPM vers la dernière version (de 3.X à 5.2.0) et exécuté npm installsur un projet existant, j'obtiens un package-lock.jsonfichier créé automatiquement .

Je peux dire package-lock.jsonme donne un arbre de dépendances exact par opposition à package.json.

À partir de cette seule information, il semble que ce package.jsonsoit redondant et plus nécessaire.

Les deux sont-ils nécessaires au fonctionnement du NMP?
Est-il sûr ou possible d'utiliser uniquement le package-lock.jsonfichier?

La documentation sur package-lock.json ( doc1 , doc2 ) ne mentionne rien à ce sujet.

Modifier :

Après réflexion, je suis arrivé à la conclusion que si quelqu'un voulait utiliser votre projet avec une ancienne version de NPM (avant 5.x), il installerait toujours toutes les dépendances, mais avec des versions moins précises (versions de correctif)

Omri Luzon
la source
3
lien
Lakshmipriya Mukundan

Réponses:

103

Avez-vous besoin des deux package-lock.jsonet package.json? Non .

Avez-vous besoin du package.json? Oui .

Pouvez-vous avoir un projet avec seulement le package-lock.json? Non .

Le package.jsonest utilisé pour plus que des dépendances - comme la définition des propriétés du projet, la description, les informations sur l'auteur et la licence, les scripts, etc. Le package-lock.jsonest uniquement utilisé pour verrouiller les dépendances sur un numéro de version spécifique.

Markus Stefanko
la source
19

package-lock.json: enregistre la version exacte de chaque paquet installé, ce qui vous permet de les réinstaller. Les futures installations pourront créer une arborescence de dépendances identique.

package.json: enregistre la version minimale dont votre application a besoin. Si vous mettez à jour les versions d'un package particulier, la modification ne sera pas reflétée ici.

Narendar Reddy M
la source
1
Si ce qui précède est vrai et package.jsonenregistre la version minimale requise par l'application et package-lock.json enregistre la version exacte de chaque package installé, alors j'ai une situation étrange où un module est défini à la version 0.112.1 dans le package .json et 0.110.0 dans package-lock.json ...
Jean-François Beauchamp le
6

Si votre question est de savoir si le fichier de verrouillage doit être validé dans votre contrôle de source, il le devrait. Il sera ignoré dans certaines circonstances.

Je l'ai trouvé gonflant dans les demandes de tirage et dans l'historique des commit, donc si vous le voyez changer, faites un commit séparé pour cela.

Stanley Kirdey
la source
1
Non, je ne vous posais pas de questions sur les commits au contrôle de source. Juste si NPM a besoin des deux en même temps pour fonctionner. package-lock.jsonsemble être une version plus détaillée de package.json, il est donc sûr ou possible d'utiliser uniquement le fichier de verrouillage.
Omri Luzon
Je vois, j'ai laissé package.json dans mes projets, principalement pour avoir une place pour les scripts npm.
Stanley Kirdey
1
Il y a maintenant une question distincte sur l'opportunité de mettre package-lock.jsonsous contrôle de version.
Adrian W
0

Une explication plus précise et détaillée de la raison du maintien de package-lock.json peut être trouvée ici

Vivek Goel
la source