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を使用して依存性の追加 / アップグレード / 削除を行うと、yarn.lockファイルは自動的に更新されます。 簡単に壊れてしまうため、このファイルを直接編集しないでください。

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

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

ソース管理に含める

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

フレームワークとライブラリの著者も、yarn.lockをソース管理に含めるべきです。 ライブラリのユーザーに影響を与えることはないため、yarn.lockの公開を心配する必要はありません。

See https://yarnpkg.com/blog/2016/11/24/lockfiles-for-all/.