spinny:~/writing $ less monorepo-vs-polyrepo.md
12پیچیدہ سافٹ ویئر پروجیکٹس پر کام کرتے وقت، monorepo اور polyrepo کے درمیان انتخاب آپ کی ٹیم کی پیداواریت اور کوڈ کی اسکیل ایبلٹی پر نمایاں اثر ڈال سکتا ہے۔ اس مضمون میں، ہم ہر نقطہ نظر کے فرق، فوائد اور نقصانات کا تجزیہ کرتے ہیں، اور آپ کو سمجھنے میں مدد کرتے ہیں کہ کون سا آپ کے لیے صحیح ہے۔34## Monorepo اور Polyrepo کیا ہیں؟56### Monorepo78ایک **monorepo** (مونولیتھک ریپوزٹری) ایک واحد ریپوزٹری ہے جو متعدد پروجیکٹس، سروسز یا پیکیجز کا سورس کوڈ رکھتی ہے، جو اکثر ایک دوسرے سے متعلق ہوتے ہیں۔910```plaintext filename="Example Monorepo Structure"11my-monorepo/12 packages/13 frontend/14 backend/15 shared/16 package.json17 turbo.json18```1920### Polyrepo2122ایک **polyrepo** (متعدد ریپوزٹریز) کا مطلب ہے کہ ہر پروجیکٹ، سروس یا پیکیج کی اپنی الگ ریپوزٹری ہے۔2324```plaintext filename="Example Polyrepo Structure"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```3334## بصری فرق3536```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## فوائد اور نقصانات5758### Monorepo5960**فوائد:**61- کوڈ شیئرنگ آسان بناتا ہے (مثلاً مشترکہ لائبریریز)۔62- متعدد پروجیکٹس میں ایٹامک ری فیکٹرنگ۔63- انحصار اور کنفیگریشنز کا مرکزی انتظام۔6465**نقصانات:**66- کوڈبیس بڑھنے کے ساتھ بھاری ہو سکتا ہے۔67- جزوی بلڈز/ٹیسٹس کے انتظام کے لیے ٹولز کی ضرورت (مثلاً Nx, Turborepo)۔6869### Polyrepo7071**فوائد:**72- ہر ٹیم/پروجیکٹ آزاد ہے۔73- چھوٹے پروجیکٹس کے لیے انتظام آسان۔74- دانے دار رسائی کی پالیسیوں کی اجازت دیتا ہے۔7576**نقصانات:**77- پیکیجز شائع کیے بغیر کوڈ شیئر کرنا مشکل۔78- کراس-ریپو ری فیکٹرنگ زیادہ پیچیدہ۔79- کنفیگریشنز کی ممکنہ نقل۔8081## عملی مثال: Turborepo کے ساتھ Monorepo8283فرض کریں آپ Turborepo استعمال کرتے ہوئے frontend اور backend کے ساتھ ایک monorepo بنانا چاہتے ہیں۔8485### 1. Monorepo شروع کریں8687```bash88npx create-turbo@latest89```9091### 2. عام ساخت9293```plaintext94my-monorepo/95 apps/96 web/ # frontend Next.js97 api/ # backend Node.js/Express98 packages/99 ui/ # shared component library100 utils/ # shared functions101 turbo.json102 package.json103```104105### 3. `package.json` میں workspace کی مثال106107```json108{109 "private": true,110 "workspaces": [111 "apps/*",112 "packages/*"113 ]114}115```116117### 4. مشترکہ لائبریری درآمد کرنے کی مثال118119فرض کریں `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```127128Frontend میں:129130```ts131// apps/web/pages/index.tsx132import { formatDate } from '@myorg/utils';133134export default function Home() {135 return <div>Today is {formatDate(new Date())}</div>;136}137```138139## Monorepo کب منتخب کریں؟140141- درمیانی سے بڑی ٹیمیں جو متعدد متعلقہ پروجیکٹس پر کام کر رہی ہیں۔142- کوڈ شیئر کرنے اور بڑے پیمانے پر ری فیکٹرنگ کرنے کی ضرورت۔143- پروجیکٹس جو تیزی سے بڑھ رہے ہیں اور بہتر بلڈز/ٹیسٹس کی ضرورت ہے۔144145## Polyrepo کب منتخب کریں؟146147- چھوٹے یا آزاد پروجیکٹس۔148- الگ ٹیمیں مختلف مصنوعات پر کام کر رہی ہیں۔149- بہت پابندی والی رسائی کی پالیسیاں۔150151## نتیجہ152153سب کے لیے کوئی کامل حل نہیں ہے۔ انتخاب ٹیم کے سائز، پروجیکٹ کی پیچیدگی اور تعاون کی ضروریات پر منحصر ہے۔ اہم بات یہ ہے کہ سمجھوتوں سے آگاہ رہیں اور پیچیدگی کو سنبھالنے کے لیے صحیح ٹولز منتخب کریں۔154
:Monorepo بمقابلہ Polyrepo: آپ کو کون سی حکمت عملی منتخب کرنی چاہیے؟lines 1-154 (END) — press q to close