跳到主要内容

overrides

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

一、认识


package.json pnpm.overrides 通常配置在根项目的 package.json 文件中,允许你覆盖整个 Monorepo(或多仓库项目)的依赖版本。与 overrides 相比,pnpm.overrides 的作用范围更广,适用于整个项目,而不仅仅是当前子项目。

pnpmOverrides 是最高优先级的配置项,它会覆盖 overrides.pnpmfile.cjs 中的任何版本指定。

二、语法


{
"pnpm":{
"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 的优先级最高。