如何将Nx-Angular项目升级至指定Angular主版本
定向升级到Angular 13及配套兼容依赖的操作方法
直接执行nx migrate latest会默认拉取最新大版本的Nx,对应绑定的就是最新正式版Angular,要停在Angular13版本线按下面步骤操作就行,全程不用手动凑依赖版本:
- 第一步:指定Nx目标版本为13.x系列的最终稳定版,执行迁移命令:
nx migrate 13.10.6。这个版本是Nx 13线的最后一个正式发布版,内置最高支持的Angular版本就是13.x的最终稳定版,配套的Jest、TypeScript、ESLint、Cypress等所有工具的版本都是官方全量验证过兼容的,不会自动升级到Angular14。 - 第二步:命令执行完成后,根目录会自动生成
migrations.json文件,同时自动更新package.json里的所有依赖版本。这时候可以快速核对下:@angular/*系列包应该是13.x最终版,@nrwl/jest、jest、jest-preset-angular等测试相关包也会匹配到兼容Angular13的最高版本,不会出现版本不匹配的问题。 - 第三步:执行
nx migrate --run-migrations,自动运行所有预置的迁移脚本,自动调整项目配置、修复版本升级带来的语法breaking change。执行完成后删除node_modules和锁文件重新安装依赖,跑一遍全量构建、测试验证功能正常即可。
注意:不要跨多个大版本跳级升级,比如直接从Angular12升到14很容易出现迁移脚本漏执行、依赖冲突的问题,升完一个大版本验证没问题再处理下一个版本最稳。也不要手动改package.json凑版本,Nx生态的插件和构建工具对版本匹配要求很高,手动改很容易踩各种奇奇怪怪的兼容坑。
Angular与Nx的版本对应规则
两个项目的版本对应逻辑非常清晰,从Nx 12版本开始就固定了规则:
- 大版本号完全对齐:Nx的大版本号和它原生支持的最高Angular大版本号一致。比如Nx 13.x全系列最高支持Angular 13,Nx 14.x全系列最高支持Angular14,后续版本也一直遵循这个规则。
- 同大版本线内不会跨Angular大版本升级:每个Nx大版本的后续小版本迭代,只会做bug修复、配套工具的兼容更新、同大版本范围内的Angular补丁适配,不会把内置支持的Angular升到下一个大版本。比如Nx13从第一个版本到最后一个13.10.6版本,都不会默认把Angular升到14。
- 向下兼容一个Angular大版本:每个Nx大版本通常会兼容前一个大版本的Angular,方便用户做渐进式升级。比如Nx13最初的版本可以正常跑Angular12的项目,等你把项目升级到Angular13也能正常运行,但永远不会支持高一个大版本的Angular,强行安装高版本Angular会出现依赖冲突、构建失败的问题。
- 所有生态配套工具的兼容版本都由Nx官方维护验证:包括Jest、Cypress、TypeScript、ESLint在内的所有配套依赖,只要通过
nx migrate命令升级,拉取的版本都是经过官方全量测试兼容的,不需要自己手动查版本兼容表。
内容的提问来源于stack exchange,提问作者yonexbat
相关产品推荐
相关产品推荐

