spinny:~/writing $ less monorepo-vs-polyrepo.md
12Apabila bekerja pada projek perisian yang kompleks, pilihan antara monorepo dan polyrepo boleh memberi kesan yang ketara terhadap produktiviti pasukan anda dan kebolehskalaan kod. Dalam artikel ini, kami menganalisis perbezaan, kebaikan dan keburukan setiap pendekatan, dan membantu anda memahami mana yang sesuai untuk anda.34## Apakah Monorepo dan Polyrepo?56### Monorepo78Sebuah **monorepo** (repositori monolitik) ialah satu repositori tunggal yang mengandungi kod sumber untuk pelbagai projek, perkhidmatan, atau pakej, yang sering berkaitan antara satu sama lain.910```plaintext filename="Example Monorepo Structure"11my-monorepo/12 packages/13 frontend/14 backend/15 shared/16 package.json17 turbo.json18```1920### Polyrepo2122Sebuah **polyrepo** (pelbagai repositori) bermaksud setiap projek, perkhidmatan, atau pakej mempunyai repositori tersendiri yang berasingan.2324```plaintext filename="Example Polyrepo Structure"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```3334## Perbezaan Visual3536```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## Kebaikan dan Keburukan5758### Monorepo5960**Kelebihan:**61- Memudahkan perkongsian kod (cth., pustaka kongsi).62- Pemfaktoran semula atomik merentasi pelbagai projek.63- Pengurusan berpusat bagi kebergantungan dan konfigurasi.6465**Kelemahan:**66- Boleh menjadi berat apabila pangkalan kod berkembang.67- Memerlukan alat untuk menguruskan binaan/ujian separa (cth., Nx, Turborepo).6869### Polyrepo7071**Kelebihan:**72- Setiap pasukan/projek adalah bebas.73- Lebih mudah untuk diuruskan bagi projek kecil.74- Membolehkan polisi akses yang terperinci.7576**Kelemahan:**77- Lebih sukar untuk berkongsi kod tanpa menerbitkan pakej.78- Pemfaktoran semula merentas repositori lebih kompleks.79- Kemungkinan pertindihan konfigurasi.8081## Contoh Praktikal: Monorepo dengan Turborepo8283Katakan anda ingin mencipta monorepo dengan frontend dan backend menggunakan Turborepo.8485### 1. Mulakan monorepo8687```bash88npx create-turbo@latest89```9091### 2. Struktur biasa9293```plaintext94my-monorepo/95 apps/96 web/ # frontend Next.js97 api/ # backend Node.js/Express98 packages/99 ui/ # pustaka komponen kongsi100 utils/ # fungsi kongsi101 turbo.json102 package.json103```104105### 3. Contoh workspace dalam `package.json`106107```json108{109 "private": true,110 "workspaces": [111 "apps/*",112 "packages/*"113 ]114}115```116117### 4. Contoh import pustaka kongsi118119Katakan anda mempunyai fungsi dalam `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```127128Dalam frontend:129130```ts131// apps/web/pages/index.tsx132import { formatDate } from '@myorg/utils';133134export default function Home() {135 return <div>Hari ini ialah {formatDate(new Date())}</div>;136}137```138139## Bila Memilih Monorepo?140141- Pasukan sederhana hingga besar yang bekerja pada pelbagai projek berkaitan.142- Perlu berkongsi kod dan melakukan pemfaktoran semula berskala besar.143- Projek yang berkembang pesat dan memerlukan binaan/ujian yang dioptimumkan.144145## Bila Memilih Polyrepo?146147- Projek kecil atau bebas.148- Pasukan berasingan yang bekerja pada produk berbeza.149- Polisi akses yang sangat ketat.150151## Kesimpulan152153Tiada penyelesaian sempurna untuk semua orang. Pilihan bergantung pada saiz pasukan, kerumitan projek, dan keperluan kerjasama. Yang penting ialah menyedari pertukaran dan memilih alat yang betul untuk menguruskan kerumitan.154
:Monorepo vs Polyrepo: Strategi Mana Yang Perlu Anda Pilih?lines 1-154 (END) — press q to close