はじめに
この記事は、npmとyarnの依存関係ツリーを上書きするoverrides
/ resolutions
フィールドの使い方を共有するためのものです。
想定する環境
- node.js 16.17.1
- npm 8.15.0
- yarn v1.22.19
overridesフィールドは、npm v8.3.0で導入されました。それ以前のバージョンでは動作しません。
依存関係ツリーを上書きして脆弱性に対応する
依存パッケージが以下のような状態だと、セキュリティ更新に追従するのが難しくなります。
- 脆弱性を持ったパッケージに依存している
- メンテナーが不在で更新がない
そこで導入された機能がpackage.jsonのoverrides
/ resolutions
フィールドです。
npmの場合
overrides
フィールドは、依存パッケージ内のバージョンを固定します。
以下の場合、依存パッケージ内のfoo
パッケージはすべて1.0.0に固定されます。
▼package.json
{
"overrides": {
"foo": "1.0.0"
}
}
特定のパッケージ内の依存パッケージのみを上書きすることもできます。
▼package.json
{
"overrides": {
"foo": {
".": "1.0.0",
"bar": "1.0.0"
}
}
}
特定の依存パッケージ内だけバージョンを固定する場合、overridesフィールドをネストします。この例の場合.
は自分自身を指し、foo
は1.0.0に固定されます。また、foo
から参照されるbar
も1.0.0に固定されます。
yarnの場合
yarnの場合resolutions
フィールドで依存関係ツリーのバージョンを上書きします。
▼package.json
{
"resolutions": {
"d2/left-pad": "1.1.1",
"c/**/left-pad": "^1.1.2"
}
}
resolutionsフィールドとoverridesフィールドの違いは、特定の依存パッケージ内のバージョンの指定方法です。overridesフィールドはパッケージ情報を階層化しますが、resolutionsではキーをGlobで記述します。
なお、v2以降の公式ドキュメントはこちらです。v2以降のyarnをご利用中の方は、こちらもあわせてご確認ください。
以上、ありがとうございました。