Nx 13迁移失败:update-tasks-runner步骤报错求助
Angular + Nx 迁移失败问题分析与解决方案
背景与问题重现
已将Angular应用从12版本升级至13.3.11版本,执行nx migrate 13.10.6成功生成migrations.json文件,但在执行迁移时,于「13-10-0-update-tasks-runner」步骤失败,收到Nx返回的错误:
Failed to run 13-10-0-update-tasks-runner from @nrwl/workspace. This workspace is NOT up to date!Cannot read property 'default' of undefined
堆栈跟踪:
TypeError: Cannot read property 'default' of undefined at updateTasksRunner (C:\Users\SD829695\Workspace\Payviewer UI\sdworx-workspace\node_modules@nrwl\workspace\src\migrations\update-13-10-0\update-tasks-runner.js:7:83) at C:\Users\SD829695\AppData\Local\Temp\tmp-22332-q4v32FBBq7aD\node_modules\nx\src\command-line\migrate.js:758:15 at Generator.next () at C:\Users\SD829695\AppData\Local\Temp\tmp-22332-q4v32FBBq7aD\node_modules\tslib\tslib.js:118:75 at new Promise () at Object.__awaiter (C:\Users\SD829695\AppData\Local\Temp\tmp-22332-q4v32FBBq7aD\node_modules\tslib\tslib.js:114:16) at runNxMigration (C:\Users\SD829695\AppData\Local\Temp\tmp-22332-q4v32FBBq7aD\node_modules\nx\src\command-line\migrate.js:737:20) at C:\Users\SD829695\AppData\Local\Temp\tmp-22332-q4v32FBBq7aD\node_modules\nx\src\command-line\migrate.js:631:43 at Generator.next () at fulfilled (C:\Users\SD829695\AppData\Local\Temp\tmp-22332-q4v32FBBq7aD\node_modules\tslib\tslib.js:115:62)
操作中的错误
- 跨小版本迁移跳过前置验证:直接从Angular 13.3.11对应的Nx版本跳转到13.10.6,未确保当前Workspace的Nx依赖先同步到与Angular版本兼容的最新13.x小版本,导致Workspace内部状态不一致,迁移脚本无法正常读取配置。
- 迁移前未保证Workspace干净:未清理依赖缓存或存在未提交的配置变更,导致迁移脚本执行时无法正确解析
nx.json中的tasksRunnerOptions配置,触发Cannot read property 'default' of undefined错误。
解决步骤
步骤1:回退到干净的Workspace状态
- 撤销
nx migrate对package.json的修改,删除自动生成的migrations.json文件 - 删除
node_modules目录和锁文件(package-lock.json或yarn.lock) - 重新执行
npm install或yarn install,确保依赖完整且无缓存问题
步骤2:先升级到与Angular兼容的Nx小版本
- 执行
nx migrate @nrwl/workspace@13.9.7(此版本为Angular 13.3.11兼容的最新13.x小版本,可根据实际情况调整) - 安装更新后的依赖:
npm install或yarn install - 执行
nx migrate --run-migrations完成小版本迁移,确认Workspace状态正常
步骤3:重新执行目标版本迁移
- 执行
nx migrate 13.10.6生成新的迁移配置 - 安装依赖:
npm install或yarn install - 执行
nx migrate --run-migrations完成全量迁移
步骤4:手动修复tasks-runner配置(可选)
如果上述步骤仍失败,手动检查并修复nx.json中的配置:
- 打开
nx.json,找到tasksRunnerOptions节点 - 确保
default字段存在且配置正确,示例配置如下:
"tasksRunnerOptions": { "default": { "runner": "@nrwl/workspace/tasks-runners/default", "options": { "cacheableOperations": ["build", "test", "lint"] } } }
- 保存配置后,重新执行
nx migrate --run-migrations
内容的提问来源于stack exchange,提问作者Matt Quinn
相关产品推荐
相关产品推荐

