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

Yarn crée un fichier yarn.lock après avoir effectué une yarn install .

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

Oui, vous devriez le vérifier, voir Migration depuis npm

Yarn va générer 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 le vérifier dans le contrôle de code source.

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

On peut en trouver une description plus élaboré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 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 yarn.lock yarn.lock du projet de niveau supérieur sera utilisé. Donc, à moins que les projets ne soient utilisés de manière autonome et ne soient pas installés dans un autre projet, il ne sera pas utile de yarn.lock un yarn.lock yarn.lock – au lieu de cela, le fichier package.json sera toujours utilisé pour transmettre les versions des dépendances du projet. attend alors.

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

Devriez-vous engager le fichier dans un repo?

Oui. Comme mentionné dans la réponse de ckuijjer, il est recommandé dans le 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 ainsi que les sums de contrôle pour chaque paquet. C’est la manière dont le fil fournit une cohérence pour vos dépendances.

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

  1. Les auteurs de dépendances peuvent publier des mises à jour de version de correctif tout en introduisant une modification qui affectera votre projet.

  2. Deux développeurs exécutant npm install à différents moments peuvent obtenir les différentes dépendances. Ce qui peut rendre un bogue non reproductible sur deux environnements identiques. Cela peut entraîner des problèmes de stabilité de génération pour les serveurs CI, par exemple.

Le fil d’autre part prend la voie de la prévisibilité maximale. Il crée yarn.lock fichier yarn.lock pour enregistrer les versions de dépendance exactes . Avoir ce fichier en place yarn utilisera les versions stockées dans yarn.lock au lieu de résoudre les versions à partir de package.json . Cette stratégie garantit qu’aucune des questions décrites 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 en expliquant les différences entre ces deux fichiers.

Je suppose que oui, depuis les versions Yarn son propre fichier yarn.lock: https://github.com/yarnpkg/yarn

Il est utilisé pour la résolution des dépendances de package déterministes.

De mon expérience, je dirais que oui, nous devrions commettre le fichier yarn.lock . Cela garantira que, lorsque d’autres personnes utiliseront votre projet, elles auront les mêmes dépendances que votre projet.

De la doc

Lorsque vous lancez un fil ou un fil, Yarn va générer 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 le vérifier dans le contrôle de code source. Lorsque d’autres personnes commencent à utiliser Yarn au lieu de npm, le fichier yarn.lock s’assure qu’elles obtiennent exactement les mêmes dépendances que vous.

On pourrait faire valoir que nous pouvons y parvenir en remplaçant ^ par -- . Oui, nous pouvons, mais en général, nous avons vu que la majorité des paquets npm sont npm avec une notation ^ , et que nous devons changer la notation manuellement pour garantir la version de dépendance statique.

Aussi Eric Elliott a dit ici

Ne pas .gitignore yarn.lock. Il est là pour assurer une résolution déterministe des dépendances pour éviter les bogues «fonctionne sur ma machine».

Oui, vous devriez le commettre. Pour plus d’informations sur le fichier yarn.lock, reportez-vous ici aux documents officiels

Oui! yarn.lock doit être yarn.lock pour que tout développeur qui installe les dépendances obtienne exactement le même résultat! Avec npm , par exemple, vous pouvez avoir une version de patch (disons 1.2.0) installée localement alors qu’un nouveau développeur exécutant une nouvelle install peut obtenir une version différente (1.2.1).