spinny:~/writing $ vim monorepo-vs-polyrepo.md
1~2Вибір між monorepo та polyrepo може суттєво вплинути на продуктивність команди та масштабованість коду.3~4## Що таке Monorepo та Polyrepo?5~6### Monorepo7~8**Monorepo** - це єдиний репозиторій, що містить вихідний код кількох проєктів.9~10```plaintext filename="Example Monorepo Structure"11my-monorepo/12 packages/13 frontend/14 backend/15 shared/16 package.json17 turbo.json18```19~20### Polyrepo21~22**Polyrepo** означає, що кожен проєкт має свій окремий репозиторій.23~24```plaintext filename="Example Polyrepo Structure"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```33~34## Візуальна Різниця35~36```mermaid37flowchart TD38 subgraph Monorepo39 A1["frontend/"]40 A2["backend/"]41 A3["shared/"]42 end43 style Monorepo fill:#e0e7ff,stroke:#6366f1,stroke-width:2px44```45~46```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```55~56## Переваги та Недоліки57~58### Monorepo59~60**Переваги:**61- Спрощує спільне використання коду.62- Атомарний рефакторинг між проєктами.63- Централізоване управління залежностями.64~65**Недоліки:**66- Може стати важким з ростом кодової бази.67- Потребує інструментів для часткових збірок/тестів (наприклад, Nx, Turborepo).68~69### Polyrepo70~71**Переваги:**72- Кожна команда/проєкт незалежні.73- Простіше управляти для малих проєктів.74- Дозволяє гранулярні політики доступу.75~76**Недоліки:**77- Складніше ділитися кодом.78- Cross-repo рефакторинг складніший.79- Можливе дублювання конфігурацій.80~81## Практичний Приклад: Monorepo з Turborepo82~83```bash84npx create-turbo@latest85```86~87```plaintext88my-monorepo/89 apps/90 web/ # frontend Next.js91 api/ # backend Node.js/Express92 packages/93 ui/ # shared component library94 utils/ # shared functions95 turbo.json96 package.json97```98~99```json100{101 "private": true,102 "workspaces": [103 "apps/*",104 "packages/*"105 ]106}107```108~109```ts110// packages/utils/src/formatDate.ts111export function formatDate(date: Date): string {112 return date.toLocaleDateString('en-US');113}114```115~116```ts117// apps/web/pages/index.tsx118import { formatDate } from '@myorg/utils';119~120export default function Home() {121 return <div>Today is {formatDate(new Date())}</div>;122}123```124~125## Коли Обрати Monorepo?126~127- Середні та великі команди, що працюють над пов'язаними проєктами.128- Потреба в спільному використанні коду та масштабному рефакторингу.129~130## Коли Обрати Polyrepo?131~132- Малі або незалежні проєкти.133- Окремі команди, що працюють над різними продуктами.134- Дуже обмежувальні політики доступу.135~136## Висновок137~138Ідеального рішення для всіх не існує. Вибір залежить від розміру команди, складності проєкту та потреб у співпраці.139~
NORMAL · monorepo-vs-polyrepo.md [readonly]139 lines · :q to close