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 中指定的范圍安裝所有依賴和元依賴的最新版本。假設你有一個項目,其中一個依賴 foo,而 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"

bar 添加到 package.json 中的 "overrides" 字段。Bun 在確定安裝哪個版本的 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"

"resolutions" 的語法類似,它是 Yarn 對 "overrides" 的替代方案。Bun 支持此功能以使從 Yarn 遷移更容易。

"overrides" 一樣,目前不支持_嵌套解析_。

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

Bun學習網由www.bunjs.com.cn整理維護