web-dev-qa-db-fra.com

Devrais-je valider le fichier yarn.lock et à quoi sert-il?

Le fil crée un fichier yarn.lock après avoir effectué un yarn install.

Est-ce que cela devrait être engagé dans le référentiel ou ignoré? Pourquoi est-ce?

251
rlay3

Oui, vous devriez l’enregistrer, voir Migration de npm

Yarn générera un fichier yarn.lock dans le répertoire racine de votre paquet. Vous n'avez pas besoin de lire ou de comprendre ce fichier - il suffit de l'insérer dans le contrôle de source.

234
ckuijjer

Cela dépend de votre projet:

  1. Votre projet est-il une application? Alors: Oui
  2. Votre projet est-il une bibliothèque? Si oui: Non

Une description plus élaborée de ceci peut être trouvée dans ce numéro de GitHub où l’un des créateurs de Yarn par exemple. dit:

Le package.json décrit les versions prévues souhaitées par l'auteur d'origine, tandis que yarn.lock décrit la dernière configuration connue pour une application donnée.

Seul le fichier yarn.lock- du projet de niveau supérieur sera utilisé. Donc, à moins qu'un projet ne soit utilisé de manière autonome et ne soit pas installé dans un autre projet, il est alors inutile de valider un fichier yarn.lock-. Au lieu de cela, ce sera toujours le fichier package.json- qui transmettra les versions. de dépendances attendues par le projet.

67
VoxPelli

Je vois que ce sont deux questions distinctes en une. Laisse-moi répondre aux deux.

Devriez-vous valider le fichier dans le repo?

Oui. Comme mentionné dans réponse de ckuijjer , il est recommandé dans Guide de migration d'inclure ce fichier dans le référentiel. Lisez la suite pour comprendre pourquoi vous devez le faire.

Qu'est-ce que yarn.lock?

C'est un fichier qui stocke les versions de dépendance exactes pour votre projet avec des sommes de contrôle pour chaque paquet. C'est la façon dont les fils assurent la cohérence de vos dépendances.

Pour comprendre pourquoi ce fichier est nécessaire, vous devez d'abord comprendre quel était le problème derrière le package.json de NPM d'origine. Lorsque vous installez le package, NPM stocke la plage de révisions autorisées d'une dépendance au lieu d'une révision spécifique (semver). NPM essaiera d’extraire de la dernière version de la dépendance la dernière version de la dépendance dans la plage spécifiée (mises à jour correctives intempestives). Cette approche pose deux problèmes.

  1. Les auteurs de dépendance peuvent publier des mises à jour de version de correctif tout en introduisant un changement radical qui affectera votre projet.

  2. Deux développeurs exécutant npm install à des moments différents peuvent obtenir les différents ensembles de dépendances. Ce qui peut faire en sorte qu'un bogue ne soit pas reproductible sur deux environnements identiques. Cela pourrait entraîner des problèmes de stabilité de génération pour les serveurs CI, par exemple.

Le fil, quant à lui, emprunte la voie de la prévisibilité maximale. Il crée un fichier yarn.lock pour enregistrer les versions de dépendance exactes . Avoir ce fichier en place utilise les versions stockées dans yarn.lock au lieu de résoudre les versions de package.json. Cette stratégie garantit qu'aucun des problèmes décrits ci-dessus ne se produit.

yarn.lock est similaire à npm-shrinkwrap.json qui peut être créé par la commande npm shrinkwrap. Cochez cette réponse expliquez les différences entre ces deux fichiers.

60
Juriy

Je suppose que oui, puisque Yarn utilise son propre fichier yarn.lock: https://github.com/yarnpkg/yarn

Il est utilisé pour la résolution déterministe des dépendances de paquets.

10
jarekwg

D'après mon expérience, je dirais que oui, nous devrions valider le fichier yarn.lock. Cela garantira que, lorsque d'autres personnes utiliseront votre projet, elles obtiendront les mêmes dépendances que celles attendues par votre projet.

du doc

Lorsque vous exécutez yarn ou yarn add, Yarn générera un fichier yarn.lock dans le répertoire racine de votre paquet. Vous n'avez pas besoin de lire ou de comprendre ce fichier - il suffit de l'insérer dans le contrôle de source. Lorsque d’autres personnes commencent à utiliser Yarn au lieu de npm, le fichier yarn.lock leur garantit d’obtenir exactement les mêmes dépendances que vous.

Un argument pourrait être que nous pouvons y parvenir en remplaçant ^ par --. Oui, nous le pouvons, mais en général, nous avons constaté que la majorité des packages npm sont livrés avec la notation ^ et nous devons modifier la notation manuellement pour garantir la version de dépendance statique.Mais si vous utilisez yarn.lock il vérifiera par programme votre version correcte.

Aussi comme Eric Elliott a dit ici

Ne pas .gitignore yarn.lock. Il est là pour assurer la résolution de dépendance déterministe afin d'éviter les bogues "fonctionne sur ma machine".

4
Anshul

Oui, vous devriez le commettre. Pour plus d'informations sur le fichier yarn.lock, reportez-vous à la documentation officielle ici

2
Navin prasad

Oui! yarn.lock doit être coché pour que tout développeur qui installe les dépendances obtienne exactement le même résultat! Avec npm [disponible en octobre 2016] , par exemple, vous pouvez avoir une version patch ( dire 1.2.0) installé localement alors qu'un nouveau développeur exécutant une nouvelle install pourrait obtenir une version différente (1.2.1).

2
enapupe