Nous utilisons du fil pour toutes nos installations déterministes de pkg mais n'empêchons pas l'utilisateur d'utiliser npm - je suppose que le fait d'avoir ces deux fichiers causera des problèmes. Doit-on en ajouter un à votre répertoire .gitignore?
119
Réponses:
Toujours valider les fichiers de verrouillage de dépendance en général
Comme cela est couvert ailleurs, les fichiers de verrouillage de dépendance, qui sont pris en charge par de nombreux systèmes de gestion de paquets (par exemple: compositeur et bundler ), doivent être validés dans la base de code dans les projets de fin de chaîne - de sorte que chaque individu essayant d'exécuter ce projet fasse donc avec exactement l'ensemble de dépendances testé.
Il est moins clair si les fichiers de verrouillage doivent toujours être validés dans des packages destinés à être inclus dans d'autres projets (où des dépendances plus lâches sont souhaitables). Cependant, Yarn et NPM (comme couvert par @Cyrille) ignorent intelligemment
yarn.lock
etpackage-lock.json
respectivement si nécessaire, ce qui permet de toujours valider ces fichiers de verrouillage.Vous devez donc toujours valider au moins un des
yarn.lock
ou enpackage-lock.json
fonction du gestionnaire de packages que vous utilisez.Devez-vous valider à la fois yarn.lock et package-lock.json?
À l'heure actuelle, nous avons deux systèmes de gestion de paquets différents, qui installent tous deux le même ensemble de dépendances à partir de
package.json
, mais qui génèrent et lisent à partir de deux fichiers de verrouillage différents. NPM 5 génèrepackage-lock.json
, tandis que Yarn génèreyarn.lock
.Si vous vous engagez,
package-lock.json
vous créez un support pour les personnes installant vos dépendances avec NPM 5. Si vous vous engagezyarn.lock
, vous construisez un support pour les personnes installant des dépendances avec Yarn.Que vous choisissiez de vous engager
yarn.lock
oupackage-lock.json
ou les deux dépend du fait que ceux qui développent votre projet utilisent uniquement Yarn ou NPM 5 ou les deux. Si votre projet est open-source, la chose la plus conviviale à faire pour la communauté serait probablement de valider les deux et d'avoir un processus automatisé pour garantiryarn.lock
etpackage-lock.json
toujours rester synchronisé.Mise à jour: Yarn a maintenant introduit une
import
commande qui générera unyarn.lock
fichier à partir d'unpackage-lock.json
fichier. Cela peut être utile pour synchroniser les deux fichiers. (Merci @weakish)Ces questions ont été longuement discutées sur le projet Yarn dans:
Les deux sont maintenant fermés.
la source
yarn import
a été introduit en 2018. yarnpkg.com/blog/2018/06/04/yarn-import-package-lockVous devez valider 1 fichier de verrouillage d'arborescence de dépendances, mais vous ne devez pas valider les deux. Cela nécessite également une standardisation sur yarn ou npm (pas les deux) pour construire + développer un projet avec.
Voici l'article sur le fil expliquant pourquoi yarn.lock doit être engagé, si vous standardisez sur le fil.
Si vous validez à la fois le
yarn.lock
fichier ET lespackage-lock.json
fichiers, il existe de nombreuses façons dont les 2 fichiers peuvent fournir des arbres de dépendances différents (même si les algorithmes de résolution d'arborescence de yarn et de npm sont identiques), et il n'est pas trivial de s'assurer qu'ils fournissent exactement le même réponse. Comme ce n'est pas trivial, il est peu probable que la même arborescence de dépendances soit maintenue dans les deux fichiers, et vous ne voulez pas de comportement différent selon que la construction a été faite en utilisant yarn ou npm.Si et quand yarn passe de l'utilisation
yarn.lock
àpackage-lock.json
( problème ici ), alors le choix du fichier de verrouillage à valider devient facile, et nous n'avons plus à nous soucier de yarn et npm résultant en des constructions différentes. Sur la base de cet article de blog , il s'agit d'un changement auquel nous ne devrions pas nous attendre bientôt (l'article de blog décrit également les différences entreyarn.lock
etpackage-lock.json
.la source
Je pensais à la même question. Voici mes pensées, j'espère que cela vous aidera:
La documentation de npm package-lock.json dit ce qui suit:
C'est génial car cela empêche l'effet "fonctionne sur ma machine".
Sans ce fichier, si vous
npm install --save A
, npm s'ajoutera"A": "^1.2.3"
à votrepackage.json
. Lorsque quelqu'un d'autre exécutenpm install
votre projet, il est possible que la version1.2.4
deA
ait été publiée. Comme il s'agit de la dernière version disponible qui satisfait la plage de semver spécifiée dans votrepackage.json
, il installera cette version. Mais que se passe-t-il s'il y a un nouveau bogue introduit dans cette version? Cette personne aura un problème que vous ne pouvez pas reproduire car vous avez la version précédente, sans aucun bug.En corrigeant l'état de votre
node_modules
répertoire,package-lock.json
file évite ce problème car tout le monde aura les mêmes versions de tous les packages.Mais que se passe-t-il si vous écrivez et publiez un module npm? La documentation dit ce qui suit:
Ainsi, même si vous le validez, lorsque l'utilisateur installe votre module, il n'obtiendra pas le
package-lock.json
fichier, mais uniquement lepackage.json
fichier. Ainsi, npm installera la dernière version qui satisfait les plages semver de toutes vos dépendances. Cela signifie que vous souhaitez toujours tester votre module avec ces versions de vos dépendances, et non celle que vous avez installée lorsque vous avez commencé à écrire votre module. Donc, dans ce cas,package-lock.json
est clairement inutile. De plus, cela peut être ennuyeux.la source
Voici ma règle de base: si vous travaillez sur une application, validez le ou les fichiers de verrouillage. Si vous gérez une bibliothèque, ajoutez-la à votre liste ignorée. Dans tous les cas, vous devriez utiliser des plages de semver précises dans
package.json
. Yehuda Katz ( mis en cache ) a écrit une excellente explication pour savoir quand commettreGemfile.lock
(fichier de verrouillage de Ruby) et quand ne pas le faire. Au moins, lisez la section tl; dr.la source
.gitignore
et se trouve généralement à la racine du projet.Vous avez raison! Autoriser les deux
npm
etyarn
être utilisé va causer des problèmes. Jetez un œil à cet article .Vous pouvez ne pas vouloir à la fois
npm
et enyarn
tant que gestionnaire de paquets.la source
Ces fichiers sont gérés par vos outils, donc - en supposant que l'utilisation de yarn mettra effectivement à jour le
package-lock.json
- je suppose que la validation des deux fichiers fonctionne correctement.Je pense que le plus important pour votre utilisateur est
package-lock.json
(par exemple, je n'utilise pas de fil), donc celui-ci doit être validé.Pour le
yarn.lock
, cela dépend si vous travaillez seul ou en équipe. En solo, alors je suppose qu'il n'est pas nécessaire de le valider. Si vous (prévoyez de) travailler en équipe, vous devriez probablement le valider, au moins jusqu'à ce que le fil le soutienne 🙂Je suppose que l'équipe de fil finira par cesser d'utiliser
yarn.lock
et utiliser à lapackage-json.lock
place, à ce moment-là, cela deviendra plus simple 😛la source
Non, l'utilisation simultanée des deux fichiers de verrouillage entraînera le plus souvent des incohérences dans votre arborescence de dépendances, en particulier lors de la collaboration au sein d'une équipe. Ignorer un verrou ou l'autre est une solution simple. Assurez-vous simplement que votre équipe comprend et accepte ce changement.
la source