升级Angular/Nx 12至14后,Nx工作区生成Angular应用报错
解决Nx 14升级后生成Angular应用时的"Project does not exist"错误
排查方向及解决方法
1. 自定义组件生成器的API兼容性问题
从Nx 12到14,Schematics的项目上下文获取逻辑有明显变化。你的自定义组件生成器可能在应用生成流程中,过早尝试从工作区配置(angular.json/nx.json)中读取刚创建的项目——但此时新项目还未完成配置写入,导致找不到项目报错。
- 检查自定义生成器代码,替换旧的工作区查询方式:
原错误写法(依赖已写入的配置):
改为Nx 14兼容的方式,直接使用传入的参数或官方API获取项目配置:const workspace = await getWorkspace(host); const project = workspace.projects[options.project]; // 新项目未写入时返回undefinedimport { getProjectConfiguration } from '@nrwl/devkit'; // 通过Nx官方API获取项目配置,无需依赖已写入的文件 const projectConfig = await getProjectConfiguration(host, options.project);
2. 自定义生成器的触发时机错误
Nx 14调整了应用生成器的执行顺序,如果你的自定义组件生成器通过@nrwl/angular:application的hooks提前触发,会在新项目完全注册前执行,导致找不到项目。
- 先临时禁用自定义生成器,执行以下命令测试:
如果能成功生成应用,就确认是自定义生成器的触发时机问题。npx nx g @nrwl/angular:application name-of-app - 调整自定义生成器的注册逻辑,确保在应用生成器完成项目配置写入后再执行组件生成。
3. 工作区配置文件损坏或缓存异常
升级过程中可能导致angular.json/nx.json格式异常,或Nx缓存残留旧数据,影响新项目注册。
- 执行缓存清理:
npx nx reset - 备份当前的
angular.json和nx.json,对比全新Nx 14工作区的配置结构,修复现有文件中的异常(比如缺失的schema版本、项目模板配置项)。
4. Nx CLI版本不匹配
全局和本地Nx CLI版本不一致,会导致生成逻辑出现兼容性问题。
- 检查版本:
# 本地版本 npx nx --version # 全局版本 nx --version - 确保两者均为14.x版本,不一致则更新:
# 更新全局版本 npm install -g nx@14 # 更新本地版本 npm install nx@14 --save-dev
内容的提问来源于stack exchange,提问作者William Neely
相关产品推荐
相关产品推荐

