React项目启动报缺失webpack、版本不兼容错误求解决
问题根因定位
两次报错的本质可以归纳为两点:
- 首次启动报
Cannot find module 'webpack',是首次执行npm i时因网络波动、缓存损坏等原因,没有把依赖树完整拉取下来,属于依赖安装不完整的问题。基于react-scripts构建的CRA类项目,本身会自动管理适配版本的webpack构建依赖,正常场景下不需要手动额外安装顶层webpack - 手动执行
npm install webpack --save-dev时,npm默认拉取了最新的webpack@5.11.1,和项目整套老版本工具链完全不兼容:从安装过程的警告就能看到,项目里的webpack-dev-server、html-webpack-plugin、所有配套loader、插件全部要求webpack@^4.0.0版本。webpack5重构了内部hook的调用API,老版本插件找不到对应回调方法,就触发了TypeError: Cannot read property 'tapAsync' of undefined的编译错误。
可落地的解决步骤
按顺序执行操作即可,不需要调整项目本身的业务代码:
- 清理现有冲突的依赖残留
- 打开项目根目录,手动删除两个内容:
node_modules文件夹、package-lock.json锁文件(如果存在的话)
- 打开项目根目录,手动删除两个内容:
- 安装匹配项目工具链的webpack4版本,替换之前误装的webpack5
- 执行命令:
npm install webpack@4.46.0 --save-dev - 选择该版本的原因:它是webpack4系列的最终稳定版,完全满足项目所有peer依赖要求的版本区间
- 执行命令:
- 补全安装日志里提示缺失的peer依赖,消除潜在的运行隐患
- 对应安装时的警告提示,逐个执行安装命令:
- 安装@date-io/core:
npm install @date-io/core@1.3.13 --save,适配@material-ui/pickers的版本要求 - 安装jquery:
npm install jquery@3.5.1 --save,适配bootstrap4.5的peer依赖要求 - 安装typescript:
npm install typescript@4.9.5 --save-dev,适配tsutils的版本要求
- 安装@date-io/core:
- 对应安装时的警告提示,逐个执行安装命令:
- 重新完整拉取所有项目依赖
- 执行命令:
npm install - 如果安装过程仍然出现peer依赖冲突的报错,追加参数执行:
npm install --legacy-peer-deps,兼容老版本npm不自动安装peer依赖的问题
- 执行命令:
- 启动项目验证
- 执行启动命令:
npm run start
- 执行启动命令:
后续避坑提示
- 不要随意手动安装最新版顶层webpack,避免和react-scripts内置的构建工具版本冲突
- 首次安装依赖时如果出现缺包类报错,可以先清空npm缓存(执行
npm cache clean --force)再重新安装,大概率可以解决安装不完整的问题 - 安装过程中如果出现
SKIPPING OPTIONAL DEPENDENCY: fsevents的警告,属于Windows系统下的正常提示,因为fsevents是macOS专属的文件监听组件,Windows环境会自动跳过安装,不需要额外处理
内容的提问来源于stack exchange,提问作者vram
相关产品推荐
相关产品推荐

