spinny:~/writing $ less monorepo-vs-polyrepo.md
12Nå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.34## Hvad er Monorepo og Polyrepo?56### Monorepo78Et **monorepo** (monolitisk repository) er et enkelt repository, der indeholder kildekoden til flere projekter, tjenester eller pakker, ofte relateret til hinanden.910```plaintext filename="Example Monorepo Structure"11my-monorepo/12 packages/13 frontend/14 backend/15 shared/16 package.json17 turbo.json18```1920### Polyrepo2122Et **polyrepo** (flere repositories) betyder, at hvert projekt, tjeneste eller pakke har sit eget separate repository.2324```plaintext filename="Example Polyrepo Structure"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```3334## Visuel forskel3536```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## Fordele og ulemper5758### Monorepo5960**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.6465**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).6869### Polyrepo7071**Fordele:**72- Hvert team/projekt er uafhængigt.73- Nemmere at håndtere for små projekter.74- Muliggør granulære adgangspolitikker.7576**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.8081## Praktisk eksempel: Monorepo med Turborepo8283Antag, at du vil oprette et monorepo med frontend og backend ved hjælp af Turborepo.8485### 1. Initialiser monorepoet8687```bash88npx create-turbo@latest89```9091### 2. Typisk struktur9293```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```104105### 3. Eksempel på workspace i `package.json`106107```json108{109 "private": true,110 "workspaces": [111 "apps/*",112 "packages/*"113 ]114}115```116117### 4. Eksempel på import af et delt bibliotek118119Antag, at du har en funktion i `packages/utils/src/formatDate.ts`:120121```ts122// packages/utils/src/formatDate.ts123export function formatDate(date: Date): string {124 return date.toLocaleDateString('en-US');125}126```127128I frontend:129130```ts131// apps/web/pages/index.tsx132import { formatDate } from '@myorg/utils';133134export default function Home() {135 return <div>I dag er det {formatDate(new Date())}</div>;136}137```138139## Hvornår skal man vælge Monorepo?140141- 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.144145## Hvornår skal man vælge Polyrepo?146147- Små eller uafhængige projekter.148- Separate teams, der arbejder på forskellige produkter.149- Meget restriktive adgangspolitikker.150151## Konklusion152153Der 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
:Monorepo vs Polyrepo: Hvilken strategi skal du vælge?lines 1-154 (END) — press q to close