選択的な依存関係の解決
Yarn はバージョンを選択して解決する機能をサポートしており、package.json
ファイル内の resolutions
フィールドを通じて、依存関係に独自のパッケージのバージョンを定義することができます。 通常、これにより yarn.lock
を手動で編集する必要が出てきます。
なぜこれがしたいのか?
-
依存しているパッケージに重要な更新があっても、頻繁に更新されるわけではないパッケージに依存していることがあるでしょう。 その場合、依存関係が直接指定されたバージョンの範囲において、さらに依存しているパッケージ(サブ依存関係のパッケージ)の更新されたバージョンをカバーしていないなら、作者の対応を待たなければなりません。
-
プロジェクトでサブ依存関係にあるパッケージが重要なセキュリティ上の更新があり、依存関係にあるパッケージが最小のバージョン更新を行うまで待てないことがあります。
-
メンテナンスされていないが動作するパッケージに依存していて、そのパッケージが依存しているものの1つが更新されることがあります。 更新が動作を壊さないことが分かっていて、依存しているパッケージを fork したくなければ、マイナーな依存関係を更新すればよいだけです。
-
依存関係にあるパッケージが広いバージョン範囲を定義していて、サブ依存関係にあるパッケージが問題のある更新を行ったために以前のバージョンに戻したい場合。
使い方は?
resolutions
フィールドを package.json
ファイルに追加して、バージョンの上書きして定義してください。
package.json
{
"name": "project",
"version": "1.0.0",
"dependencies": {
"left-pad": "1.0.0",
"c": "file:../c-1",
"d2": "file:../d2-1"
},
"resolutions": {
"d2/left-pad": "1.1.1",
"c/**/left-pad": "1.1.2"
}
}
そして yarn install
を実行してください。
Tips とコツ
- 無効な解決(無効なパッケージ名など)を定義した場合には警告が表示されます。
- 解決するバージョンもしくはその範囲が有効でない場合、警告が表示されます。
- 解決するバージョンもしくはその範囲が、元のバージョン範囲と互換性がない場合は、警告が表示されます。
制限および注意事項
- ネストされたパッケージは正しく動作しない場合があります。
- この機能はまだ新しく導入されたので、特定のまれなケースでは正しく動作しない可能性があります。