Monorepo 工具分类
Monorepo 生态的工具可以分为三大类别:
第一类:包管理工具(Workspace 管理)
这类工具解决多包共存和依赖管理的问题。
| 工具 | 特点 |
|---|---|
| pnpm workspaces | 硬链接节省磁盘空间,严格依赖隔离 |
| yarn workspaces | 历史悠久,社区成熟 |
| npm workspaces | Node.js 内置,无需额外安装 |
第二类:构建编排工具(任务管理)
这类工具解决多包之间的构建顺序、缓存和并行执行问题。
| 工具 | 特点 | 适用场景 |
|---|---|---|
| NX | 任务图分析、远程缓存、代码生成、功能最全面 | 大型 Monorepo 首选 |
| Lerna | 版本管理和发包专精,v7 后可集成 NX | 需要统一版本管理 |
| Turborepo | Vercel 出品,轻量级任务缓存,配置简单 | 中小型项目 |
| Rush | Microsoft 出品,企业级功能完善 | 大型企业项目 |
第三类:组件共享工具
| 工具 | 特点 |
|---|---|
| Bit | 组件级别的共享和复用,跨项目组合 |
| Storybook | 组件文档和可视化测试 |
NX vs Lerna vs Turborepo 对比
| 维度 | NX | Lerna | Turborepo |
|---|---|---|---|
| 核心能力 | 任务编排 + 代码生成 + 依赖图 | 版本管理 + 发包 | 任务编排 + 缓存 |
| 学习曲线 | 陡峭 | 平缓 | 平缓 |
| 远程缓存 | NX Cloud(免费额度) | 需搭配 NX | 自建或 Turborepo Cloud |
| 代码生成 | 丰富的 Generator 插件 | 无 | 无 |
| 依赖图分析 | 可视化依赖图 | 基础支持 | 无 |
| 适用规模 | 大型(100+ 包) | 中型(10-50 包) | 中型(10-50 包) |
| 语言支持 | JS/TS/Go/Rust/Python 等 | JS/TS | JS/TS |
选型建议
- 个人/小团队新项目:Turborepo + pnpm,配置简单上手快
- 中型项目需要发包:Lerna + NX,版本管理和发包流程完善
- 大型企业项目:NX 或 Rush,依赖图分析和远程缓存的收益最大
- 已有 Lerna 项目:升级到 Lerna v7 并启用
useNx,逐步迁移到 NX
pnpm workspace 配置
pnpm 是目前推荐的 Monorepo 包管理方案:
# pnpm-workspace.yaml
packages:
- 'packages/*'
- 'apps/*'
- 'docs'
yaml
# .npmrc
shamefully-hoist=true
strict-peer-dependencies=false
ini
核心优势:
- 硬链接机制:同一依赖只存储一份,节省磁盘空间
- 严格模式:防止幽灵依赖(phantom dependencies)
- 安装速度:比 npm 和 yarn 更快
↑