Nx从v11升级至v12.10.1迁移时出现Module not found错误
Nx v11升级v12.10.1报
Cannot find module @nrwl/tao/src/utils/app-root修复方案 问题根因
这个报错是Nx跨大版本升级时非常常见的路径兼容问题:Nx v12.10.1调整了@nrwl/tao包的内部文件结构,原本存放在src/utils下的app-root工具方法修改了存放路径,但自动生成的迁移脚本没有同步更新引用路径;加上升级流程中提前删除了旧node_modules和lock文件,旧版本的路径缓存被完全清理,运行迁移脚本时就会直接抛出MODULE_NOT_FOUND错误。
注意:Nx v12.x与Angular 12最高兼容Node 16 LTS版本,你当前使用的Node v18.3.0版本过高,就算修复了当前的模块缺失问题,后续也大概率会触发OpenSSL兼容报错、依赖编译失败等问题,建议先将Node版本切换到16.x LTS再执行升级操作,避免额外踩坑。
修复步骤
- 第一步:回退文件状态。找到第一次执行
npx nx migrate 12.10.1时自动生成的package.json.bak备份文件,用它覆盖当前被修改的package.json,同时删除根目录下自动生成的migrations.json临时文件。 - 第二步:恢复原始依赖环境。执行
npm install重新安装Nx v11、Angular 11版本的全量依赖,保证当前工作区的nx命令可以正常运行。 - 第三步:重新生成迁移配置。执行命令
npx nx migrate 12.10.1重新生成升级配置与版本依赖清单,这一步完成后不要立刻删除node_modules和lock文件。 - 第四步:提前安装匹配版本的tao依赖。执行命令
npm install @nrwl/tao@12.10.1 --save-dev,先把对应版本的包安装到本地,避免路径引用缺失。 - 第五步:手动修正迁移脚本的错误路径。打开根目录下新生成的
migrations.json,全局搜索所有@nrwl/tao/src/utils/app-root字符串,统一替换为v12.10.1版本的实际路径@nrwl/tao/src/utils/app-root-path。 - 第六步:重装依赖并执行迁移。先执行
rm -rf node_modules package-lock.json清理旧依赖文件,再执行npm install安装所有升级后的版本依赖,最后执行npx nx migrate --run-migrations即可正常跑完所有迁移流程。
迁移后验证
迁移执行完成后,先执行npx nx --version确认输出版本号为12.10.1,再执行npx nx serve启动原有Angular项目,确认项目可以正常编译启动即升级完成。
内容的提问来源于stack exchange,提问作者milan pandya
相关产品推荐
相关产品推荐

