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整理维护