spinny:~/writing $ less monorepo-vs-polyrepo.md
12在开发复杂的软件项目时,选择 Monorepo 还是 Polyrepo 会对团队的生产力和代码的可扩展性产生重大影响。本文将分析两者的区别、优缺点,并帮助你判断哪种方式更适合你的需求。34## 什么是 Monorepo 和 Polyrepo?56### Monorepo78**Monorepo**(单体仓库)是指将多个项目、服务或包的源代码集中在一个仓库中,通常这些项目彼此相关。910```plaintext filename="Monorepo 结构示例"11my-monorepo/12 packages/13 frontend/14 backend/15 shared/16 package.json17 turbo.json18```1920### Polyrepo2122**Polyrepo**(多仓库)则是每个项目、服务或包都有自己独立的仓库。2324```plaintext filename="Polyrepo 结构示例"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```3334## 视觉差异3536```mermaid37flowchart TD38 subgraph Monorepo39 A1["frontend/"]40 A2["backend/"]41 A3["shared/"]42 end43 style Monorepo fill:#e0e7ff,stroke:#6366f1,stroke-width:2px44```4546```mermaid47flowchart TD48 subgraph Polyrepo49 B1["frontend repo"]50 B2["backend repo"]51 B3["shared repo"]52 end53 style Polyrepo fill:#fee2e2,stroke:#ef4444,stroke-width:2px54```5556## 优缺点对比5758### Monorepo5960**优点:**61- 便于代码共享(如共享库)。62- 可对多个项目进行原子化重构。63- 依赖和配置集中管理。6465**缺点:**66- 随着代码量增长,仓库可能变得臃肿。67- 需要工具来管理部分构建/测试(如 Nx、Turborepo)。6869### Polyrepo7071**优点:**72- 每个团队/项目独立。73- 小型项目更易管理。74- 可实现更细粒度的访问策略。7576**缺点:**77- 代码共享困难,需发布包。78- 跨仓库重构更复杂。79- 配置可能重复。8081## 实践案例:使用 Turborepo 的 Monorepo8283假设你想用 Turborepo 创建一个包含前端和后端的 Monorepo。8485### 1. 初始化 Monorepo8687```bash88npx create-turbo@latest89```9091### 2. 典型结构9293```plaintext94my-monorepo/95 apps/96 web/ # 前端 Next.js97 api/ # 后端 Node.js/Express98 packages/99 ui/ # 共享组件库100 utils/ # 共享函数101 turbo.json102 package.json103```104105### 3. `package.json` 中的 workspace 示例106107```json108{109 "private": true,110 "workspaces": [111 "apps/*",112 "packages/*"113 ]114}115```116117### 4. 共享库的导入示例118119假设你在 `packages/utils/src/formatDate.ts` 中有一个函数:120121```ts122// packages/utils/src/formatDate.ts123export function formatDate(date: Date): string {124 return date.toLocaleDateString('zh-CN');125}126```127128在前端:129130```ts131// apps/web/pages/index.tsx132import { formatDate } from '@myorg/utils';133134export default function Home() {135 return <div>今天是 {formatDate(new Date())}</div>;136}137```138139## 何时选择 Monorepo?140141- 中大型团队,需协作多个相关项目。142- 需要共享代码并进行大规模重构。143- 项目增长快,需要优化构建/测试。144145## 何时选择 Polyrepo?146147- 小型或独立项目。148- 不同团队分别开发不同产品。149- 访问权限要求极高。150151## 结论152153没有适合所有人的完美方案。选择取决于团队规模、项目复杂度和协作需求。关键是了解权衡,并选择合适的工具来管理复杂性。
:单体仓库 vs 多仓库:该如何选择?lines 1-153 (END) — press q to close