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

如何在NX Monorepo中获取受影响项目的路径?

解决NX Monorepo中获取受影响项目路径用于GitHub Actions的方案

核心思路

直接利用NX的print-affected命令提取受影响项目的根路径(即项目在Monorepo中的实际目录),无需依赖标签或手动拼接路径,完全适配嵌套目录结构。

具体实现步骤

1. 用NX命令提取受影响项目的路径

使用nx print-affected结合自定义格式,直接输出所有受影响项目的路径列表:

nx print-affected --type=project --plain --format='{projects: [join(",", projects.nodes.*.data.root)]}'
  • --type=project:仅筛选项目(排除库等其他类型)
  • --plain:输出纯文本格式,避免额外的日志信息
  • --format:通过NX内置模板语法,提取每个项目的root字段(即项目实际目录路径),并以逗号分隔

执行后会得到类似输出:

apps/go/api-gateway,apps/node/user-service,libs/shared/utils

2. 在GitHub Actions中处理为矩阵变量

将命令结果转换成JSON数组,设置为GitHub Actions输出变量,供后续矩阵使用:

jobs:
  get-affected-projects:
    runs-on: ubuntu-latest
    outputs:
      project-paths: ${{ steps.extract-paths.outputs.paths }}
    steps:
      - uses: actions/checkout@v4
      - uses: nrwl/nx-set-shas@v4
      - name: Extract affected project paths
        id: extract-paths
        run: |
          PATHS=$(nx print-affected --type=project --plain --format='{projects: [join(",", projects.nodes.*.data.root)]}')
          # 转换为JSON数组格式
          JSON_PATHS=$(echo "[\"${PATHS//,/\",\"}\"]")
          echo "paths=$JSON_PATHS" >> $GITHUB_OUTPUT

  run-workflows:
    needs: get-affected-projects
    runs-on: ubuntu-latest
    strategy:
      matrix:
        project-path: ${{ fromJson(needs.get-affected-projects.outputs.project-paths) }}
    steps:
      - uses: actions/checkout@v4
      - name: Run workflow for ${{ matrix.project-path }}
        # 根据项目路径判断语言,复用对应工作流逻辑
        run: |
          if [[ ${{ matrix.project-path }} == apps/go/* ]]; then
            # 执行Go项目的构建/测试逻辑
            cd ${{ matrix.project-path }}
            go build ./...
            go test ./...
          elif [[ ${{ matrix.project-path }} == apps/node/* ]]; then
            # 执行Node.js项目的构建/测试逻辑
            cd ${{ matrix.project-path }}
            npm install
            npm run build
            npm run test
          fi

方案优势

  • 健壮性:直接读取NX项目元数据中的root字段,目录移动或项目重命名时,NX会自动维护该字段,无需手动同步标签或路径配置
  • 通用性:适配任意目录结构(无论是否嵌套),无需修改命令逻辑
  • 无缝复用工作流:将路径作为矩阵变量传递后,可根据路径前缀判断项目类型,复用现有语言专属的工作流逻辑

内容的提问来源于stack exchange,提问作者Raoul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:27:15