Skip to content

Turborepo

1. 什么是 Turborepo?

Turborepo 是由 Vercel 推出的一个 高性能 JavaScript/TypeScript monorepo 构建系统

它的定位类似于 NX / Bazel,但更轻量、更贴合前端生态。 主要解决 monorepo(多包/多项目仓库) 下的构建、缓存和任务调度问题。

👉 通俗说: 在一个仓库里有多个应用和包,Turborepo 可以帮你高效管理它们的依赖、构建、测试和发布

2. Turborepo 有什么用?

🚀 性能优化

  • 增量构建:只重新构建改动过的包,而不是全量重建。
  • 智能缓存:构建结果会缓存,本地和 CI/CD 环境可以共享(比如用远程缓存)。
  • 任务并行化:最大化利用 CPU 核心,减少构建时间。

📦 Monorepo 管理

  • 可以在一个仓库中维护多个项目(比如 apps/ 下是应用,packages/ 下是共享组件或工具)。
  • 内置工作区(workspace)支持,自动管理依赖关系。

🛠 灵活的任务编排

  • 你可以定义 buildtestlint 等任务,Turborepo 会根据依赖关系和缓存情况决定执行策略。

🌍 和 Vercel 深度集成

  • 在 Vercel 平台上可以直接利用远程缓存,加速 CI/CD。

3. Turborepo 怎么用?

安装

全局安装(可选):

bash
npm install turbo --global

在项目中初始化:

bash
npx create-turbo@latest

这会生成一个 monorepo 结构,比如:

.
├── apps
│   ├── web     # 前端应用
│   └── docs    # 文档应用
└── packages
    ├── ui      # UI 组件库
    └── config  # 配置共享包

配置 turbo.json

核心配置文件,放在仓库根目录:

json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"]
    },
    "lint": {},
    "test": {
      "dependsOn": ["build"]
    }
  }
}

解释:

  • build 任务依赖于上游包的 build
  • 缓存 dist/**.next/** 输出目录。
  • test 依赖于 build

运行命令

在根目录执行:

bash
turbo run build

👉 Turborepo 会:

  • 找到所有定义了 build 脚本的项目。
  • 根据依赖关系决定执行顺序。
  • 如果缓存可用,直接跳过执行,秒完成。

同理:

bash
turbo run lint
turbo run test

远程缓存(可选)

如果团队协作或 CI/CD,需要共享缓存:

bash
npx turbo login
npx turbo link

这样不同开发者、CI 都可以复用缓存,进一步加速。

4. 总结

  • Turborepo = 高性能 monorepo 构建工具
  • 核心优势:缓存、增量构建、并行执行、依赖感知。
  • 适用场景
    • 大型 monorepo(多个应用 + 包)。
    • 需要快速构建和测试的团队。
    • 想用 Vercel 部署的项目。

好的 👍,我来帮你把 Turborepo、Lerna、Nx 三个常见 Monorepo 管理工具做一个对比表。

Turborepo vs Lerna vs Nx

特性 / 工具TurborepoLernaNx
定位高性能构建系统,专注缓存、并行和增量构建最早的 JS monorepo 工具,专注版本管理和发布企业级开发平台,集成构建、测试、代码生成等功能
核心优势⚡ 高速缓存(本地 & 远程)、并行任务执行📦 包版本管理(独立/统一模式)、发布到 npm🛠 丰富的插件生态、代码生成器、强大的依赖图分析
依赖管理基于 pnpm/yarn/npm workspaces基于 npm/yarn workspaces内置强依赖图(project graph)管理
构建/缓存机制✅ 智能缓存 & 增量构建❌ 无缓存机制✅ 强大缓存 & 增量构建(类似 Bazel)
任务编排pipeline 模式(turbo.json简单顺序执行高度可配置任务调度器(依赖感知)
语言支持主要是 JS/TS 生态主要是 JS/TS 生态多语言支持(JS/TS/Go/Rust/Python 等)
学习成本⭐⭐ 低(配置简洁,前端友好)⭐⭐ 低(老牌工具,功能单一)⭐⭐⭐ 高(功能多,配置复杂)
社区活跃度🚀 高(Vercel 维护,发展迅速)⚠️ 中等(已过巅峰,更多用于发布流程)🚀 高(企业应用广泛,社区和插件丰富)
适合场景前端/全栈项目,追求构建速度 & CI/CD 效率多包库发布(如 npm 包集合项目)大型企业级 monorepo,跨语言/跨团队复杂项目

对比总结

  • Turborepo:主打 ,缓存和增量构建体验非常好,适合前端/全栈团队。
  • Lerna:更像是 版本管理/发包工具,现在多和 pnpm/Yarn Workspaces 搭配,用于管理 npm 包版本和发布。
  • Nx:功能最全,适合大型团队,有可视化依赖图、代码生成、跨语言支持,但学习曲线较陡。