Turborepo 是面向 JavaScript/TypeScript monorepo 的构建系统,会缓存任务输出,并基于依赖图并行执行任务。本技能用于在配置任务管道、排查缓存问题、按变更筛选包、设置 CI 或开发监听时提供指导,触发场景包括 turbo.json、任务管道、dependsOn、缓存、远程缓存、turbo CLI、--filter、--affected 与 CI。
核心用法:不要在根 package.json 中编写任务逻辑,应把脚本放到各相关包的 package.json,并在根 turbo.json 的 tasks 中注册。根 package.json 只通过 turbo run <task> 委派,否则会破坏并行化。例如各包定义 build、lint、test 脚本,turbo.json 中设置 build.dependsOn 为 ["^build"]、outputs 为 ["dist/**"],test.dependsOn 为 ["build"]。写入代码或在 CI 中始终使用 turbo run;turbo <task> 简写仅用于人工或智能体在终端一次性输入。
常用能力与场景:用 --affected 仅运行变更包及其依赖者,可用 --affected-base=origin/develop 指定基线,或用 --filter=...[origin/main] 做手动比较;--filter 支持按包名、目录、依赖与反向依赖筛选。缓存方面,任务产出文件需声明 outputs,否则运行后不会恢复输出;环境变量需写入 env 才会参与哈希;.env 文件变化需加入 inputs 才会使缓存失效。监视模式可用 turbo watch,持久任务用 persistent: true,依赖变化时重启可用 interruptible: true,并可用 with 键表达依赖。CI 支持 GitHub Actions、Vercel 与远程缓存,并可用 turbo-ignore 跳过不必要的构建。架构边界可用 turbo boundaries 与标签规则检查。
限制与注意:turbo 不会加载 .env 文件,加载由框架负责;根目录 .env 被视为反模式;globalDependencies 影响全局哈希且任务无法用否定 glob 退出,应谨慎使用;不要用 --parallel 绕过依赖图;不要用 && 串联 turbo 任务,也不要用 prebuild 手动构建依赖,应声明 workspace 依赖并交由 dependsOn 处理;^build 只对已声明依赖的包生效。包级特殊配置应使用包内 turbo.json 并通过 extends: ["//"] 继承根配置,而非在根配置堆叠 package#task 覆盖。具体参考文件路径与未在资料中展开的细节暂未提供。