react、react-dom设为peerDependencies仍被安装且重复报错如何解决?
为什么设置peerDependencies后node_modules还存在react和react-dom
- 如果你是在开发自己的React库的本地环境执行install,首先检查你自己库的package.json的devDependencies字段:本地开发、调试、跑测试都需要React依赖,所以绝大多数情况下开发者都会把react、react-dom加入devDependencies,这部分依赖只会在你本地开发时安装,发布到npm后其他用户安装你的库时不会安装devDependencies里的内容,属于正常情况。
- npm v7及以上版本默认开启了peer依赖自动安装机制:如果你的本地项目没有满足peerDependencies要求的React版本,npm会自动下载一份符合版本要求的React安装到node_modules中,不属于bug。如果要关闭这个特性,可以在项目根目录新建
.npmrc文件,添加配置:
auto-install-peers=false
保存后重新执行npm install即可。
notistack React重复报错修复方法
报错的核心原因是项目中存在多份不同版本的React实例,你提供的notistack 1.0.10版本peerDependencies仅支持React 16.8.x和17.x版本,可按以下优先级排查修复:
- 先确认你当前项目的React版本:如果你的项目使用的是React 18及以上版本,不符合notistack 1.x的版本要求,npm会自动为notistack单独安装一份符合要求的16/17版本React,导致多实例冲突。可以选择将notistack升级到支持React 18的2.x及以上版本,或者将你的项目React版本降级到17.x版本。
- 如果你是通过npm link/yarn link的方式调试本地开发的React库,你的本地库的node_modules里已经装了一份React,和测试项目的React产生冲突,可以在你的本地库根目录执行命令绑定React路径:
npm link 【你的测试项目路径】/node_modules/react npm link 【你的测试项目路径】/node_modules/react-dom
- 你也可以通过强制统一全项目React版本解决冲突:
- 如果使用yarn/pnpm,直接在项目package.json中添加resolutions配置:
{ "resolutions": { "react": "^17.0.2", "react-dom": "^17.0.2" } }- 如果使用npm,需要先安装
npm-force-resolutions包,再添加上述resolutions配置后重装依赖即可。
内容的提问来源于stack exchange,提问作者Kid
相关产品推荐
相关产品推荐

