CI 上 tsc --noEmit 稳定 42 秒,加上 incremental true 之后第一次 45 秒,第二次还是 40 秒出头。tsbuildinfo 文件确实生成了。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,增量依赖上一次的构建信息判断哪些文件变了,但 CI 每次都是干净环境,缓存文件没被保留,等于每次都从头来。构建信息路径没固定时,换目录也会失效。

碰到「tsc 增量编译」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。改完顺手把文档补一句,省得下次自己重新推一遍。

npx tsc --noEmit --incremental --tsBuildInfoFile .cache/tsbuildinfo
time npx tsc -b --verbose
// CI 缓存 .cache 目录

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,确认 tsbuildinfo 的输出路径 并在 CI 里缓存这个文件;改用构建模式走项目引用 按包增量;把类型检查和打包拆开 并行跑;先量各阶段耗时 再决定拆哪一块。

最后用这个标准收尾,第二次构建降到十秒以内 日志里能看到构建信息命中 全量时间仍有记录兜底。

作者 9823189