Bun 支持 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 是我们项目的元依赖项。
{
"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" 字段。Bun 将根据指定版本范围决定安装哪个版本的 bar,无论它是依赖项还是元依赖项。
注意 — Bun 目前仅支持顶层 "overrides"。不支持嵌套覆盖。
{
"name": "my-app",
"dependencies": {
"foo": "^2.0.0"
},
"overrides": {
"bar": "~4.4.0"
}
}"resolutions"
"resolutions" 的语法类似,它是 Yarn 对 "overrides" 的替代方案。Bun 支持此功能是为了方便从 Yarn 迁移。
与 "overrides" 一样,目前不支持嵌套解析。
{
"name": "my-app",
"dependencies": {
"foo": "^2.0.0"
},
"resolutions": {
"bar": "~4.4.0"
}
}