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.
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'arbrenode_modules
, soitpackage.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
etnpm-shrinkwrap.json
sont présents à la racine de un paquet,package-lock.json
sera complètement ignoré.
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.
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.
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:
- 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 votrepackage.json
, mais comment pouvez-vous assurer à chaque foisnpm 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 denpm ci
qui installe des paquets basés sur le fichier lock) - il améliore le processus d'installation.
- 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).
Je n'engage pas ce dossier dans mes projets. Quel est le point ?
- Il est généré à
- 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.
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'"
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