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).
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.
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.
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.