web-dev-qa-db-fra.com

Quelle est la différence entre yarn.lock et package-lock de npm?

J'ai accidentellement couru npm install dans un projet qui utilise Yarn et a remarqué que npm a créé un package-lock.json fichier.

Je sais que Yarn a gagné en popularité en partie parce qu'il a utilisé un fichier de verrouillage pour produire des installations de dépendance plus fiables et déterministes que npm, qui pendant un certain temps n'a eu qu'une paralysie fonction de rétrécissement , mais maintenant je ne suis pas sûr que faire de cette activité npm lockfile et s'il y a quelque chose de convaincant à continuer à utiliser Yarn.

Donc, dans l'esprit d'un Q et R précédents sur StackOverflow sur fil vs film rétractable , je pose la question suivante:

  • Existe-t-il des différences substantielles entre les deux gestionnaires de packages en termes de fiabilité?
  • Sinon, y a-t-il une raison impérieuse de continuer à utiliser Yarn en plus de "More emojis. ????"?
33
fny

Sur le papier, le fil et le NPM 5 semblent presque équivalents. Ils ont tous deux des fichiers de verrouillage déterministes et se sont presque adaptés les uns aux autres en termes de fonctionnalités. Certains diront que Yarn a été le catalyseur pour faire innover le NPM.

Cependant, après avoir expérimenté NPM 5 pendant un mois, mon équipe a décidé de passer à Yarn.

NPM possède techniquement un fichier de verrouillage "plus déterministe" dans la mesure où il existe une garantie théorique que dans toutes les versions de NPM, NPM produira exactement le même dossier node_modules. D'un autre côté, le levage/l'ordre exact des dépendances de Yarn dépend de la version de Yarn et peut changer d'une version à l'autre de Yarn. En général, cela a très peu d'impact.

Pourquoi utiliser Yarn alors? Fusion et fiabilité.

Yarn a fait le léger compromis sur le déterminisme pour obtenir un fichier yarn.lock Beaucoup plus simple et plus facile à fusionner. Si vous êtes un développeur solo, cela ne vous affectera probablement pas, mais si vous faites partie d'une équipe avec plusieurs collaborateurs effectuant des changements de dépendance, cela devient rapidement un énorme problème. Le package-lock De NPM est pratiquement impossible à fusionner et vous finissez par avoir à recréer ou à lutter. En revanche, avec Yarn, les fusions sont faciles et prévisibles.

Voir: https://yarnpkg.com/blog/2017/05/31/determinism/

En remarque, nous avons également constaté que le fil était plus fiable en moyenne.

18
Rajiv Makhijani