58 votes

Quelle est la difference entre yarn.lock et npm's shrinkwrap?

Récemment, j'ai essayé d'installer mes paquets de nœuds avec Yarn. Cela fonctionne très bien et est beaucoup plus rapide que NPM. Le fil génère automatiquement yarn.lock . Nous avons déjà un NPM shrinkwrap ( npm-shrinkwrap.json ).

Y a-t-il une différence entre eux? Est-ce que yarn.lock a un avantage sur npm-shrinkwrap.json?

55voto

Aurora0001 Points 6416

L' yarn.lock le fichier est assez similaire à d'autres gestionnaires de paquets de verrouillage des fichiers, en particulier la Rouille de la Cargaison du gestionnaire de paquet, qui a Cargo.lock. L'idée de ces fichiers de verrouillage est de représenter un ensemble cohérent de paquets qui devrait toujours fonctionner.

npm magasins de dépendance des plages dans l' package.json le fichier, ce qui signifie que lorsque quelqu'un installe un paquet, ils pourraient obtenir un autre ensemble de dépendances pour vous, car vous pourriez être en cours d'exécution de paquets obsolètes (bien qu'ils continuent de satisfaire la dépendance de la plage que vous avez spécifié). Prenez, par exemple, quelqu'un qui a précisé que la dépendance "foo": "^1.0.0". Ils ont effectivement installé foo v1.0.1, parce que c'était la dernière quand ils ont couru npm install, mais plus tard, quelqu'un installe votre paquet et obtient la dépendance foo v1.1.0. Cela pourrait casser quelque chose inattendue, qui peut être évitée si vous avez un yarn.lock le fichier qui garantit la cohérence paquet de résolution.

Comme pour la comparaison avec d' npm shrinkwrap, la documentation , l'explique très clairement:

Il est semblable à des mnp npm-emballé.json, cependant elle n'est pas figé et il crée des résultats reproductibles.

La documentation conseille également de commettre yarn.lock de vos dépôts, si vous n'êtes pas déjà de faire cela, de sorte que vous pouvez récolter les avantages de la cohérente et reproductible paquet de résolution. Cette question explique plus loin pourquoi vous devriez le faire.

Les pertes de comportement de l' npm shrinkwrap est attribuable à la non-déterministe des algorithmes utilisés par npm lui-même; comme indiqué dans les commentaires d'une autre réponse, npm shrinkwrap > npm install > npm shrinkwrap n'est pas garanti pour produire le même résultat que juste emballage par rétraction une fois, alors que le Fil utilise explicitement "installer un algorithme déterministe et fiable".

5voto

imguru Points 100

Quelle est la différence entre eux

Fils suit une approche plus déterministe de l'algorithme, par rapport à l' npm shrinkwrap. Si vous êtes à l'aide de Fils, de continuer à l'utiliser shrinkwrap serait contre-intuitif

Vous pouvez le trouver dans la documentation pour l' yarn.lock:

Il est semblable à des mnp npm-emballé.json, cependant elle n'est pas figé et il crée des résultats reproductibles

Cependant, la question demeure de savoir si le fil est prêt pour la production. Il y a encore un tas de bugs flagrants ouverte sur le dépôt GitHub, donc je voudrais attendre un mois ou deux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X