ReactJS报错TypeError: l.replaceRule is not a function 无代码改动突然失效
问题根因
你遇到的是依赖版本漂移和Sentry相关依赖版本不兼容共同导致的故障,具体原因如下:
- 你删除了
package-lock.json后重新执行npm install,会拉取所有符合package.json中语义化版本规则的最新间接依赖,部分依赖的新版本和你项目中旧版本核心依赖不兼容 - 你项目中
@sentry/react版本为5.30.0,@sentry/tracing版本为6.0.4,两个Sentry依赖主版本不一致,缺少跨版本兼容的公共依赖,触发了instrument.ts中的console方法调用异常 - 你当前使用的Node v16.11.1、npm 8.0.0版本,和项目中旧版本的
react-scripts@3.4.3存在兼容性问题,react-scripts 3.x最佳适配版本为Node 10~14区间,高版本Node会导致依赖编译时出现隐性异常
修复方案
- 优先恢复可正常运行的依赖版本锁:如果你有前一天可正常运行的
package-lock.json备份,直接替换当前文件后执行npm ci安装依赖即可恢复 - 统一Sentry依赖版本:将
@sentry/react和@sentry/tracing的版本统一升级到同个主版本,避免跨版本冲突 - 切换Node版本:使用nvm切换到Node 14.x版本进行项目编译,适配旧版本react-scripts的依赖要求
- 固定间接依赖版本:如果不想大改依赖,可在package.json中添加overrides配置(npm 8+支持),固定出现异常的Sentry相关间接依赖版本
内容的提问来源于stack exchange,提问作者Mitesh
相关产品推荐
相关产品推荐

