Skip to content

Bun は package.json 内の npm の "overrides" と Yarn の "resolutions" をサポートしています。これらは メタ依存関係(依存関係の依存関係)のバージョン範囲を指定するメカニズムです。

json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "overrides": { 
    "bar": "~4.4.0"
  } 
}

デフォルトで、Bun は各パッケージの package.json で指定された範囲に従って、すべての依存関係とメタ依存関係の最新バージョンをインストールします。プロジェクトに依存関係が 1 つ(foo)あり、それが順番に bar に依存しているとします。これは、bar がプロジェクトの メタ依存関係 であることを意味します。

json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  }
}

bun install を実行すると、Bun は各パッケージの最新バージョンをインストールします。

txt
node_modules
├── foo@1.2.3
└── bar@4.5.6

しかし、bar@4.5.6 にセキュリティの脆弱性が導入されたらどうでしょうか。脆弱性のない古いバージョンに bar を固定したいかもしれません。ここで "overrides"/"resolutions" が登場します。


"overrides"

package.json"overrides" フィールドに bar を追加します。Bun は、bar が依存関係かメタ依存関係かに関係なく、インストールする bar のバージョンを決定する際に指定されたバージョン範囲を優先します。

NOTE

Bun は現在、トップレベルの `"overrides"` のみをサポートしています。[ネストされた オーバーライド](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#overrides) はサポートされていません。
json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "overrides": { 
    "bar": "~4.4.0"
  } 
}

"resolutions"

構文は Yarn の "overrides" 代替案である "resolutions" と似ています。Bun は Yarn からの移行を容易にするためにこの機能をサポートしています。

"overrides" と同様に、ネストされた解決 は現在サポートされていません。

json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "resolutions": { 
    "bar": "~4.4.0"
  } 
}

Bun by www.bunjs.com.cn 編集