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

如何在Nx monorepo的nx affected:test命令中排除指定库目录

解决Nx Monorepo中assets文件夹变更触发不必要测试的问题

问题分析

你遇到的核心问题是:lib-b下的assets文件夹内容变更后,npx nx affected:test错误触发了所有项目的测试。这是因为Nx的affected检测逻辑会结合git追踪的文件变更和项目配置中的输入文件来判断哪些项目受影响。即使你配置了.nxignore,如果git仍在追踪assets文件,或者lib-b的测试目标把assets列为输入,Nx还是会标记lib-b为变更,进而触发所有依赖它的项目测试。

解决方案

1. 同步配置.gitignore和.nxignore

Nx的affected检测依赖git的变更记录,如果assets文件夹的文件仍被git追踪,Nx会识别到变更。因此需要同时在.gitignore和.nxignore中添加规则,确保git和Nx都忽略该文件夹的内容:
在两个文件中添加:

libs/lib-b/assets/**

注意:使用/**可以确保忽略文件夹下的所有子文件和子目录,避免遗漏。

2. 调整lib-b的project.json配置

即使忽略了git追踪,lib-b的测试目标如果默认包含了项目根目录下的所有文件作为输入,仍可能导致Nx误判。需要修改libs/lib-b/project.json,将assets文件夹排除在测试目标的输入范围外:
找到targets.test配置,修改inputs字段:

{
  "targets": {
    "test": {
      "inputs": [
        "default",
        "^default",
        "!{projectRoot}/assets/**"
      ],
      // 保留原有其他配置(如executor、options等)
    }
  }
}
  • default:包含项目默认的输入文件(源码、配置等)
  • ^default:包含依赖项目的默认输入
  • !{projectRoot}/assets/**:排除assets文件夹下的所有内容

3. 验证配置生效

执行以下命令查看当前变更是否会触发affected项目:

npx nx print-affected --base=HEAD~1 --head=HEAD

如果输出的affectedProjects为空数组,说明配置生效,此时再执行npx nx affected:test就不会触发任何测试了。

为什么忽略整个lib-b会生效?

当你在.nxignore中写libs/lib-b时,Nx会完全忽略整个lib-b的所有变更,自然不会将其标记为affected项目。但这是粗暴的方式,我们需要更精准地只忽略assets文件夹,上述方案就能实现这个需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:12:40