Skip to content

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轻量,适合中小项目
TurborepoVercel 出品,构建缓存优秀,适合大型项目
Nx企业级,插件生态丰富

优缺点

优点: 代码共享方便,原子化提交(一个 PR 改前后端),统一工具链 缺点: 仓库体积大,CI 配置复杂(需要判断改了什么才跑什么),权限控制粗(不能只给某个人前端权限)

小结

Monorepo 不是必须的,但当你从「写一个 Demo」进化到「维护一个有前端、有后端、有共享逻辑的项目」时,它会自然成为你的选择。pnpm workspace 是最简单的入门方式。

下一步

  • Docker — Monorepo 中各子项目的部署方式