You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:00:15