LoginSignup
13
4

More than 1 year has passed since last update.

依存パッケージの脆弱性修正には、package.jsonのoverrides / resolutionsフィールドを使いましょう

Posted at

はじめに

この記事は、npmとyarnの依存関係ツリーを上書きするoverrides / resolutionsフィールドの使い方を共有するためのものです。

想定する環境

  • node.js 16.17.1
  • npm 8.15.0
  • yarn v1.22.19

overridesフィールドは、npm v8.3.0で導入されました。それ以前のバージョンでは動作しません。

この記事はyarn v1系統を対象としています。yarn v2+では挙動が変わるかもしれません。各自でご確認ください。

依存関係ツリーを上書きして脆弱性に対応する

依存パッケージが以下のような状態だと、セキュリティ更新に追従するのが難しくなります。

  • 脆弱性を持ったパッケージに依存している
  • メンテナーが不在で更新がない

そこで導入された機能が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をご利用中の方は、こちらもあわせてご確認ください。

以上、ありがとうございました。

13
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4