升级Angular和Nx后Azure Pipeline中nx affected:test命令执行失败
问题解决:Nx affected:test在Azure Pipeline中报错Unknown worker message type
问题背景
Nx单体仓库包含3个Angular应用及关联库,采用mainline分支策略。升级Angular至16.14.0、Nx至15.8.5后,本地测试正常,但Azure Pipeline执行npx nx affected:test --base=remotes/origin/master时出现两个问题:
- 提示
No tests found, exiting with code 0 - 抛出
Error: Unknown worker message type message错误,栈信息指向Zone.js与Node.js worker的冲突
解决方案
1. 修复Git克隆深度,确保Nx能计算变更集
Azure Pipeline默认使用浅克隆(fetchDepth=1),导致Nx无法获取master分支的完整历史,无法识别受影响的文件。修改checkout任务拉取完整仓库:
- checkout: self fetchDepth: 0 # 拉取完整的git历史
或者在测试前手动拉取master分支:
git fetch origin master:master
2. 禁用Jest多线程,避免Zone.js与Node Worker冲突
错误栈显示Zone.js拦截了Node.js worker的消息,导致断言失败。通过以下方式禁用多线程:
- 命令行直接指定参数:
npx nx affected:test --base=remotes/origin/master --maxWorkers=1 - 全局修改jest配置(jest.config.ts或项目级配置文件):
export default { // 其他配置... maxWorkers: 1, };
3. 清理CI环境缓存,避免旧依赖干扰
旧的node_modules或Nx缓存可能导致版本冲突,在安装依赖前清理:
rm -rf node_modules .nx npm install
或使用Nx官方缓存清理命令:
npx nx reset
4. 使用本地Nx执行,避免全局版本冲突
全局安装的Nx可能与项目本地版本不一致,移除全局安装步骤,改用项目本地依赖执行:
# 移除全局安装Nx的步骤 - script: | npm install displayName: 'Install dependencies' - script: | npx nx affected:test --base=remotes/origin/master displayName: 'Run affected tests'
确保package.json中已声明nx@15.8.5依赖。
5. 升级Zone.js版本,解决兼容性问题
当前Zone.js版本与Node.js 16.x存在兼容性问题,升级至Angular 15推荐的版本:
npm install zone.js@~0.13.0
内容的提问来源于stack exchange,提问作者Ahmo
相关产品推荐
相关产品推荐

