返回项目目录
开发工具精选项目

Turborepo

面向 JavaScript 与 TypeScript Monorepo 的高性能构建系统,通过任务图、并行调度和缓存减少重复工作。

主要语言Rust
开源许可MIT
项目类型开发工具
维护状态活跃维护
OVERVIEW

项目概述

Turborepo 复用现有 package.json Scripts 和包管理器 Workspace,以 turbo.json 描述跨包任务依赖,并在本地、团队和 CI 之间缓存可复现的输出。

Turborepo 是 Vercel 维护的 MIT 开源 Monorepo 构建系统,核心 CLI 采用 Rust 实现。它不会取代 npm、pnpm、Yarn、Bun 等包管理器,也不会替代 Vite、Next.js、tsc 或测试框架;它读取 Workspace 与 Lockfile 形成 Package Graph,再根据 turbo.json 和各包现有 Scripts 构建 Task Graph,决定任务的依赖顺序、并行执行、输入哈希、输出缓存与日志重放。Turborepo 可渐进加入现有仓库,本地缓存无需账号;需要让开发者和 CI 共享结果时,再连接 Vercel Remote Cache 或实现兼容的 Remote Cache API。

当前 CLI2.10.7
实现语言Rust
核心模型Package Graph + Task Graph
FEATURES

主要特点

Turborepo 围绕任务依赖和内容哈希,只执行真正需要运行的工作,并复用已经验证过的结果。

01

Package Graph

根据包管理器 Workspace、各包 package.json 和 Lockfile 识别内部依赖,让任务调度理解应用与共享包之间的真实关系。

02

Task Graph

通过 dependsOn、`^build` 和同包任务关系表达执行顺序,自动并行运行互不依赖的工作。

03

内容寻址缓存

根据源码、依赖、Lockfile、环境变量、配置和命令生成 Hash,命中后恢复输出文件并重放日志,不重复执行任务。

04

本地与远程缓存

本地缓存开箱即用;Remote Cache 可让开发机和 CI 共享构建结果,也可通过兼容 API 连接其他缓存服务。

05

最大化并行调度

任务图会在满足依赖后尽快使用可用 CPU 核心,避免按包串行执行 Build、Lint 或 Test。

06

Filter 与 Affected

可按包名、目录、依赖关系和 Git 范围选择任务,只检查某个应用、它的依赖或本次变更真正影响的包。

07

环境变量哈希

env、globalEnv 与 Framework Inference 把构建相关变量纳入缓存 Key,Strict Mode 还会限制任务可读取的环境变量。

08

Persistent 与 Watch 任务

Dev Server 可标记为 Persistent 且禁用缓存,`turbo watch` 能在依赖包变化后重新运行相关任务。

09

Prune 部分仓库

`turbo prune` 为目标应用生成只含所需内部包、源码和裁剪 Lockfile 的局部 Monorepo,适合 Docker 分层构建。

10

包级任务配置

根 turbo.json 提供默认任务,包内 turbo.json 可扩展根配置,为特殊应用调整 Inputs、Outputs 或依赖关系。

11

任务检查与图数据

Dry Run、Summary 和 Query 能展示任务 Hash、Inputs、Outputs、依赖和受影响包,帮助解释缓存未命中。

12

Boundaries 与代码生成

实验性的 Boundaries 可检查跨包导入和未声明依赖,`turbo gen` 则能运行 Generator 创建包或统一修改仓库。

USE CASES

适用场景

当多个应用与共享包需要统一 Build、Lint、Test、Typecheck 和发布流水线时,Turborepo 能减少等待和脚本重复。

多个 Web 应用共享组件

将站点、管理后台、文档和设计系统放入一个 Workspace,共享 UI、配置和类型,同时独立构建与部署。

Next.js Monorepo

协调多个 Next.js 应用、内部包和生成任务,并正确缓存 `.next` 输出及其环境变量依赖。

Vite 与组件库仓库

多个 Vite 应用可复用 TypeScript、ESLint、Storybook 和组件包,由任务图先构建依赖再构建应用。

大型 CI 流水线

Remote Cache、Affected Filter 和并行任务可以减少 Pull Request 中重复的 Build、Lint、Test 与 Typecheck。

多包 SDK 与工具链

核心库、框架适配器、CLI 和示例可以共享测试与发布准备任务,并按依赖顺序构建。

渐进合并多个仓库

先保留每个项目现有 Scripts,再逐步抽取共享包、统一配置和缓存,不需要一次改写所有构建工具。

Docker 单应用部署

`turbo prune --docker` 生成目标应用需要的最小 Workspace 和 Lockfile,改善依赖安装层的缓存命中。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Turborepo 擅长的地方

  • 直接复用 package.json Scripts,接入现有仓库的改造范围较小
  • 根据 Package Graph 和 Task Graph 自动安排依赖顺序与并行度
  • 本地缓存无需账号即可减少重复 Build、Lint、Test 和 Typecheck
  • Remote Cache 可以跨开发者、CI 和部署环境共享确定性产物
  • Filter、Affected 和 Dry Run 便于大型仓库只执行必要任务
  • 环境变量哈希与 Strict Mode 降低错误缓存构建配置的风险
  • Prune 能为 Docker 与单应用部署生成更小的局部 Monorepo
  • 不绑定具体框架,可同时编排 Next.js、Vite、Node.js 与自定义工具

需要注意

采用前应考虑的问题

它不是包管理器

Workspace 发现、依赖安装、Lockfile 和版本解析仍由 npm、pnpm、Yarn 或 Bun 负责,仓库必须先有正确的包边界。

也不是应用构建器

Turborepo 只编排 Scripts;Vite、Next.js、tsc、Vitest 等工具仍需在每个包中正确配置并能独立运行。

缓存依赖任务确定性

相同 Inputs 若可能产生不同 Outputs,例如读取时间、网络或未声明配置,缓存就不可信,应关闭缓存或补齐输入。

Outputs 必须准确声明

遗漏 Outputs 会只缓存日志而不恢复产物,包含过多目录则会增加上传、下载和磁盘占用,需按工具实际输出配置。

环境变量容易造成错误命中

影响构建的变量必须进入 env 或 globalEnv;Loose Mode 虽方便,却可能把预览环境产物误用于生产。

Remote Cache 需要信任设计

共享缓存包含构建产物和日志,应控制 Token、团队权限、保留策略与服务可用性,并评估是否启用 Artifact Signature。

任务图过度约束会降低并行度

把所有 Lint、Test 都写成依赖上游同名任务可能造成不必要等待,应根据任务是否真的消费上游输出建图。

Dev 任务不能照搬 Build 缓存

长期运行的 Server 应设置 persistent: true 和 cache: false;多个 Persistent 任务之间的依赖也有专门限制。

Affected 依赖完整 Git 信息

浅克隆、错误的基准分支或 CI 中缺少历史会影响变更计算,流水线应显式配置 Fetch Depth 和比较范围。

Prune 不是通用部署打包器

它生成局部 Monorepo,而非最终可执行产物;还需要包管理器安装、框架 Build 和容器多阶段构建。

Boundaries 仍属实验性

跨包导入检查和 Tag 规则适合辅助治理,但在成为稳定能力前不应作为唯一架构保护措施。

本地与 CI 版本必须一致

应把 turbo 精确安装在仓库 Dev Dependencies,通过 package Scripts 调用,避免全局 CLI 与配置版本不匹配。

QUICK START

快速开始

下面从官方 Starter 或现有 Workspace 开始,配置任务图、缓存输出、环境变量、Filter、Remote Cache 和 Docker Prune。

1创建官方 Starter
bash
npx create-turbo@latest my-monorepo
cd my-monorepo
npm install
npm run dev
2在现有 Workspace 精确安装
bash
npm install --save-dev --save-exact turbo

# 确保根 package.json 已声明 Workspaces
npx turbo --version
3声明 Workspace 与根脚本
json
{
  "name": "acme-monorepo",
  "private": true,
  "workspaces": [
    "apps/*",
    "packages/*"
  ],
  "scripts": {
    "build": "turbo run build",
    "dev": "turbo run dev",
    "lint": "turbo run lint",
    "typecheck": "turbo run typecheck"
  },
  "devDependencies": {
    "turbo": "2.10.7"
  }
}
4配置任务图、缓存和环境变量
json
{
  "$schema": "https://turborepo.com/schema.json",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [
        "dist/**",
        ".next/**",
        "!.next/cache/**"
      ],
      "env": ["NEXT_PUBLIC_API_URL"]
    },
    "lint": {
      "dependsOn": ["^lint"]
    },
    "typecheck": {
      "dependsOn": ["^typecheck"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}
5选择包与受影响任务
bash
# 只构建 Web 应用及其依赖
npx turbo run build --filter=web...

# 只检查本次 Git 变更影响的包
npx turbo run lint test --affected

# 先查看任务图、Inputs 和 Hash,不真正执行
npx turbo run build --dry=json
6连接共享 Remote Cache
bash
# Vercel Remote Cache
npx turbo login
npx turbo link

# 之后开发机与 CI 可共享确定性任务结果
npx turbo run build
7为 Docker 裁剪目标应用
bash
npx turbo prune web --docker

# out/json 用于安装依赖层
# out/full 包含目标应用和所需内部包源码
8验证完整仓库流水线
bash
npm run lint
npm run typecheck
npm test
npm run build

下一步:先确保每个包的 Scripts 可独立运行,再让 Turborepo 负责编排。任何会改变任务结果的文件、环境变量或命令参数都必须进入哈希,否则缓存命中可能恢复错误产物。

ALTERNATIVES

类似项目

Next.js、Vite 与 TypeScript 是常见的 Monorepo 工作负载;Nx、Lage 和 moon 则代表功能范围与设计取向不同的任务编排方案。

COMPARISON

Turborepo vs Nx

Turborepo 与 Nx 都通过项目图、任务图和缓存加速 Monorepo。Turborepo 更贴近 package.json Scripts 和 npm Workspace 约定;Nx 提供更完整的 Plugin、Generator、迁移与架构治理平台。

比较维度TurborepoNx
核心定位轻量、高性能的 Monorepo 构建编排与缓存完整的 Monorepo 开发平台
任务来源主要复用各包 package.json Scripts可推断任务,也支持 Project 配置与 Plugin
项目图基于 Workspace、package.json 与 LockfileProject Graph 结合 Plugin 分析框架和配置
缓存本地与 Remote Cache,围绕任务 Hash 和 Outputs本地与 Nx Cloud,提供分布式执行等扩展能力
代码生成turbo gen 提供 Repository Generator成熟 Generator、Executor、Migration 与 Plugin API
架构约束Boundaries 能力仍处于实验阶段Tag、Module Boundary 和 Project 约束更成熟
框架集成框架无关,强调复用已有命令React、Angular、Node 等官方与社区 Plugin 丰富
配置与学习turbo.json 较小,渐进接入容易概念和能力更多,治理空间也更大
团队平台能力Remote Cache、Summary 与常见 CI 集成Nx Cloud 覆盖 Cache、分布式任务与 CI 编排
更适合已有 npm Workspace、希望快速获得任务缓存的前端团队需要生成器、迁移、架构治理和大型企业平台能力的团队
如何选择

如果仓库已经用 package.json Scripts 表达清晰任务,团队希望以较小改造获得并行执行、缓存和 Filter,Turborepo 通常更直接;如果需要统一生成项目、自动迁移框架版本、强制架构边界或管理超大型多团队仓库,Nx 的平台能力更完整。选型时应使用真实仓库比较冷启动、缓存命中、受影响任务和 CI 维护成本,而不只比较简单 Demo 的执行时间。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 29 日
核验版本turbo 2.10.7
内容维护Docs100 编辑整理
项目维护状态活跃维护

本页依据 Turborepo 官方 Introduction、Caching、Remote Caching、Task Configuration、Environment Variables、Run、Prune 与 Boundaries 文档,以及 npm Registry 和官方源码仓库整理。Boundaries 等实验能力可能变化,采用时应继续核对当前文档。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 29 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 29 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库