Bun

覆寫與解析

Bun 支援 npm 的 "overrides" 和 Yarn 的 "resolutions"package.json 中。這些機制用於指定*中繼依賴項*(dependencies of your dependencies)的版本範圍。

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

預設情況下,Bun 將根據每個套件的 package.json 中指定的範圍,安裝所有依賴項和中繼依賴項的最新版本。假設您有一個專案,其中一個依賴項為 foo,而 foo 又依賴於 bar。這表示 bar 是我們專案的*中繼依賴項*。

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

當您執行 bun install 時,Bun 將安裝每個套件的最新版本。

# tree layout of node_modules
node_modules
├── foo@1.2.3
└── bar@4.5.6

但是,如果在 bar@4.5.6 中引入了安全漏洞怎麼辦?我們可能需要一種方法將 bar 固定到沒有漏洞的舊版本。這就是 "overrides"/"resolutions" 的用途。

"overrides"

bar 新增至 package.json 中的 "overrides" 欄位。當決定要安裝哪個版本的 bar 時,無論它是依賴項還是中繼依賴項,Bun 都會參考指定的版本範圍。

注意 — Bun 目前僅支援頂層 "overrides"不支援巢狀覆寫

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

"resolutions"

"resolutions" 的語法與之類似,它是 Yarn 替代 "overrides" 的方案。Bun 支援此功能,以簡化從 Yarn 的遷移。

"overrides" 一樣,目前不支援巢狀解析

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