spinny:~/writing $ vim monorepo-vs-polyrepo.md
1~2Quando si lavora su progetti software di una certa complessità, la scelta tra monorepo e polyrepo può avere un impatto significativo sulla produttività del team e sulla scalabilità del codice. In questo articolo analizziamo le differenze, i pro e i contro di ciascun approccio, e ti aiutiamo a capire quale fa al caso tuo.3~4## Cosa sono Monorepo e Polyrepo?5~6### Monorepo7~8Un **monorepo** (monolithic repository) è un singolo repository che contiene il codice sorgente di più progetti, servizi o pacchetti, spesso correlati tra loro.9~10```plaintext filename="Esempio struttura Monorepo"11my-monorepo/12 packages/13 frontend/14 backend/15 shared/16 package.json17 turbo.json18```19~20### Polyrepo21~22Un **polyrepo** (multiple repositories) prevede che ogni progetto, servizio o pacchetto abbia il proprio repository separato.23~24```plaintext filename="Esempio struttura Polyrepo"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```33~34## Differenza visiva35~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## Pro e Contro57~58### Monorepo59~60**Vantaggi:**61- Facilita la condivisione di codice (es. librerie condivise).62- Refactoring atomico su più progetti.63- Gestione centralizzata delle dipendenze e delle configurazioni.64~65**Svantaggi:**66- Può diventare pesante con la crescita del codice.67- Richiede strumenti per gestire build/test parziali (es. Nx, Turborepo).68~69### Polyrepo70~71**Vantaggi:**72- Ogni team/progetto è indipendente.73- Più semplice da gestire per piccoli progetti.74- Permette policy di accesso granulari.75~76**Svantaggi:**77- Difficile condividere codice senza pubblicare pacchetti.78- Refactoring cross-repo più complesso.79- Possibile duplicazione di configurazioni.80~81## Esempio pratico: Monorepo con Turborepo82~83Supponiamo di voler creare un monorepo con frontend e backend usando Turborepo.84~85### 1. Inizializza il monorepo86~87```bash88npx create-turbo@latest89```90~91### 2. Struttura tipica92~93```plaintext94my-monorepo/95 apps/96 web/ # frontend Next.js97 api/ # backend Node.js/Express98 packages/99 ui/ # libreria di componenti condivisi100 utils/ # funzioni condivise101 turbo.json102 package.json103```104~105### 3. Esempio di workspace in `package.json`106~107```json108{109 "private": true,110 "workspaces": [111 "apps/*",112 "packages/*"113 ]114}115```116~117### 4. Esempio di importazione di una libreria condivisa118~119Supponiamo di avere una funzione in `packages/utils/src/formatDate.ts`:120~121```ts122// packages/utils/src/formatDate.ts123export function formatDate(date: Date): string {124 return date.toLocaleDateString('it-IT');125}126```127~128Nel frontend:129~130```ts131// apps/web/pages/index.tsx132import { formatDate } from '@myorg/utils';133~134export default function Home() {135 return <div>Oggi è {formatDate(new Date())}</div>;136}137```138~139## Quando scegliere Monorepo?140~141- Team medio-grandi che lavorano su più progetti correlati.142- Necessità di condividere codice e fare refactoring su larga scala.143- Progetti che crescono velocemente e richiedono build/test ottimizzati.144~145## Quando scegliere Polyrepo?146~147- Progetti piccoli o indipendenti.148- Team separati che lavorano su prodotti diversi.149- Policy di accesso molto restrittive.150~151## Conclusione152~153Non esiste una soluzione perfetta per tutti. La scelta dipende dalla dimensione del team, dalla complessità dei progetti e dalle esigenze di collaborazione. L’importante è essere consapevoli dei trade-off e scegliere gli strumenti giusti per gestire la complessità.154~
NORMAL · monorepo-vs-polyrepo.md [readonly]154 lines · :q to close