标准答案

  1. 先维护 workspace 依赖图,知道应用和包之间的引用关系。
  2. 根据 git diff 判断哪些文件变化,再沿依赖图找出受影响项目。
  3. 缓存 key 要包含源码、lockfile、构建配置、环境变量和命令参数。
  4. CI 中可以把 lint、test、build 拆成可缓存任务。
  5. 缓存命中要可解释,不能为了快而跳过真正受影响的检查。

题目解析

Monorepo 规模变大后,如果任何改动都全量构建,CI 会越来越慢。增量构建的目标是把检查范围缩到受影响项目。

依赖图是基础。改了底层 shared 包,所有依赖它的应用都可能受影响;只改某个应用页面,则不应该触发无关应用构建。

缓存要谨慎。环境变量、lockfile、构建配置变化都可能改变产物,缓存 key 如果漏了这些输入,就会拿到错误结果。

常见误区

  • Monorepo 仍然每次全量构建,CI 时间不可控。
  • 只按文件路径判断影响范围,不看包之间依赖关系。
  • 缓存 key 过粗,依赖或配置变了仍复用旧产物。

作者信息