Monorepo(单体仓库)
一句话
把多个项目(前端、后端、共享库)放在一个 Git 仓库里管,而不是每个项目一个仓库。
核心直觉
Polyrepo(多仓库): Monorepo(单体仓库):
├── my-resume-frontend/ (独立仓库) my-resume/
├── my-resume-backend/ (独立仓库) ├── apps/
├── my-resume-shared/ (独立仓库) │ ├── web/ (前端)
│ └── api/ (后端)
├── packages/
│ └── shared/ (共享类型和工具)
└── docs/ (文档)为什么前端转全栈会碰到它
你原来只写前端一个项目——一个 package.json 就够了。学了 NestJS 后,你有前端+后端两个项目,共享类型(接口定义)、共享工具函数(日期格式化)。如果不放一起,改一个接口两边都要手动同步。Monorepo 解决了这个问题:共享代码一处改、全局生效。
常用工具
| 工具 | 特点 |
|---|---|
| pnpm workspace | 轻量,适合中小项目 |
| Turborepo | Vercel 出品,构建缓存优秀,适合大型项目 |
| Nx | 企业级,插件生态丰富 |
优缺点
优点: 代码共享方便,原子化提交(一个 PR 改前后端),统一工具链 缺点: 仓库体积大,CI 配置复杂(需要判断改了什么才跑什么),权限控制粗(不能只给某个人前端权限)
小结
Monorepo 不是必须的,但当你从「写一个 Demo」进化到「维护一个有前端、有后端、有共享逻辑的项目」时,它会自然成为你的选择。pnpm workspace 是最简单的入门方式。
下一步
- Docker — Monorepo 中各子项目的部署方式