spinny:~/writing $ vim monorepo-vs-polyrepo.md
1~2هنگام کار بر روی پروژههای نرمافزاری پیچیده، انتخاب بین مونوریپو و پلیریپو میتواند تأثیر قابل توجهی بر بهرهوری تیم شما و مقیاسپذیری کد داشته باشد. در این مقاله، تفاوتها، مزایا و معایب هر رویکرد را تحلیل میکنیم و به شما کمک میکنیم بفهمید کدام برای شما مناسب است.3~4## مونوریپو و پلیریپو چیست؟5~6### مونوریپو7~8یک **مونوریپو** (مخزن مونولیتیک) یک مخزن واحد است که شامل کد منبع چندین پروژه، سرویس یا بسته است، که اغلب به هم مرتبط هستند.9~10```plaintext filename="Example Monorepo Structure"11my-monorepo/12 packages/13 frontend/14 backend/15 shared/16 package.json17 turbo.json18```19~20### پلیریپو21~22یک **پلیریپو** (چندین مخزن) به این معنی است که هر پروژه، سرویس یا بسته مخزن جداگانه خود را دارد.23~24```plaintext filename="Example Polyrepo Structure"25repos/26 frontend/27 package.json28 backend/29 package.json30 shared/31 package.json32```33~34## تفاوت بصری35~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## مزایا و معایب57~58### مونوریپو59~60**مزایا:**61- اشتراکگذاری کد را آسانتر میکند (مثلاً کتابخانههای مشترک).62- بازسازی اتمیک در چندین پروژه.63- مدیریت متمرکز وابستگیها و پیکربندیها.64~65**معایب:**66- با رشد کدبیس میتواند سنگین شود.67- نیاز به ابزارهایی برای مدیریت ساختها/تستهای جزئی (مثلاً Nx، Turborepo).68~69### پلیریپو70~71**مزایا:**72- هر تیم/پروژه مستقل است.73- مدیریت آسانتر برای پروژههای کوچک.74- امکان سیاستهای دسترسی دقیق.75~76**معایب:**77- اشتراکگذاری کد بدون انتشار بستهها دشوارتر است.78- بازسازی بین مخازن پیچیدهتر است.79- تکرار احتمالی پیکربندیها.80~81## مثال عملی: مونوریپو با Turborepo82~83فرض کنید میخواهید یک مونوریپو با فرانتاند و بکاند با استفاده از Turborepo ایجاد کنید.84~85### ۱. مقداردهی اولیه مونوریپو86~87```bash88npx create-turbo@latest89```90~91### ۲. ساختار معمولی92~93```plaintext94my-monorepo/95 apps/96 web/ # frontend Next.js97 api/ # backend Node.js/Express98 packages/99 ui/ # کتابخانه کامپوننت مشترک100 utils/ # توابع مشترک101 turbo.json102 package.json103```104~105### ۳. مثال workspace در `package.json`106~107```json108{109 "private": true,110 "workspaces": [111 "apps/*",112 "packages/*"113 ]114}115```116~117### ۴. مثال وارد کردن یک کتابخانه مشترک118~119فرض کنید یک تابع در `packages/utils/src/formatDate.ts` دارید:120~121```ts122// packages/utils/src/formatDate.ts123export function formatDate(date: Date): string {124 return date.toLocaleDateString('en-US');125}126```127~128در فرانتاند:129~130```ts131// apps/web/pages/index.tsx132import { formatDate } from '@myorg/utils';133~134export default function Home() {135 return <div>امروز {formatDate(new Date())} است</div>;136}137```138~139## چه زمانی مونوریپو را انتخاب کنیم؟140~141- تیمهای متوسط تا بزرگ که روی چندین پروژه مرتبط کار میکنند.142- نیاز به اشتراکگذاری کد و انجام بازسازی در مقیاس بزرگ.143- پروژههایی که به سرعت رشد میکنند و نیاز به ساختها/تستهای بهینه دارند.144~145## چه زمانی پلیریپو را انتخاب کنیم؟146~147- پروژههای کوچک یا مستقل.148- تیمهای جداگانه که روی محصولات مختلف کار میکنند.149- سیاستهای دسترسی بسیار محدودکننده.150~151## نتیجهگیری152~153راهحل کاملی برای همه وجود ندارد. انتخاب به اندازه تیم، پیچیدگی پروژه و نیازهای همکاری بستگی دارد. مهم این است که از مبادلات آگاه باشید و ابزارهای مناسب را برای مدیریت پیچیدگی انتخاب کنید.154~
NORMAL · monorepo-vs-polyrepo.md [readonly]154 lines · :q to close