Skip to main content
Bun 支持在 package.json 中使用 npm 的 "overrides" 和 Yarn 的 "resolutions"。这些机制用于为 元依赖(即你依赖的依赖)指定版本范围。
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
├── [email protected]
└── [email protected]
但如果在 [email protected] 中引入了安全漏洞怎么办?我们可能想要一种方式,将 bar 锁定为没有该漏洞的旧版本。这时就可以用到 "overrides"/"resolutions"

"overrides"

package.json 中的 "overrides" 字段添加 bar。无论它是依赖还是元依赖,Bun 都会依照指定的版本范围决定安装哪个版本的 bar
Bun 目前仅支持顶层的 "overrides"嵌套覆盖 暂不支持。
package.json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "overrides": { 
    "bar": "~4.4.0"
  } 
}

"resolutions"

"resolutions" 的语法与 "overrides" 类似,这是 Yarn 对 "overrides" 的替代方案。Bun 支持此功能以便于从 Yarn 迁移。 同样,嵌套的 resolutions 目前不被支持。
package.json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "resolutions": { 
    "bar": "~4.4.0"
  } 
}