Open SyMind opened 2 years ago
如果你想对 npm 依赖的依赖进行更改,例如,根据已知的安全问题来替换依赖的版本,用 fork 替换现有的依赖,或者确保在任何地方都使用相同版本的包,此时可以使用 npm 的 overrides 配置。
overrides
overrides 可以将依赖树中的包替换为其他的版本,或全完替换为其他的包。可以根据需要决定变更的范围。
确保软件包 foo 始终安装为 1.0.0 版本,无论依赖的 package.json 中选择的是哪个版本:
foo
1.0.0
{ "overrides": { "foo": "1.0.0" } }
上面是配置的简写形式,可以使用完整的配置对象形式来覆盖包本身以及包的子依赖。下面的配置让 foo 始终为 1.0.0 版本,同时在 foo 下的任何深度的 bar 为 1.0.0 版本:
bar
{ "overrides": { "foo": { ".": "1.0.0", "bar": "1.0.0" } } }
仅覆盖 bar 下的 foo 包为 1.0.0 版本:
{ "overrides": { "baz": { "bar": { "foo": "1.0.0" } } } }
overrides 配置的 key 可以包含版本。仅覆盖 bar@2.0.0 下的 foo 包,让其版本为 1.0.0:
bar@2.0.0
{ "overrides": { "bar@2.0.0": { "foo": "1.0.0" } } }
你不能在 overrides 中配置一个与直接关联的 dependencies 中版本定义不同的包。为了更加容易的处理该限制,你可以 $ 前缀加上包名,来直接引用此包在 dependencies 中的版本定义:
dependencies
$
{ "dependencies": { "foo": "^1.0.0" }, "overrides": { // 错误,将抛出 EOVERRIDE 错误 // "foo": "^2.0.0" // 正确,版本定义匹配 // "foo": "^1.0.0" // 最佳实践,使用 `$` 前缀引用 `dependencies` 中的版本定义 "foo": "$foo" } }
overrides 依赖 npm 8.3 以上版本,若 npm 低于该版本可以使用 npm-force-resolutions。
https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides
如果你想对 npm 依赖的依赖进行更改,例如,根据已知的安全问题来替换依赖的版本,用 fork 替换现有的依赖,或者确保在任何地方都使用相同版本的包,此时可以使用 npm 的
overrides
配置。overrides
可以将依赖树中的包替换为其他的版本,或全完替换为其他的包。可以根据需要决定变更的范围。确保软件包
foo
始终安装为1.0.0
版本,无论依赖的 package.json 中选择的是哪个版本:上面是配置的简写形式,可以使用完整的配置对象形式来覆盖包本身以及包的子依赖。下面的配置让
foo
始终为1.0.0
版本,同时在foo
下的任何深度的bar
为1.0.0
版本:仅覆盖
bar
下的foo
包为1.0.0
版本:overrides
配置的 key 可以包含版本。仅覆盖bar@2.0.0
下的foo
包,让其版本为1.0.0
:你不能在
overrides
中配置一个与直接关联的dependencies
中版本定义不同的包。为了更加容易的处理该限制,你可以$
前缀加上包名,来直接引用此包在dependencies
中的版本定义:注意
overrides
依赖 npm 8.3 以上版本,若 npm 低于该版本可以使用 npm-force-resolutions。参考资料
https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides