پیچیدہ سافٹ ویئر پروجیکٹس پر کام کرتے وقت، monorepo اور polyrepo کے درمیان انتخاب آپ کی ٹیم کی پیداواریت اور کوڈ کی اسکیل ایبلٹی پر نمایاں اثر ڈال سکتا ہے۔ اس مضمون میں، ہم ہر نقطہ نظر کے فرق، فوائد اور نقصانات کا تجزیہ کرتے ہیں، اور آپ کو سمجھنے میں مدد کرتے ہیں کہ کون سا آپ کے لیے صحیح ہے۔
Monorepo اور Polyrepo کیا ہیں؟
Monorepo
ایک monorepo (مونولیتھک ریپوزٹری) ایک واحد ریپوزٹری ہے جو متعدد پروجیکٹس، سروسز یا پیکیجز کا سورس کوڈ رکھتی ہے، جو اکثر ایک دوسرے سے متعلق ہوتے ہیں۔
my-monorepo/ packages/ frontend/ backend/ shared/ package.json turbo.json
Polyrepo
ایک polyrepo (متعدد ریپوزٹریز) کا مطلب ہے کہ ہر پروجیکٹ، سروس یا پیکیج کی اپنی الگ ریپوزٹری ہے۔
repos/ frontend/ package.json backend/ package.json shared/ package.json
بصری فرق
فوائد اور نقصانات
Monorepo
فوائد:
- کوڈ شیئرنگ آسان بناتا ہے (مثلاً مشترکہ لائبریریز)۔
- متعدد پروجیکٹس میں ایٹامک ری فیکٹرنگ۔
- انحصار اور کنفیگریشنز کا مرکزی انتظام۔
نقصانات:
- کوڈبیس بڑھنے کے ساتھ بھاری ہو سکتا ہے۔
- جزوی بلڈز/ٹیسٹس کے انتظام کے لیے ٹولز کی ضرورت (مثلاً Nx, Turborepo)۔
Polyrepo
فوائد:
- ہر ٹیم/پروجیکٹ آزاد ہے۔
- چھوٹے پروجیکٹس کے لیے انتظام آسان۔
- دانے دار رسائی کی پالیسیوں کی اجازت دیتا ہے۔
نقصانات:
- پیکیجز شائع کیے بغیر کوڈ شیئر کرنا مشکل۔
- کراس-ریپو ری فیکٹرنگ زیادہ پیچیدہ۔
- کنفیگریشنز کی ممکنہ نقل۔
عملی مثال: Turborepo کے ساتھ Monorepo
فرض کریں آپ Turborepo استعمال کرتے ہوئے frontend اور backend کے ساتھ ایک monorepo بنانا چاہتے ہیں۔
1. Monorepo شروع کریں
npx create-turbo@latest
2. عام ساخت
my-monorepo/ apps/ web/ # frontend Next.js api/ # backend Node.js/Express packages/ ui/ # shared component library utils/ # shared functions turbo.json package.json
3. package.json میں workspace کی مثال
{ "private": true, "workspaces": [ "apps/*", "packages/*" ] }
4. مشترکہ لائبریری درآمد کرنے کی مثال
فرض کریں packages/utils/src/formatDate.ts میں آپ کا ایک فنکشن ہے:
// packages/utils/src/formatDate.ts export function formatDate(date: Date): string { return date.toLocaleDateString('en-US'); }
Frontend میں:
// apps/web/pages/index.tsx import { formatDate } from '@myorg/utils'; export default function Home() { return <div>Today is {formatDate(new Date())}</div>; }
Monorepo کب منتخب کریں؟
- درمیانی سے بڑی ٹیمیں جو متعدد متعلقہ پروجیکٹس پر کام کر رہی ہیں۔
- کوڈ شیئر کرنے اور بڑے پیمانے پر ری فیکٹرنگ کرنے کی ضرورت۔
- پروجیکٹس جو تیزی سے بڑھ رہے ہیں اور بہتر بلڈز/ٹیسٹس کی ضرورت ہے۔
Polyrepo کب منتخب کریں؟
- چھوٹے یا آزاد پروجیکٹس۔
- الگ ٹیمیں مختلف مصنوعات پر کام کر رہی ہیں۔
- بہت پابندی والی رسائی کی پالیسیاں۔
نتیجہ
سب کے لیے کوئی کامل حل نہیں ہے۔ انتخاب ٹیم کے سائز، پروجیکٹ کی پیچیدگی اور تعاون کی ضروریات پر منحصر ہے۔ اہم بات یہ ہے کہ سمجھوتوں سے آگاہ رہیں اور پیچیدگی کو سنبھالنے کے لیے صحیح ٹولز منتخب کریں۔