Bun 在 package.json
中支持 npm 的 "overrides"
和 Yarn 的 "resolutions"
。 这些是为*元依赖项*(即依赖项的依赖项)指定版本范围的机制。
{
"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"
字段。当确定要安装哪个版本的 bar
时,无论是依赖项还是元依赖项,Bun 都会遵循指定的版本范围。
注意 — Bun 目前仅支持顶级的 "overrides"
。嵌套的 overrides 尚不支持。
{
"name": "my-app",
"dependencies": {
"foo": "^2.0.0"
},
"overrides": {
"bar": "~4.4.0"
}
}
"resolutions"
"resolutions"
的语法类似,它是 Yarn 中 "overrides"
的替代方案。Bun 支持此功能,以方便从 Yarn 迁移。
与 "overrides"
一样,目前尚不支持嵌套的 resolutions。
{
"name": "my-app",
"dependencies": {
"foo": "^2.0.0"
},
"resolutions": {
"bar": "~4.4.0"
}
}