安装react-scripts出现依赖冲突无法执行npm start/run build问题求助
解决方案
立即修复(可快速正常运行npm start、npm run build)
你遇到的报错核心是npm v7+默认开启严格的 peer 依赖校验,项目使用React 17,而dev依赖中的enzyme-adapter-react-16仅兼容React 16,导致所有依赖操作被拦截。操作步骤如下:
- 删除项目根目录下的
node_modules文件夹和package-lock.json文件 - 执行安装命令:
npm install --legacy-peer-deps
--legacy-peer-deps会让npm忽略peer依赖版本冲突,按照package.json声明的版本直接安装。安装完成后即可正常执行npm start和npm run build,这两个业务命令不会用到enzyme相关的测试依赖,完全不影响功能运行。
可选:兼容enzyme单元测试
如果你后续需要使用enzyme做单元测试,可按以下步骤调整:
- 手动修改package.json的
devDependencies配置,将"enzyme-adapter-react-16": "^1.15.6"替换为"@wojtekmaj/enzyme-adapter-react-17": "^0.8.0" - 修改测试适配文件(一般为
src/setupTests.js),将enzyme适配器的导入替换为React17对应的版本即可。
替代方案(不需要加额外安装参数)
如果你不想使用--legacy-peer-deps参数,也可以选择降级React版本适配现有依赖:
- 将package.json中
react和react-dom的版本从^17.0.2修改为^16.14.0 - 删除
node_modules和package-lock.json后直接执行npm install即可
依赖冲突通用排查思路
- 定位冲突根源:npm报错会明确标注冲突的依赖对应关系,格式一般为「当前项目安装了X版本的A包,但是B包要求A包的版本范围为Y」,先找到A、B两个冲突包
- 优先适配版本:要么升级/降级其中一个包到互相兼容的版本,要么查找对应版本的替代包
- 临时绕开校验:如果冲突的是测试、lint等非业务核心依赖,可以用
--legacy-peer-deps参数跳过校验,不影响业务功能运行 - 清理缓存重试:修改配置后仍报错的话,删除
node_modules和lock文件重新安装,排除旧缓存干扰
内容的提问来源于stack exchange,提问作者Roly Poly
相关产品推荐
相关产品推荐

