惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Vercel News
Vercel News
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
The Cloudflare Blog
N
Netflix TechBlog - Medium
GbyAI
GbyAI
Help Net Security
Help Net Security
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
Martin Fowler
Martin Fowler
量子位
P
Palo Alto Networks Blog
Security Latest
Security Latest
Attack and Defense Labs
Attack and Defense Labs
WordPress大学
WordPress大学
H
Help Net Security
C
Check Point Blog
T
Troy Hunt's Blog
C
CERT Recently Published Vulnerability Notes
Y
Y Combinator Blog
NISL@THU
NISL@THU
L
LINUX DO - 最新话题
V
Visual Studio Blog
C
Cisco Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Securelist
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Announcements
Recent Announcements
Forbes - Security
Forbes - Security
IT之家
IT之家
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
L
LangChain Blog
AWS News Blog
AWS News Blog
N
News and Events Feed by Topic
Stack Overflow Blog
Stack Overflow Blog
H
Hacker News: Front Page
B
Blog
W
WeLiveSecurity
罗磊的独立博客
Jina AI
Jina AI
博客园 - 【当耐特】

博客园 - 丁少华

Loop Engineering Vue 3 UI 组件库 Neon白嫖免费pgsql 域名利用cloudflare免费图床 nginx反代CloudflarePages提示502 vite使用shadcn vite使用biome Window下Nginx winserver2022安装不上软件 mac已损坏无法打开 代码高亮 命令运行器之task 命令运行器之just windows开启wsl 白嫖Redis 白嫖MongoDB vercel无服务函数 无服务器函数完全指南 在线 mock 方案 解释型语言和编译型语言 monorepo前端专属吗 Cursor锁区问题 CentOS9上Let’s Encrypt自动续签 Windows给文件夹别名 ai 常识 nestjs逆向工程Prisma与DTO nestjs的orm之Prisma
何时该使用monorepo
丁少华 · 2026-01-03 · via 博客园 - 丁少华

Monorepo 的本质是什么?

首先,让我们打破一个常见误区:Monorepo ≠ 多个项目仓库的简单合并
真正的 Monorepo 是一种架构哲学,它关注的是 代码组织方式 而非 项目数量。

  • 你可以只有一个项目,但仍然使用 Monorepo 来获得更好的模块化
  • 你可能有十个项目,但 Monorepo 可能并不适合
# 传统单体项目 vs Monorepo 思维
# ❌ 传统单体
project/
├── src/
│   ├── components/    # UI组件和业务逻辑混杂
│   ├── utils/         # 工具函数分散
│   └── api/           # API调用层

# ✅ Monorepo 思维(即使是单项目)
project/
├── apps/
│   └── main/          # 纯业务应用
├── packages/
│   ├── ui/            # 纯UI组件库
│   ├── utils/         # 工具函数库
│   ├── hooks/         # 自定义Hook库
│   └── configs/       # 配置文件

核心观点:Monorepo 的重点是 关注点分离 和 代码复用,而不是简单的仓库合并。

前后端是否应该整合到同一个 Monorepo?

这是最具争议的问题之一。让我们直接给出结论:绝大多数情况下,前后端不应该放在同一个 Monorepo 中。

技术栈差异巨大: 你前端react后端java,有什么整合的必要吗?
几乎没有真正的共享代码:开发环境、构建配置完全不同
开发流程和发布节奏不同:

前端发布流程:
  1. 代码变更 → 2. 构建静态资源 → 3. CDN部署 → 4. 立即生效

后端发布流程:
  1. 代码变更 → 2. 构建可执行文件 → 3. 测试环境验证 → 4. 灰度发布 → 5. 全量上线

团队组织分离:前端团队和后端团队技能不同,代码审查标准不同,关注点不同

哪怕即使后端是nodejs,也大概率没必要整合到一起!

什么情况下适合使用 Monorepo

单个复杂前端项目的模块化

# 场景:一个管理后台项目,想要更好的架构
admin-monorepo/
├── apps/
│   └── admin/                 # 主应用
├── packages/
│   ├── ui-kit/               # UI组件库
│   ├── utils/                # 工具函数
│   ├── hooks/                # 自定义Hook
│   ├── config-eslint/        # ESLint配置
│   ├── config-typescript/    # TS配置
│   └── config-tailwind/      # Tailwind配置
└── turbo.json               # Turborepo构建配置

同技术栈的多个相关项目

# 学校系统示例(正确用法)
school-monorepo/
├── apps/
│   ├── student-portal/      # 学生门户
│   ├── teacher-portal/      # 教师门户
│   ├── admin-portal/        # 管理后台
│   └── parent-portal/       # 家长端
├── packages/
│   ├── shared-ui/           # 共享组件
│   ├── shared-utils/        # 共享工具
│   ├── shared-types/        # 共享类型
│   └── shared-configs/      # 共享配置
└── package.json

微服务架构中的相关服务

# Node.js 微服务群
services-monorepo/
├── services/
│   ├── user-service/        # 用户服务
│   ├── order-service/       # 订单服务
│   ├── payment-service/     # 支付服务
│   └── notification-service/# 通知服务
├── packages/
│   ├── common-lib/          # 共享库
│   ├── database/            # 数据库客户端
│   ├── logging/             # 日志库
│   └── config/              # 配置管理
└── package.json