Est-ce que je m'engage à verrouiller le paquet.fichier json créé par npm 5?

npm 5 a été publié aujourd'hui et l'une des nouvelles fonctionnalités comprennent les installations déterministes avec la création d'un fichier package-lock.json .

ce fichier est-il censé être conservé dans le contrôle source?

je suppose que c'est similaire à yarn.lock et composer.lock , tous deux sont censés être contrôlés à la source.

651
demandé sur rink.attendant.6 2017-05-26 20:03:32

7 réponses

Oui, package-lock.json est destiné à vérifier dans le contrôle de source. Si vous utilisez npm 5, vous pouvez le voir sur la ligne de commande: created a lockfile as package-lock.json. You should commit this file. selon npm help package-lock.json :

package-lock.json est généré automatiquement pour toute opération où npm modifie soit l'arbre node_modules , soit package.json . Il décrit l' l'arbre exact qui a été généré, de sorte que les installations suivantes sont en mesure de générer arbres identiques, indépendamment des mises à jour des dépendances intermédiaires.

ce fichier est destiné à être transféré dans des dépôts source , et sert buts divers:

  • décrivent une représentation unique d'un arbre de dépendances tel que les coéquipiers, les déploiements, et l'intégration continue sont garantis pour installer exactement les mêmes dépendances.

  • fournit une facilité pour les utilisateurs de" voyage dans le temps "aux états précédents de node_modules sans avoir à commettre le répertoire lui-même.

  • pour faciliter une meilleure visibilité des changements d'arbres grâce à des diffs lisibles de contrôle des sources.

  • et optimiser le processus d'installation en permettant au npm de sauter les résolutions de métadonnées répétées pour les paquets déjà installés.

un détail clé sur package-lock.json est qu'il ne peut pas être publié, et il sera ignoré s'il se trouve à un endroit autre que le paquet de niveau supérieur. Il partage un format avec npm-emballé.json(5), qui est essentiellement le même fichier, mais permet la publication. Ceci n'est pas recommandé à moins de déployer un outil CLI ou utiliser autrement le processus de publication pour produire des paquets de production.

si à la fois package-lock.json et npm-shrinkwrap.json sont présents à la racine de un paquet, package-lock.json sera complètement ignoré.

794
répondu vine77 2018-04-24 17:10:35

Oui, c'est prévu pour être enregistré. Je voudrais suggérer qu'il dispose de son propre commettre. Nous constatons qu'il ajoute beaucoup de bruit pour nos différences.

68
répondu xer0x 2017-06-16 21:18:32

vous pouvez consulter les documents officiels: https://docs.npmjs.com/files/package-lock.json

Oui, vous pouvez propager ce fichier. package-lock.json est généré automatiquement pour toute opération où npm modifie soit l'arbre node_modules , soit package.json . Il décrit l'arborescence exacte qui a été générée, de sorte que les installations subséquentes sont capables de générer des arborescences identiques, indépendamment des mises à jour de dépendances intermédiaires.

12
répondu Bablu Singh 2017-10-06 10:44:51

Oui, la meilleure pratique consiste à vérifier le

je suis d'accord qu'il causera beaucoup de bruit ou de conflit en voyant la diff. Mais les avantages sont:

  1. garantir la même version de chaque paquet . Cette partie est la plus importante lorsque l'on construit dans des environnements différents à des moments différents. Vous pouvez utiliser ^1.2.3 dans votre package.json , mais comment pouvez-vous assurer à chaque fois npm install récupérera la même version dans votre machine dev et dans le serveur de compilation, en particulier les paquets de dépendances indirectes? Eh bien, package-lock.json s'en assurera. (Avec l'aide de npm ci qui installe des paquets basés sur le fichier lock)
  2. il améliore le processus d'installation.
  3. il aide avec la nouvelle fonctionnalité d'audit npm audit fix (je pense que la fonctionnalité d'audit est de la version 6 du npm).
12
répondu Xin 2018-09-17 03:05:26

Je n'engage pas ce dossier dans mes projets. Quel est le point ?

  1. Il est généré à
  2. c'est la cause d'une erreur D'intégrité du code SHA1 dans gitlab avec gitlab-ci.yml construit

bien qu'il soit vrai que je n'utilise jamais ^ dans mon paquet.json pour les libs parce que j'ai eu de mauvaises expériences avec elle :)

Cordialement.

6
répondu Deunz 2018-07-12 14:53:19

les gens se plaignent du bruit lorsque vous faites git diff:

git diff -- . ':(exclude)*package-lock.json'

ce que j'ai fait, c'est utiliser un alias

alias gd="git diff --ignore-all-space --ignore-space-at-eol --ignore-space-change --ignore-blank-lines -- . ':(exclude)*package-lock.json'"
4
répondu Raza 2018-06-22 07:04:24

Note: Tout D'abord, je n'ai pas été en mesure de faire les ci-dessous suggéré la solution fonctionne mais je pense qu'avec plus de connaissances sur le sujet nous pouvons le faire fonctionner. Laissez-moi savoir si cela vous a aidé ou ma compréhension à propos de npm-merge-driver est erroné.

comme l'ont dit beaucoup ici it will cause a lot of noise or conflict , dans ce cas, courir:

npx npm-merge-driver install -g

et

npx npm-merge-driver install
$ git merge my-conflicting-branch
npm WARN conflict A git conflict was detected in package-lock.json. Attempting to auto-resolve.

added 1 package in 0.077s
Auto-merging package-lock.json
Merge made by the 'recursive' strategy.
 package-lock.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
$ git status
<clean>

en savoir plus sur docs ici: https://www.npmjs.com/package/npm-merge-driver

-1
répondu Syed 2018-06-24 06:21:21