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
の公開を心配する必要はありません。