web-dev-qa-db-ja.com

Yarn.lockファイルをコミットする必要がありますか。

yarn.lockを実行すると、Yarnはyarn installファイルを作成します。

これをリポジトリにコミットするか無視するかそれは何のため?

232
rlay3

はい、チェックインする必要があります。 npmからの移行 を参照してください。

Yarnはあなたのパッケージのルートディレクトリ内にyarn.lockファイルを生成します。このファイルを読んだり理解したりする必要はありません。ソース管理にチェックインするだけです。

225
ckuijjer

プロジェクトが何であるかによって異なります:

  1. プロジェクトはアプリケーションですか?次に:はい
  2. プロジェクトはライブラリですか?その場合:No

これについてのより詳細な説明は このGitHubの問題 にあります。Yarnの作成者の1人。言う:

Package.jsonは元の作者が望む意図されたバージョンを記述しますが、yarn.lockは与えられたアプリケーションの最後の既知の良い構成を記述します。

最上位プロジェクトのyarn.lock-ファイルのみが使用されます。したがって、あるプロジェクトがスタンドアロンで使用され、別のプロジェクトにインストールされない限り、yarn.lock- fileをコミットすることは意味がありません。代わりに、プロジェクトが期待する依存関係のバージョンを伝えるのは常にpackage.json- fileになります。

67
VoxPelli

私はこれらが二つの別々の質問であるのを見ます。両方に答えさせてください。

ファイルをリポジトリにコミットする必要がありますか?

はい。 ckuijjerの回答 で述べたように、 Migration Guide でこのファイルをリポジトリに含めることが推奨されています。理解するために読み続けてください。{why​​ _あなたはそれをする必要があります。

yarn.lockとは何ですか?

プロジェクトの正確な依存関係のバージョンと各パッケージのチェックサムを格納したファイルです。これは、依存関係に一貫性を持たせるための方法です。

なぜこのファイルが必要なのかを理解するには、最初に元のNPMのpackage.jsonの背後にある問題が何かを理解する必要があります。パッケージをインストールすると、NPMは特定のリビジョン(semver)ではなく、依存関係の許容されるリビジョンの範囲を保存します。 NPMは、指定された範囲内の依存関係の最新バージョンの依存関係の更新を取得しようとします(つまり、破損しないパッチの更新)。この方法には2つの問題があります。

  1. 依存関係の作者は、実際にはプロジェクトに影響を与えるような重大な変更を導入しながら、パッチバージョンの更新をリリースするかもしれません。

  2. 異なる時間にnpm installを実行している2人の開発者は、異なる依存関係を得ることができます。これは、2つのまったく同じ環境でバグが再現できない原因となる可能性があります。これは、たとえばCIサーバーのビルド安定性の問題を引き起こす可能性があります。

一方、糸は最大の予測可能性のルートをたどります。それはexact依存関係バージョンを保存するためのyarn.lockファイルを作成します。そのファイルを適切な場所に配置すると、yarn.lockのバージョンを解決するのではなく、package.jsonに格納されているバージョンが使用されます。この戦略は、上記の問題が発生しないことを保証します。

yarn.lockは、npm-shrinkwrap.jsonコマンドで作成できるnpm shrinkwrapと似ています。これら2つのファイルの違いを説明する this answer をチェックしてください。

52
Juriy

Yarnが独自のyarn.lockファイルをバージョン管理しているので、私はそう思うでしょう: https://github.com/yarnpkg/yarn

決定論的なパッケージ依存関係の解決に使用されます。

10
jarekwg

はい、あなたはそれをコミットするべきです。 yarn.lockファイルの詳細については、公式のドキュメントを参照してください ここ

2
Navin prasad

はい! yarn.lockをチェックインして、依存関係をインストールする開発者がまったく同じ出力を取得するようにする必要があります! npm[2016年10月に利用可能だった]を使用すると、たとえば、patchバージョン(たとえば、1.2.0)をローカルにインストールし、新しいinstallを実行している新しい開発者が異なるバージョン(1.2.1)を取得する場合があります。

2
enapupe