選択的な依存関係の解決

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 とコツ

  • 無効な解決(無効なパッケージ名など)を定義した場合には警告が表示されます。
  • 解決するバージョンもしくはその範囲が有効でない場合、警告が表示されます。
  • 解決するバージョンもしくはその範囲が、元のバージョン範囲と互換性がない場合は、警告が表示されます。

制限および注意事項

  • ネストされたパッケージは正しく動作しない場合があります。
  • この機能はまだ新しく導入されたので、特定のまれなケースでは正しく動作しない可能性があります。