CI 上连续两次构建同一提交,日志都打 cache miss,本地 turbo run build 却第二次就 FULL TURBO,单次构建稳定 4 分 20 秒。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,缓存键由任务输入文件和环境变量哈希算出来,构建脚本把当天日期写进产物或读了一个每次都变的环境变量,哈希就每次都不同。CI 上工作目录和本地不一致,绝对路径进哈希也会导致永远不命中。

「turbo 缓存未命中」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。改完顺手把文档补一句,省得下次自己重新推一遍。

npx turbo run build --dry=json
npx turbo run build --summarize
ls .turbo/cache | wc -l

监控和日志的时间要对上,时区不一致会多绕很大一圈。

具体做法是,看 turbo run build --dry=json 里 hash 和 inputs 列出哪些文件;把生成时间的写入挪到构建之后 不要进缓存目录;环境变量用 globalHashInputs 明确列出 不要整份 env 参与;确认 CI 缓存目录挂载到 .turbo/cache 而不是每次清空。

最后用这个标准收尾,第二次构建日志出现 FULL TURBO 耗时降到十几秒 .turbo/cache 里条目数在增加。

作者 9823189