هنگام کار بر روی پروژههای نرمافزاری پیچیده، انتخاب بین مونوریپو و پلیریپو میتواند تأثیر قابل توجهی بر بهرهوری تیم شما و مقیاسپذیری کد داشته باشد. در این مقاله، تفاوتها، مزایا و معایب هر رویکرد را تحلیل میکنیم و به شما کمک میکنیم بفهمید کدام برای شما مناسب است.
مونوریپو و پلیریپو چیست؟
مونوریپو
یک مونوریپو (مخزن مونولیتیک) یک مخزن واحد است که شامل کد منبع چندین پروژه، سرویس یا بسته است، که اغلب به هم مرتبط هستند.
my-monorepo/ packages/ frontend/ backend/ shared/ package.json turbo.json
پلیریپو
یک پلیریپو (چندین مخزن) به این معنی است که هر پروژه، سرویس یا بسته مخزن جداگانه خود را دارد.
repos/ frontend/ package.json backend/ package.json shared/ package.json
تفاوت بصری
مزایا و معایب
مونوریپو
مزایا:
- اشتراکگذاری کد را آسانتر میکند (مثلاً کتابخانههای مشترک).
- بازسازی اتمیک در چندین پروژه.
- مدیریت متمرکز وابستگیها و پیکربندیها.
معایب:
- با رشد کدبیس میتواند سنگین شود.
- نیاز به ابزارهایی برای مدیریت ساختها/تستهای جزئی (مثلاً Nx، Turborepo).
پلیریپو
مزایا:
- هر تیم/پروژه مستقل است.
- مدیریت آسانتر برای پروژههای کوچک.
- امکان سیاستهای دسترسی دقیق.
معایب:
- اشتراکگذاری کد بدون انتشار بستهها دشوارتر است.
- بازسازی بین مخازن پیچیدهتر است.
- تکرار احتمالی پیکربندیها.
مثال عملی: مونوریپو با Turborepo
فرض کنید میخواهید یک مونوریپو با فرانتاند و بکاند با استفاده از Turborepo ایجاد کنید.
۱. مقداردهی اولیه مونوریپو
npx create-turbo@latest
۲. ساختار معمولی
my-monorepo/ apps/ web/ # frontend Next.js api/ # backend Node.js/Express packages/ ui/ # کتابخانه کامپوننت مشترک utils/ # توابع مشترک turbo.json package.json
۳. مثال workspace در package.json
{ "private": true, "workspaces": [ "apps/*", "packages/*" ] }
۴. مثال وارد کردن یک کتابخانه مشترک
فرض کنید یک تابع در packages/utils/src/formatDate.ts دارید:
// packages/utils/src/formatDate.ts export function formatDate(date: Date): string { return date.toLocaleDateString('en-US'); }
در فرانتاند:
// apps/web/pages/index.tsx import { formatDate } from '@myorg/utils'; export default function Home() { return <div>امروز {formatDate(new Date())} است</div>; }
چه زمانی مونوریپو را انتخاب کنیم؟
- تیمهای متوسط تا بزرگ که روی چندین پروژه مرتبط کار میکنند.
- نیاز به اشتراکگذاری کد و انجام بازسازی در مقیاس بزرگ.
- پروژههایی که به سرعت رشد میکنند و نیاز به ساختها/تستهای بهینه دارند.
چه زمانی پلیریپو را انتخاب کنیم؟
- پروژههای کوچک یا مستقل.
- تیمهای جداگانه که روی محصولات مختلف کار میکنند.
- سیاستهای دسترسی بسیار محدودکننده.
نتیجهگیری
راهحل کاملی برای همه وجود ندارد. انتخاب به اندازه تیم، پیچیدگی پروژه و نیازهای همکاری بستگی دارد. مهم این است که از مبادلات آگاه باشید و ابزارهای مناسب را برای مدیریت پیچیدگی انتخاب کنید.