🎓 سخنرانی کالج مونورپو 1: یک صبح زیبا

عکس توسط Josh Felise در Unsplash
سفری هیجان انگیز به سرزمین Monorepo را آغاز کنید، جایی که به اشتراک گذاری کد و همکاری تیمی دستور روز است! 🚄🌅
با سلام، دوستان علاقه مند به monorepo! شاید به یاد بیاورید آن توییت از چند وقت پیش، اما انتظار به پایان رسید. کالج مونورپو وارد شد، و زمان شیرجه رفتن است!
ماموریت مونورپو
پیکربندیهای Monorepo میتواند چالشبرانگیز باشد، اما هنگامی که آنها را حذف کردید، باید در پسزمینه محو شوند و به شما امکان میدهند روی آنچه واقعاً مهم است تمرکز کنید. همه ما آنجا بودهایم: یک monorepo بدون مشکل در حال اجراست، فقط برای یک تغییر کوچک که باعث خرابی شود و ما را به برزخ پیکربندی بازگرداند.
در واقع، monorepos باید گردش کار شما را از طریق کد مشترک ساده کند، بنابراین شما می توانید به جای مبارزه با تنظیمات شکسته، روی ارائه محصولات با کیفیت تمرکز کنید.
بر کسی پوشیده نیست که یافتن قراردادهای مونورپو سخت است و به نظر می رسد همه از منابع مختلف الهام می گیرند. بنابراین، چگونه میتوانیم مطمئن باشیم که راهاندازی کنونی ما بهطور مؤثری کاهش مییابد؟
معرفی کالج Monorepo، مجموعهای از پستهای وبلاگ و ویدیوهای YouTube که برای راهنمایی شما در ساخت یک کیت شروع مونورپو از ابتدا طراحی شدهاند. هدف اصلی این است که به شما یاد دهیم چگونه یک راه اندازی monorepo را طراحی کنید، اما اگر ترجیح می دهید از این فرآیند صرف نظر کنید، کیت شروع بعد از این سری در GitHub در دسترس خواهد بود.
در این قسمت اول، دنیای monorepos را معرفی میکنیم، محدوده این سری را مشخص میکنیم، و در مورد برخی از قراردادهایی که باید در طول راهاندازی در نظر گرفته شوند، بحث خواهیم کرد.
Monorepos: چی و چرا
مونورپو، مخفف «مخزن یکپارچه»، مخزن واحدی است که چندین پروژه، بسته یا پایگاه کد را در خود جای داده است. این تنظیمات شما را قادر می سازد تا تمام پروژه های خود را در یک مکان ذخیره کنید و به اشتراک گذاری کد بین آنها را تسهیل می کند.
برای کسب اطلاعات بیشتر در مورد مفهوم monorepo، ابزار Monorepo را بررسی کنید.
مارول مونورپو: مزایا
Monorepos نسبت به تنظیمات سنتی polyrepos (مخزن های چندگانه) مزایای متعددی دارد، از جمله:
- به اشتراک گذاری کد بدون زحمت: با monorepo، می توانید به راحتی اجزایی مانند یک مؤلفه UI را در چندین برنامه به اشتراک بگذارید.
- ابزارسازی ثابت: Monorepos شما را قادر می سازد تا تنظیمات ابزار را در سراسر بسته ها استاندارد کنید و در نتیجه یک مجموعه ابزار یکپارچه ایجاد کنید. به عنوان مثال، یک بسته پیکربندی ESLint می تواند توسط همه بسته های موجود در monorepo استفاده شود، و قوانین lint سازگار را تضمین می کند.
- مدیریت وابستگی ساده: Monorepos نمای واضح تری از وابستگی های بسته ارائه می دهد و با ابزارهایی مانند pnpm، می توانید وابستگی ها را در سراسر بسته ها با یک دستور به روز کنید. این به جلوگیری از پروژههای مختلف با استفاده از نسخههای مختلف وابستگی یکسان، مانند React کمک میکند.
اگرچه این فهرست به هیچ وجه جامع نیست، اما نشان میدهد که چگونه monorepos میتواند فرآیند توسعه را برای پایگاههای کد پیچیدهتر بهبود بخشد.
ماتریس Monorepo: چه زمانی کار می کند و چه زمانی که کار نمی کند
Monorepos می تواند برای برخی از پروژه ها مناسب باشد، اما برای برخی دیگر نه. بطور کلی:
- اگر کد شما بسیار پیچیده است و باید به اجزای کوچکتر و مستقل تقسیم شود، یک monorepo راه حلی است. برای یک وب سایت نمونه کار ساده، یک monorepo بیش از حد است.
- اگر تیم شما روی بخش های مشخصی از محصول کار می کند، یک مونورپو ضروری است.
- (احتمالاً کار جالبی است) اگر در حال ساختن یک استارت آپ یا پروژه با یک تیم موجود یا برنامه ریزی شده هستید، احتمالاً مونورپو بهترین گزینه برای شما خواهد بود.
- اگر در حال توسعه یک کتابخانه منبع باز با چندین بخش هستید، یک monorepo ضروری است. برای یک کتابخانه ابزار ساده، نیازی به آن نیست.
همانطور که می بینید، هرچه پایگاه کد پیچیده تر باشد، monorepo منطقی تر است.
ساخت شاهکار Monorepo ما
قبل از پرداختن به اهداف این مجموعه، اجازه دهید Acme، استارتاپ خیالی خود را معرفی کنیم. در طول این سری، ما یک monorepo برای Acme ایجاد خواهیم کرد، از ابتدا شروع کنیم.
تجسم ساختار Monorepo
در اینجا یک طرح بالقوه برای monorepo ما آمده است، که ممکن است با پیشرفت ما تغییر کند:
.
├── apps
│ ├── docs
│ └── web
└── packages
├── api
├── config
│ ├── eslint
│ ├── playwright
│ ├── storybook
│ ├── tailwind
│ ├── tsconfig
│ ├── tsup
│ └── vitest
├── database
├── features
├── storybook
└── ui
برنامه ها
را apps
پوشه تمام برنامه های Acme، مانند برنامه های موبایل و وب، سایت های بازاریابی و برنامه های کاربردی خاص محصول را در خود جای می دهد.
بسته ها/پیکربندی
قبل از بحث در مورد packages
پوشه، بیایید بررسی کنیم packages/config
فهرست راهنما. این پوشه شامل پیکربندیهایی برای ابزارهای مورد استفاده در بستههای دیگر در monorepo است، مانند تنظیمات پیشتنظیمات مشترک tsconfig، tailwind، tsup، vitest و موارد دیگر.
متمرکز کردن پیکربندی ابزار به سادهسازی تعمیر و نگهداری و عیبیابی کمک میکند.
بسته ها
را packages
دایرکتوری میزبان بسته های مختلف مورد استفاده توسط apps
. به عنوان مثال، الف ui
بسته شامل اجزای رابط کاربری مشترک مورد استفاده برنامه ها خواهد بود.
ما همچنین یک را ایجاد خواهیم کرد packages/api
برای tRPC API ما، که با دیتابیس ذخیره شده ما ارتباط برقرار می کند و داده ها را از آن واکشی می کند packages/database
.
منطق پشت تصمیمات
طرح ما انعطاف پذیری و مدولار بودن را در اولویت قرار می دهد. همه چیز در بسته های کوچک در سراسر monorepo از هم جدا شده است و همه آنها با هم جمع می شوند تا یک برنامه کاربردی کاملاً کاربردی را تشکیل دهند.
برای مثال، اگر میخواهیم tsup را جایگزین کنیم، فقط باید اصلاح کنیم packages/config/tsup
. شما می توانید نام مدولارتری مانند این را انتخاب کنید packages/config/bundler
، اما ما مطمئن هستیم که tsup در حال حاضر به ما کمک خواهد کرد.
اکثر بستهها (به استثنای پیکربندی) توسط بسیاری از برنامهها استفاده نمیشوند، و استفاده نباید تعیین کند که آیا کد به یک بسته تقسیم میشود یا خیر. در اصل، اگر یک منطقه محصول را بتوان در بسته بندی خود جدا کرد، احتمالاً باید. جداسازی مؤلفههای UI و API به ما امکان میدهد برنامهها را جایگزین کنیم و در عین حال دسترسی آسان به این مؤلفهها را حفظ کنیم. این رویکرد همچنین برای کار تیمی ایده آل است، زیرا افراد می توانند تنها بر روی بسته های اختصاص داده شده خود تمرکز کنند و تجربه توسعه خود را بهبود بخشند.
ابزار و فن آوری برای مقابله
در طول این مجموعه، ما فناوریهای مختلف را بررسی میکنیم و یاد میگیریم که چگونه آنها را در یک زمینه monorepo پیکربندی کنیم، از جمله:
- pnpm
- TypeScript
- کتاب داستان
- Next.js
- منشی
- پریسما
- Sup
- ESLint
- زیباتر
- تغییرات
- Tailwindcss
- دنده
- نمایشنامه نویس
- NX
- توربورپو
- اقدامات Github
تمرکز اصلی بر روی اصول پیکربندی کلی خواهد بود تا به شما کمک کند این تکنیک ها را بهتر درک کنید و در هر فناوری در monorepo خود به کار ببرید.
مشق شب
هر قسمت شامل تکالیف یا چالش های اختیاری برای تعمیق درک شما از monorepos خواهد بود.
برای این بخش، این کار ساده را امتحان کنید:
- ایجاد یک monorepo با
packages/is-odd
وpackages/is-even
. راpackages/is-even
باید معکوس ازpackages/is-odd
. این تمرین شما را با کد اشتراک گذاری بین بسته ها آشنا می کند.
احساس رایگان برای من ارسال آثار خود را از طریق DM توییتر، و من بازخورد ارائه خواهم کرد!
بسته بندی
درست کردن monorepos می تواند چالش برانگیز باشد، اما زمانی که به درستی تنظیم شود، باید روند توسعه شما را ساده کند. هدف کالج مونورپو ارائه بینشی در مورد ساختارها و پیکربندیهای مونورپو است و به شما کمک میکند مونورپوهای کارآمد و موثری ایجاد کنید که به جای اینکه مانع از پیشرفت شما شوند، پیشرفت شما را تقویت میکنند.
در قسمت بعدی به من بپیوندید، جایی که ما شروع به ساخت Acme خواهیم کرد. زنده باد Acme!
یه چیز دیگه
هر پست دارای یک عنوان نامرتبط است که از یک آهنگ الهام گرفته شده است. عنوان این قسمت برگرفته از «یک صبح زیبا» ساخته The Rascals است که در سال 1968 منتشر شد. گوش کنید!