为什么选择 Turborepo?
在使用 Lerna + Nx 的过程中,我们遇到了一些痛点:
- 构建时间随项目增长线性增加
- 远程缓存配置复杂
- 任务依赖关系难以维护
Turborepo 用一个简洁的 turbo.json 解决了这些问题。
快速上手
npx create-turbo@latest my-monorepo
目录结构:
my-monorepo/
├── apps/
│ ├── web/ # Next.js 应用
│ └── docs/ # 文档站
├── packages/
│ ├── ui/ # 共享组件库
│ ├── eslint-config/ # 共享 ESLint 配置
│ └── typescript-config/ # 共享 TS 配置
├── turbo.json
└── package.json
turbo.json 配置
{
"$schema": "https://turbo.build/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/", "!.next/cache/", "dist/**"]
},
"test": {
"dependsOn": ["^build"]
},
"lint": {},
"dev": {
"cache": false,
"persistent": true
}
}
}
远程缓存
# 连接 Vercel 远程缓存(免费)
npx turbo login
npx turbo link
# 或自建缓存服务器
TURBO_REMOTE_CACHE_SIGNATURE_KEY=your-key
TURBO_API=https://your-cache-server.com
实际收益
在我们的项目中(8 个 app + 12 个 package):
| 指标 | 优化前 | 优化后 |
|------|--------|--------|
| 全量构建 | 18 min | 4 min |
| 增量构建(1 包变更) | 18 min | 35 sec |
| CI 时间(有缓存) | 15 min | 1.5 min |
总结
Turborepo 是目前 Monorepo 工具链中最轻量、上手最快的选择。增量构建 + 远程缓存的组合能大幅提升团队开发效率。