1. Nx Affected 与受影响的命令集在 PR 检查的工程价值
Nx 的 Affected 命令是什么?受影响的命令集在 PR 检查中有什么工程价值?
- Nx affected 的依赖图变更分析机制(changed files → 受影响项目)
- 基于 affected 的构建/测试/lint 增量执行
- PR 检查提速与"变更即验证"的工程价值
Nx 维护项目依赖图(project graph:包间依赖、文件与目标的映射),affected 命令基于"变更文件集"(git 基线对比,如 nx affected:test --base=main)计算受影响项目集:只对"自身或其依赖变更"的项目执行任务,其余项目跳过(命中缓存则直接复用结果)。机制上"变更影响"沿依赖图传播(依赖被改则依赖方也算受影响),配合任务图(task graph)计算需要重跑的最小任务集。
工程价值:一是"PR 检查提速"——提交只改一个包时,PR 的 build/test/lint 只跑受影响包及其依赖方,大 monorepo 的 CI 从"全仓数十分钟"降到"分钟级";二是"验证即变更"——确保 PR 覆盖"真实受影响的测试面"(依赖方测试也被触发,防止改库不验证使用方);三是"产物增量"——受影响包重建产物,未受影响产物复用缓存,配合远程缓存跨 CI 复用;四是"门禁精准"——affected 结果可作为"代码覆盖/质量门禁的作用域",减少无关告警。注意点:基线与 merge-base 选择影响影响面(错误基线导致漏检或全量)、动态依赖(运行时生成导入、glob 导入)可能让依赖图漏边,需配置显式依赖(implicitDependencies)补全;affected 是"加速器"而非"替代全量"——发布前仍建议全量校验(如 release 分支全量 CI)。
本题考察 monorepo 增量任务的核心机制:依赖图 + 变更传播 + 最小任务集。回答应说明机制、PR 提速价值与依赖图完备性风险。