yarn.lock

各開発者のマシン間で一貫したインストールを行うためには、Yarn には package.json で設定した依存関係以外にも追加の情報が必要です。 一貫したインストールのためには、Yarn は各依存関係のどのバージョンがインストールされたのか、正確に記録しておく必要があるからです。

これを実現するために Yarn が使用するのが、プロジェクトのルートに作成する yarn.lock です。この “lockfiles” は、次のようなフォーマットになっています。

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
package-1@^1.0.0:
  version "1.0.3"
  resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
package-2@^2.0.0:
  version "2.0.1"
  resolved "https://registry.npmjs.org/package-2/-/package-2-2.0.1.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  dependencies:
    package-4 "^4.0.0"
package-3@^3.0.0:
  version "3.1.9"
  resolved "https://registry.npmjs.org/package-3/-/package-3-3.1.9.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  dependencies:
    package-4 "^4.5.0"
package-4@^4.0.0, package-4@^4.5.0:
  version "4.6.3"
  resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"

これは Bundler や Cargo などの他のパッケージマネージャーにおける lockfiles に相当するものです。npm の npm-shrinkwrap.json と似ていますが、インストールの情報が不足なく記録されているため、再現性のある結果を得ることができます。

Yarnによる管理

yarn.lock ファイルは自動生成されるため、Yarn を使わずに手動で編集するべきではありません。 Yarn CLI を使用して依存パッケージの add/upgrade/remoe を実行すると、yarn.lockファイルも自動的に更新されます。 簡単に壊れてしまうため、このファイルを直接編集しないでください。

現在のパッケージのみ対象

パッケージのインストール時、Yarn はトップレベルの yarn.lock ファイルのみを使用し、依存関係の中にある yarn.lock はすべて無視します。 トップレベルの yarn.lock には、Yarn が必要とする依存関係ツリー全体の全てのパッケージのバージョンロック情報が含まれています。

ソース管理に含める

すべての yarn.lockファイルは、ソース管理ツール (git や mercurial など) に含めるべきです。 そうすれば、同僚のラップトップでもCIサーバーでも、Yarn はすべてのマシン環境で全く同じ依存関係ツリーをインストールできるようになります。

フレームワークやライブラリの作者も、yarn.lock をソース管理ツールにチェックするべきです。 たとえ yarn.lock ファイルを公開しても、ライブラリのユーザーには影響はありません。心配は不要です。

詳しくは https://yarnpkg.com/blog/2016/11/24/lockfiles-for-all/ を参照してください。