如何在NX Monorepo中生成指定Angular版本的项目
你好!我完全理解你的困扰——想用最新版的NX搭建monorepo,但默认生成的项目会自动使用最新Angular版本,而你需要的是14.2.0这类指定版本,又不想退回到旧版的create-nx-workspace。其实最新版的NX确实支持指定Angular版本,下面给你两种可行的解决方案:
一、创建新NX Workspace时直接指定Angular版本
你之前看到的那个“版本选择flag”其实是--angular-version,这个参数可以直接在创建workspace时指定你需要的Angular版本,完全不需要依赖旧版的create-nx-workspace。举个例子,如果你要创建一个基于Angular 14.2.0的NX workspace,命令可以这么写:
npx create-nx-workspace@latest my-angular14-workspace --preset=angular --angular-version=14.2.0 --package-manager=npm
这个命令会使用最新版的NX工具链,同时为你生成使用Angular 14.2.0的项目,完美匹配你想要的需求。
二、在已有的NX Workspace中添加指定版本的Angular项目
如果你已经有一个现成的NX workspace,现在要新增一个指定Angular版本的项目,可以用nx generate命令并带上--angular-version参数:
nx generate @nrwl/angular:app my-new-app --angular-version=14.2.0
这样就能在现有workspace里生成符合版本要求的Angular项目了。
关于迁移时的版本问题
你提到迁移NX时会自动更新Angular版本,这确实是默认行为。如果想在迁移NX的同时保持Angular版本不变,你可以在执行迁移命令前,先在package.json里锁定@angular/core、@angular/cli等核心包的版本,然后执行迁移命令时加上--exclude=angular参数,避免NX自动升级Angular相关依赖:
nx migrate latest --exclude=angular
这样就能只升级NX本身的工具链,而保留你需要的Angular版本。
备注:内容来源于stack exchange,提问作者Rouvas

