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.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
的优先级最高。