spinny:~/writing $ vim monorepo-vs-polyrepo.md
1~2Når man arbejder med komplekse softwareprojekter, kan valget mellem monorepo og polyrepo have stor indflydelse på dit teams produktivitet og kodens skalerbarhed. I denne artikel analyserer vi forskellene, fordele og ulemper ved hver tilgang og hjælper dig med at forstå, hvilken der er den rette for dig.3~4## Hvad er Monorepo og Polyrepo?5~6### Monorepo7~8Et **monorepo** (monolitisk repository) er et enkelt repository, der indeholder kildekoden til flere projekter, tjenester eller pakker, ofte relateret til hinanden.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~22Et **polyrepo** (flere repositories) betyder, at hvert projekt, tjeneste eller pakke har sit eget separate repository.23~24```plaintext filename="Example Polyrepo Structure"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```33~34## Visuel forskel35~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## Fordele og ulemper57~58### Monorepo59~60**Fordele:**61- Gør kodedeling nemmere (f.eks. delte biblioteker).62- Atomisk refaktorering på tværs af flere projekter.63- Centraliseret håndtering af afhængigheder og konfigurationer.64~65**Ulemper:**66- Kan blive tungt, når kodebasen vokser.67- Kræver værktøjer til at håndtere delvise builds/tests (f.eks. Nx, Turborepo).68~69### Polyrepo70~71**Fordele:**72- Hvert team/projekt er uafhængigt.73- Nemmere at håndtere for små projekter.74- Muliggør granulære adgangspolitikker.75~76**Ulemper:**77- Sværere at dele kode uden at publicere pakker.78- Refaktorering på tværs af repos er mere kompleks.79- Mulig duplikering af konfigurationer.80~81## Praktisk eksempel: Monorepo med Turborepo82~83Antag, at du vil oprette et monorepo med frontend og backend ved hjælp af Turborepo.84~85### 1. Initialiser monorepoet86~87```bash88npx create-turbo@latest89```90~91### 2. Typisk struktur92~93```plaintext94my-monorepo/95 apps/96 web/ # frontend Next.js97 api/ # backend Node.js/Express98 packages/99 ui/ # delt komponentbibliotek100 utils/ # delte funktioner101 turbo.json102 package.json103```104~105### 3. Eksempel på workspace i `package.json`106~107```json108{109 "private": true,110 "workspaces": [111 "apps/*",112 "packages/*"113 ]114}115```116~117### 4. Eksempel på import af et delt bibliotek118~119Antag, at du har en funktion i `packages/utils/src/formatDate.ts`:120~121```ts122// packages/utils/src/formatDate.ts123export function formatDate(date: Date): string {124 return date.toLocaleDateString('en-US');125}126```127~128I frontend:129~130```ts131// apps/web/pages/index.tsx132import { formatDate } from '@myorg/utils';133~134export default function Home() {135 return <div>I dag er det {formatDate(new Date())}</div>;136}137```138~139## Hvornår skal man vælge Monorepo?140~141- Mellemstore til store teams, der arbejder på flere relaterede projekter.142- Behov for at dele kode og udføre refaktorering i stor skala.143- Projekter, der vokser hurtigt og kræver optimerede builds/tests.144~145## Hvornår skal man vælge Polyrepo?146~147- Små eller uafhængige projekter.148- Separate teams, der arbejder på forskellige produkter.149- Meget restriktive adgangspolitikker.150~151## Konklusion152~153Der er ingen perfekt løsning for alle. Valget afhænger af teamstørrelse, projektets kompleksitet og samarbejdsbehov. Det vigtige er at være bevidst om afvejningerne og vælge de rette værktøjer til at håndtere kompleksiteten.154~
NORMAL · monorepo-vs-polyrepo.md [readonly]154 lines · :q to close