274 votes

Ai-je besoin à la fois de package-lock.json et de package.json ?

Après avoir mis à jour mon NPM à la dernière version (de 3.X à 5.2.0) et exécuté npm install sur un projet existant, j'obtiens un fichier auto-créé. package-lock.json archivo.

Je peux dire package-lock.json me donne un arbre de dépendances exact, contrairement à package.json .

D'après cette seule information, il semble que package.json est redondant et n'est plus nécessaire.

Ces deux éléments sont-ils nécessaires pour que le NPM fonctionne ?
Est-il possible ou sûr d'utiliser uniquement le package-lock.json fichier ?

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

Editar :

Après avoir réfléchi un peu plus, je suis arrivé à la conclusion que si quelqu'un veut utiliser votre projet avec une version plus ancienne de NPM (avant 5.x), il installera quand même toutes les dépendances, mais avec des versions moins précises (versions de patch)

3 votes

258voto

Markus Stefanko Points 435

Avez-vous besoin des deux package-lock.json y package.json ? No .

Avez-vous besoin de la package.json ? Oui .

Peut-on avoir un projet avec seulement le package-lock.json ? No .

Le site package.json est utilisé pour d'autres choses que les 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 site package-lock.json est uniquement utilisé pour verrouiller les dépendances à un numéro de version spécifique.

93voto

package-lock.json : enregistre la version exacte de chaque paquet installé, ce qui vous permet de les réinstaller. Les installations futures seront capables de construire un arbre de dépendances identique.

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

2 votes

Si ce qui précède est vrai, et package.json enregistre la version minimale requise par l'application et package-lock.json enregistre la version exacte de chaque paquet installé, alors j'ai une situation étrange où un module est défini à la version 0.112.1 dans package.json et 0.110.0 dans package-lock.json...

13voto

rohit.khurmi095 Points 61
 Package.json vs Package.lock.json

enter image description here

enter image description here

12voto

Stanley Kirdey Points 411

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

J'ai trouvé que cela gonflait les pull requests et l'historique des commit, donc si vous voyez un changement, faites un commit séparé pour celui-ci.

1 votes

Non, je ne parlais pas des commits dans le contrôle de la source. Juste si NPM a besoin des deux en même temps pour travailler. package-lock.json semble être une version plus verbeuse de package.json Il est donc possible d'utiliser uniquement le fichier de verrouillage.

0 votes

Je vois, j'ai laissé package.json dans mes projets, principalement pour avoir un endroit pour les scripts npm.

1 votes

Il existe désormais un question distincte sur la question de savoir s'il faut mettre package-lock.json sous contrôle de version.

7voto

Vivek Goel Points 190

Une explication plus précise et plus détaillée de la raison pour laquelle il faut conserver le fichier package-lock.json peut être trouvée dans le document suivant aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X