跳到主要内容

overrides

2024年12月09日
柏拉文
越努力,越幸运

一、认识


package.json overrides 允许你覆盖该项目中直接依赖的包的版本。overrides 允许你针对一个包指定一个版本,强制该包使用某个特定的版本,即使该包在其他地方有不同的版本声明。

二、语法


b 项目的 package.json 中使用 overrides 来强制指定 a 的版本

{
"overrides": {
"a": "1.2.4"
}
}

三、问题


3.1 pnpmfile.cjs Vs overrides Vs pnpmOverrides

在使用 PNPM 时,项目的依赖版本管理可以通过多个方式进行控制,pnpmfile.cjsoverridespnpmOverrides 都可以用来指定或覆盖依赖的版本。他们的优先级为: pnpm.overrides > overrides > pnpmfile.cjs。假如根项目的 .pnpmfile.cjs 配置指定了 a 的版本为 1.2.3, 根项目的 pnpmOverrides 强制 a 为版本 1.2.5, 子项目 bpackage.json 配置 overrides 强制 a 为版本 1.2.4。最终,根项目中的 pnpmOverrides 会覆盖 .pnpmfile.cjs 和子项目的 overrides,最终所有依赖的 a 会被安装为 1.2.5,无论是根项目还是子项目。即使子项目 b 中指定了 1.2.4,也会被根项目中的 pnpmOverrides 强制改为 1.2.5,这是因为 pnpmOverrides 的优先级最高。