DevLog
工程化Node.js

用 Turborepo 构建高效 Monorepo 工程体系

2025-07-30·11

为什么选择 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 工具链中最轻量、上手最快的选择。增量构建 + 远程缓存的组合能大幅提升团队开发效率。

返回文章列表