Вибір між monorepo та polyrepo може суттєво вплинути на продуктивність команди та масштабованість коду.
Що таке Monorepo та Polyrepo?
Monorepo
Monorepo - це єдиний репозиторій, що містить вихідний код кількох проєктів.
my-monorepo/ packages/ frontend/ backend/ shared/ package.json turbo.json
Polyrepo
Polyrepo означає, що кожен проєкт має свій окремий репозиторій.
repos/ frontend/ package.json backend/ package.json shared/ package.json
Візуальна Різниця
Переваги та Недоліки
Monorepo
Переваги:
- Спрощує спільне використання коду.
- Атомарний рефакторинг між проєктами.
- Централізоване управління залежностями.
Недоліки:
- Може стати важким з ростом кодової бази.
- Потребує інструментів для часткових збірок/тестів (наприклад, Nx, Turborepo).
Polyrepo
Переваги:
- Кожна команда/проєкт незалежні.
- Простіше управляти для малих проєктів.
- Дозволяє гранулярні політики доступу.
Недоліки:
- Складніше ділитися кодом.
- Cross-repo рефакторинг складніший.
- Можливе дублювання конфігурацій.
Практичний Приклад: Monorepo з Turborepo
npx create-turbo@latest
my-monorepo/ apps/ web/ # frontend Next.js api/ # backend Node.js/Express packages/ ui/ # shared component library utils/ # shared functions turbo.json package.json
{ "private": true, "workspaces": [ "apps/*", "packages/*" ] }
// packages/utils/src/formatDate.ts export function formatDate(date: Date): string { return date.toLocaleDateString('en-US'); }
// apps/web/pages/index.tsx import { formatDate } from '@myorg/utils'; export default function Home() { return <div>Today is {formatDate(new Date())}</div>; }
Коли Обрати Monorepo?
- Середні та великі команди, що працюють над пов'язаними проєктами.
- Потреба в спільному використанні коду та масштабному рефакторингу.
Коли Обрати Polyrepo?
- Малі або незалежні проєкти.
- Окремі команди, що працюють над різними продуктами.
- Дуже обмежувальні політики доступу.
Висновок
Ідеального рішення для всіх не існує. Вибір залежить від розміру команди, складності проєкту та потреб у співпраці.