先说结论:Monorepo 不是新工具,而是一种"仓库管理策略"。很多人卡在工具(Turborepo / Nx)上,其实核心是"如何组织代码与依赖"。
🧠 一、Monorepo 是什么?
Monorepo(Monolithic Repository)= 一个仓库存多个项目
对比一下你就明白:
❌ 多仓库(传统)
project-a (repo)
project-b (repo)
ui-library (repo)
utils (repo)
问题:
-
依赖版本容易乱
-
改一个组件,要发包、升级、再同步
-
跨项目协作成本高
✅ Monorepo(现在主流)
repo/
apps/
web
admin
packages/
ui
utils
👉 所有项目在一个仓库里统一管理
🚀 二、为什么大厂都在用?
核心就三点:
1️⃣ 代码复用更简单
组件库直接引用:
import { Button } from '@repo/ui'
不用发 npm 包 ❗
2️⃣ 依赖统一
所有项目共享:
-
React版本
-
工具库
👉 不会出现"版本地狱"
3️⃣ 原子化改动
改一个组件:
👉 所有项目同步生效
🔥 三、Monorepo 核心能力(重点)
很多人学偏了,其实核心就这几个:
1. Workspace(基础能力)
常用:
-
pnpm workspace(推荐)
-
yarn workspace
👉 作用:
-
管理多包依赖
-
本地包互相引用
2. 构建调度(核心难点)
工具:
-
Turborepo
-
Nx
👉 解决问题:
-
哪些包需要重新构建?
-
构建顺序?
👉 举例:
ui 改了 → web 需要重新 build
utils 没变 → 不需要动
3. 缓存机制(性能关键)
👉 核心思想:
没改的代码不重新构建
Turborepo:
-
本地缓存
-
远程缓存(团队共享)
4. 依赖关系管理
👉 自动分析:
web → ui → utils
工具帮你:
-
确定构建顺序
-
避免循环依赖
🛠 四、如何学习 Monorepo(给你一条正确路径)
很多人直接上 Nx,然后就懵了。正确路线是👇
✅ 第一步:理解"最小Monorepo"
只用:
👉 pnpm workspace
实战结构:
repo/
package.json
pnpm-workspace.yaml
apps/
web/
packages/
ui/
utils/
学会:
-
本地包引用
-
依赖提升(hoist)
👉 这一步最关键!
✅ 第二步:引入构建工具
选一个:
👉 推荐:
- Turborepo(更轻量)
学什么:
-
pipeline(构建流程)
-
cache(缓存)
-
task 依赖
✅ 第三步:做一个真实项目(重点)
建议你做这个结构👇
apps/
web (React)
admin (React)
packages/
ui (组件库)
hooks
utils
👉 要求:
-
UI组件被多个项目复用
-
hooks共享
-
utils共享
✅ 第四步:接入工程化
加上:
-
ESLint
-
TypeScript
-
CI/CD(GitHub Actions)
👉 这一步才是"高级工程化"
✅ 第五步(进阶)
👉 再考虑:
-
Nx(企业级)
-
微前端结合 Monorepo
⚠️ 五、常见误区(你一定要避开)
❌ 误区1:把 Monorepo 当工具
👉 它是"架构思想",不是 Turborepo
❌ 误区2:项目太小就上 Monorepo
👉 1-2个项目完全没必要
❌ 误区3:不做边界设计
👉 packages 乱依赖会炸
💡 六、什么时候该用 Monorepo?
适合:
-
多业务线(多个前端项目)
-
有组件库 / 工具库
-
团队协作开发
不适合:
-
单项目
-
小团队试验项目
🔥 七、结合你背景的建议(重点)
你现在是:
👉 React + 有工程经验 + 做过平台
建议你这样提升👇
路线:
-
pnpm workspace(必须)
-
Turborepo(核心)
-
搭一个组件库(重点)
-
做 CI/CD
💬 一句话总结
Monorepo 本质不是"多个项目放一起",而是
用一套统一工程体系管理多个项目