Bun

覆盖和解析

Bun 支持 npm 的 "overrides" 和 Yarn 的 "resolutions",它们位于 package.json 中。这些是用于为元依赖项(依赖项的依赖项)指定版本范围的机制。

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"

bar 添加到 package.json 中的 "overrides" 字段。Bun 将在确定要安装哪个版本的 bar 时推迟到指定的版本范围,无论它是依赖项还是元依赖项。

注意 — 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"
  }
}