什么是 Monorepo?
基础概念
Monorepo(Monolithic Repository,单体仓库)是一种把多个项目放在同一个 Git 仓库里管理的代码组织方式。
与之相对的是 Polyrepo(多仓库),即每个项目各自建一个独立的 Git 仓库。
你的项目是 Monorepo 吗?
用以下标准判断:
- 根目录有
workspaces配置(package.json中workspaces字段,或pnpm-workspace.yaml) - 依赖统一管理 — 在根目录
npm install能装好所有子包的依赖 - 包之间可以互相引用 — 比如
web可以直接importserver里的共享代码
三个条件同时满足,才是真正的 Monorepo。如果只是把多个项目文件夹放在一起,那只是一个多项目文件夹,不是 Monorepo。
常用工具
最推荐的是 pnpm workspaces,速度快、磁盘占用少、依赖隔离严格,也是目前社区的主流选择。官方文档:https://pnpm.io/workspaces。
此外还有 npm workspaces、Yarn workspaces、Turborepo、Nx、Lerna 等,各有侧重,但核心思想一致。
优点
代码共享方便 — 不需要发 npm 包,直接 import 就能共享类型、工具函数、配置。
统一版本管理 — 所有子包版本号一起升,不会出现版本混乱。
重构更安全 — 改一个共享模块,所有引用它的项目立刻报错,不会遗漏。
缺点
仓库体积大 — 项目多了 git clone 会变慢,必要时用浅克隆(--depth=1)。
构建时间长 — 所有项目一起构建,没配好缓存会很慢。
权限控制困难 — 所有人能看见所有代码,无法按仓库粒度设权限。
