只把 apps/web 的 react 升到 18.2,pnpm install 报 ERR_PNPM_PEER_DEP_ISSUES,三个组件包 peer 还写着 ^17,CI 直接失败。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,workspace 里 react 只有一份实例才安全,任何一个包声明了不兼容的 peer 范围,解析器就会拒绝或者装出第二份。组件库的 peer 范围通常写得窄,主应用升级会连带全部消费方。
「单包升级影响全仓」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
pnpm why react -r pnpm install --strict-peer-dependencies pnpm list react -r --depth 0
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,先统一所有包的 peerDependencies 到 ^17 || ^18;根目录用 overrides 固定单一 react 版本;用 pnpm why react 确认没有第二份实例;升级后跑一遍组件库的视觉回归。
最后用这个标准收尾,pnpm why react 全仓只有一个 18.2.0 安装不再报 peer 冲突。
