Ledger Live Monorepo Project: Part 2 - The Tools (Make it Shine) | دفتر کل

Ledger Live Monorepo Project: Part 2 – The Tools (Make it Shine) | دفتر کل

گره منبع: 2985172

دومین ورودی از سری پست‌های وبلاگ «پروژه Ledger Live Monorepo»، جایی که یک توسعه‌دهنده Ledger داستان مهاجرت عظیم پایگاه کد Ledger Live به یک مخزن مونو را به ما می‌گوید. اگر قسمت 1 را از دست دادید، اینجا را ببینید:

پس از اینکه مشخص شد معماری مونورپو یک راه حل قابل اجرا است، ما شروع به جستجوی ابزارهای موجود برای اجرای طرح خود کردیم.

انجام پروژه های متعدد

در تیم Ledger Live ما در اکوسیستم جاوا اسکریپت حرکت می کنیم و خوشبختانه برای ما، ما قبلاً چندین راه برای مدیریت پروژه های متعدد با مدیر بسته خود می دانستیم. برخی از آن راه حل های ممکن عبارتند از:

  • NPM (پشتیبانی از فضاهای کاری اما جایگزین های بهتر دارد)،
  • نخ 1 (زیاد پیر شدن، جایگزین های بهتر و کارآمدتر)،
  • نخ ≥ 2 (ایده جالبی است، اما plug n play در همه جا به خوبی پشتیبانی نمی شود، به خصوص با React Native)،
  • PNPM (symlinks، ساخته شده با فضای کاری در ذهن، دیسک کارآمد).

بعد از بررسی همه اینها، تصمیم گرفتیم با هم همراه شویم PNPM برای:

  • کارایی دیسک (از مجازی استفاده می کند opbevare و خطوط همایش، بنابراین بسته ها فقط یک بار دانلود می شوند و سپس از فروشگاه مجازی به node_modules شما پیوند داده می شوند.)
  • سرعت (از آنجایی که بسته‌ها کش هستند، نصب‌های بعدی بسیار سریع‌تر هستند)،
  • ساخته شده در پشتیبانی از فضاهای کاری/معماری مونورپو (نام مستعار، ارکستراسیون و ...).

بر روی کاغذ PNPM یک جواهر مطلق است، اما سیملینک ها کمی عجیب بودند که به درستی تنظیم شوند (باز هم، به خصوص با React Native).

خوب، پس انتخاب ما انجام شد، ما با آن همراه خواهیم شد PNPM.

ارکستراسیون فیلمنامه

حتی اگر PNPM ارکستراسیون بیشتر و بیشتری را به ویژگی‌های خود اضافه می‌کند، هنوز همه چیزهایی را که می‌خواستیم انجام دهیم را پوشش نمی‌دهد، مانند:

  • ساخت های متوالی،
  • ذخیره سازی

برای این موارد، ما دو مدعی جالب پیدا کردیم که باید به آنها نگاهی بیندازیم:

  • NX (توسط تیم زاویه ای)،
  • توربورپو (که به تازگی نسخه 1.0.0 را زمانی که ما کار روی آن را شروع کردیم و اکنون با تیم Vercel کار می کنیم، معرفی کرد).

ما یک اثبات مفهوم بر روی هر دو انجام دادیم.

NX ویژگی‌های بسیار بیشتری داشت، ژنراتورها، اتوماسیون، نمودارهای وابستگی عالی و غیره... اما، هزینه‌های زیادی را اضافه می‌کرد، و از آنجایی که بسیار خوش‌بینانه است، باید از قراردادهای آنها پیروی کنیم.

توربورپو از سوی دیگر، از نظر ویژگی بسیار اساسی است. با این حال، این یک راه حل مناسب برای پلاگین و بازی است که در صورت نیاز می توانیم خیلی سریع آن را تغییر دهیم.

حتی اگر توربورپو امکانات کمتری داشت NX، 2 کاری را که ما به دنبال آن بودیم انجام داد:

  • ارکستراسیون ساخت ها با احترام به درخت وابستگی (و ساخت های همزمان)،
  • ذخیره سازی (اگر کد آنها تغییر نکرده باشد، بیلدها ذخیره می شوند و دوباره پخش می شوند).

این، به‌علاوه خروج آسان/افتاده، ما را وادار کرد که بچه جدید را در بلوک انتخاب کنیم، TurboRepo.

نسخه بندی

ما چندین راه حل را نیز بررسی کردیم، اما در نهایت تصمیم گرفتیم از آن استفاده کنیم https://github.com/changesets/changesets همانطور که یکی از ابزارهایی بود که TurboRepo توصیه می کرد، و پس از کمی مطالعه اسناد، به نظر می رسید که با نیازهای ما مطابقت دارد.

توسعه‌دهندگان باید در جریان و ارائه برنامه‌نویس خود کمی دقیق‌تر باشند changesets (پرونده ای که توضیح می دهد کد آنها در کدام کتابخانه تغییر می کند، شدت زیر semver کنوانسیون، و شرحی از تغییر). اینها changesets سپس برای نمایش خودکار نسخه بسته ها با توجه به شدت های داده شده، و همچنین خودکارسازی تولید تغییرات. علاوه بر این، ابزار اجازه می دهد pre release حالت، 🍒 روی 🍰.

بعدش چی؟

پس از تصمیم گیری در مورد ابزار، نوبت به شروع کار رسید. در مقاله بعدی وبلاگ، در مورد سیستم ساخت و همه توسعه‌ها / اتوماسیون / ادغام مداوم در زمینه یک مخزن مونو صحبت خواهیم کرد.


والنتین دی آلمیدا
تجربه توسعه‌دهنده و فناوری هسته - Ledger Live

تمبر زمان:

بیشتر از دفتر کل