تصمیم میان نگهداری همهٔ پروژهها در یک مخزن یا تقسیم آنها به مخزنهای جدا، فراتر از یک سلیقهٔ فنی است؛ روی همکاری تیم و سرعت تحویل اثر میگذارد. در چندریپو هر سرویس مخزن مستقل خود را دارد و در مونوریپو همهٔ کدها زیر یک سقفاند. ما هر دو را تجربه کردیم و در نهایت برای بیشتر پروژهها به مونوریپو رسیدیم.
بزرگترین درد چندریپو، مدیریت کد مشترک بود. وقتی یک کامپوننت UI یا یک نوع داده میان چند پروژه استفاده میشد، هر تغییر یعنی انتشار یک نسخهٔ تازه از پکیج و سپس بهروزرسانی همهٔ مصرفکنندهها. این چرخه کند و خطاپذیر بود و اغلب پروژهها روی نسخههای ناهماهنگ گیر میکردند.
در مونوریپو، یک تغییر در کد مشترک بلافاصله و بهصورت اتمیک در همهٔ مصرفکنندهها دیده میشود و یک کامیت میتواند هم کتابخانه و هم استفادهکنندگانش را با هم بهروز کند. این یعنی بازآرایی در سطح کل کدبیس بسیار سادهتر میشود و دیگر نسخههای جا مانده وجود ندارد.
مونوریپو بدون ابزار مناسب میتواند کند شود. ما از ابزارهایی مثل pnpm workspaces برای مدیریت وابستگیها و Turborepo برای بیلد و تست هوشمند استفاده میکنیم تا فقط بخشهای تغییرکرده دوباره پردازش شوند. با کشگذاری وظایف، خط لولهٔ CI حتی در یک مخزن بزرگ هم سریع میماند و مزیت مونوریپو بدون هزینهٔ کندی به دست میآید.