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.cjs
、overrides
和 pnpmOverrides
都可以用来指定或覆盖依赖的版本。他们的优先级为: pnpm.overrides > overrides > pnpmfile.cjs
。假如根项目的 .pnpmfile.cjs
配置指定了 a
的版本为 1.2.3
, 根项目的 pnpmOverrides
强制 a
为版本 1.2.5
, 子项目 b
的 package.json
配置 overrides
强制 a
为版本 1.2.4
。最终,根项目中的 pnpmOverrides
会覆盖 .pnpmfile.cjs
和子项目的 overrides
,最终所有依赖的 a
会被安装为 1.2.5
,无论是根项目还是子项目。即使子项目 b
中指定了 1.2.4
,也会被根项目中的 pnpmOverrides
强制改为 1.2.5
,这是因为 pnpmOverrides
的优先级最高。