pnpm安装依赖遇React peer依赖不兼容,求更优解决方案
问题
使用pnpm安装包时遇到以下peer依赖错误:
ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies tinacms └─┬ @tinacms/toolkit ├─┬ @react-aria/listbox │ └── ✕ unmet peer react@"^16.8.0 || ^17.0.0-rc.1": found 18.2.0 └─┬ @udecode/plate-headless └─┬ @udecode/plate-alignment └─┬ @udecode/plate-core └─┬ @radix-ui/react-slot ├── ✕ unmet peer react@"^16.8 || ^17.0": found 18.2.0 └─┬ @radix-ui/react-compose-refs └── ✕ unmet peer react@"^16.8 || ^17.0": found 18.2.0
项目已使用React 18.2.0,无法重复安装该依赖。尝试过创建别名(因项目依赖均以react导入无法修改)、配置pnpm overrides(如下)但警告仍存在:
"pnpm": { "overrides": { "react": "18.2.0" } }
不想通过设置strict-peer-dependencies=false解决,求更优雅的办法?
解决方法
1. 精准覆盖子依赖的peer要求
针对报错的具体依赖,强制它们适配React 18版本,修改package.json中的pnpm overrides:
"pnpm": { "overrides": { "@react-aria/listbox>react": "18.2.0", "@radix-ui/react-slot>react": "18.2.0", "@radix-ui/react-compose-refs>react": "18.2.0" } }
也可以用批量配置的写法:
"pnpm": { "overrides": { "react": { "@react-aria/listbox": "18.2.0", "@radix-ui/react-slot": "18.2.0", "@radix-ui/react-compose-refs": "18.2.0" } } }
2. 用peerDependencyRules放宽特定检查
在package.json中配置peerDependencyRules,仅忽略指定依赖的React版本peer限制,保留全局严格模式:
"pnpm": { "peerDependencyRules": { "ignoreMissing": [ "react>@react-aria/listbox", "react>@radix-ui/react-slot", "react>@radix-ui/react-compose-refs" ] } }
或者允许这些依赖接受React 18版本:
"pnpm": { "peerDependencyRules": { "allowedVersions": { "@react-aria/listbox>react": "^18.2.0", "@radix-ui/react-slot>react": "^18.2.0", "@radix-ui/react-compose-refs>react": "^18.2.0" } } }
3. 升级依赖到兼容React 18的版本
检查并更新报错的子依赖,通常新版本会适配React 18:
pnpm update @react-aria/listbox @radix-ui/react-slot @radix-ui/react-compose-refs --latest
如果这些依赖是被@tinacms/toolkit间接引入的,尝试升级tinacms到最新版本,看其是否已依赖兼容React 18的子版本:
pnpm update tinacms --latest
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

