web-dev-qa-db-fra.com

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

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

Je peux dire que package-lock.json me donne un arbre de dépendance exact, par opposition à package.json.

À partir de cette seule information, il semble que package.json soit redondant et inutile.

Les deux sont-ils nécessaires au bon fonctionnement du MNP?
Est-il sûr ou possible d’utiliser uniquement le fichier package-lock.json?

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

Modifier :

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

81
Omri Luzon

Avez-vous besoin à la fois de package-lock.json et de package.json? Non.

Avez-vous besoin du package.json? Oui.

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

Le package.json est utilisé pour plus que des dépendances - telles que 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.json sert uniquement à verrouiller les dépendances avec un numéro de version spécifique.

41
Markus Stefanko

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

J'ai trouvé que les demandes d'extraction et l'historique de validation étaient trop volumineux. Si vous constatez un changement, effectuez une validation distincte.

4
Stanley Kirdey

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

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

3
Narendar Reddy M