如何使用pnpm覆盖特定工作区应用的peer依赖
解决pnpm+npm workspaces下单个子应用覆盖devDependency的问题
方案1:根目录pnpm.overrides结合filter指定单个应用
pnpm支持在根目录的pnpm.overrides中通过filter字段,仅对特定子应用生效版本覆盖,不会影响其他应用。
在根目录的package.json中添加如下配置:
{ "pnpm": { "overrides": { "要覆盖的依赖名": { "filter": "./packages/你的子应用目录", "version": "你想要的目标版本" } } } }
如果需要针对该依赖的特定旧版本进行覆盖,也可以这么写:
{ "pnpm": { "overrides": { "要覆盖的依赖名@原版本号": { "filter": "./packages/你的子应用目录", "version": "目标版本号" } } } }
配置完成后执行pnpm install,该覆盖规则只会作用于指定的子应用。
方案2:直接给子应用安装指定版本并锁定
如果该devDependency是子应用的直接依赖,可直接在子应用目录下执行:
pnpm add 依赖名@目标版本 --save-dev --filter ./packages/你的子应用目录
或者手动在子应用的package.json中指定该devDependency的版本,再执行pnpm install --filter ./packages/你的子应用目录。
这种方式适合直接依赖场景,如果是间接依赖的devDependency,还是需要用方案1的overrides+filter强制覆盖。
注意事项
- 子应用
package.json里的npm原生overrides字段不会被pnpm识别,所以之前尝试的方法无效是正常情况。 - 若项目需要同时兼容npm和pnpm,可以在根目录同时配置全局
overrides(供npm使用)和带filter的pnpm.overrides(供pnpm使用),npm侧则保留子应用单独的overrides配置即可。
内容的提问来源于stack exchange,提问作者Paalar
相关产品推荐
相关产品推荐

