Monorepo Manager — Monorepo 管理
Goal
Trigger
见 description 中的触发时机
见 ## Workflow
设计和管理 Monorepo 项目,实现代码共享和高效构建。
Workflow
- 评估需求 — 是否真的需要 Monorepo
- 选择工具 — pnpm workspace / Turborepo / Nx / Lerna
- 设计结构 — packages/ 目录划分、共享代码
- 配置构建 — 依赖拓扑、增量构建、缓存
- 配置 CI — 只构建变更的包
方案对比
| 工具 | 特点 | 适用场景 |
|---|---|---|
| pnpm workspace | 原生支持、速度快 | Node.js 项目 |
| Turborepo | 构建编排、远程缓存 | 大型前端项目 |
| Nx | 依赖图、增量构建 | 全栈项目 |
| Lerna | 版本管理、发布 | npm 包发布 |
pnpm workspace 配置
# pnpm-workspace.yaml
## Goal
## Trigger
见 description 中的触发时机
见 ## Workflow
packages:
- 'packages/*'
- 'apps/*'
// package.json
{
"name": "my-monorepo",
"private": true,
"scripts": {
"build": "turbo run build",
"test": "turbo run test",
"lint": "turbo run lint"
}
}
目录结构
my-monorepo/
├── apps/
│ ├── web/ # 前端应用
│ ├── api/ # 后端服务
│ └── admin/ # 管理后台
├── packages/
│ ├── ui/ # 共享 UI 组件
│ ├── utils/ # 共享工具函数
│ ├── config/ # 共享配置 (eslint, tsconfig)
│ └── types/ # 共享类型定义
├── pnpm-workspace.yaml
├── turbo.json
└── package.json
Turborepo 配置
// turbo.json
{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"test": {
"dependsOn": ["build"]
},
"lint": {}
}
}
Example
用户: 将 3 个独立项目合并为 Monorepo
输出:
1. 创建 monorepo 结构: apps/ + packages/
2. 配置 pnpm workspace
3. 提取共享代码到 packages/shared
4. 配置 Turborepo 构建编排
5. CI: 只构建 pnpm --filter ...[origin/master] 变更的包
参考
- Turborepo: references/turborepo.md
- pnpm workspace: references/pnpm-workspace.md