شعار زيفيرنت

مشروع ليدجر لايف مونوريبو: الجزء الثاني – الأدوات (اجعلها تتألق) | موازنة

التاريخ:

الإدخال الثاني لسلسلة منشورات المدونة "مشروع Ledger Live Monorepo Project"، حيث يخبرنا أحد مطوري Ledger قصة الهجرة الضخمة لقاعدة بيانات Ledger Live إلى مستودع أحادي. إذا فاتتك الجزء الأول، شاهده هنا:

بعد التأكد من أن بنية monorepo كانت حلاً قابلاً للتطبيق، بدأنا بعد ذلك في النظر في الأدوات المتاحة لوضع خطتنا موضع التنفيذ.

التعامل مع مشاريع متعددة

في فريق Ledger Live، نتنقل في نظام JavaScript البيئي، ولحسن الحظ بالنسبة لنا، عرفنا بالفعل عدة طرق للتعامل مع مشاريع متعددة باستخدام مدير الحزم لدينا. بعض هذه الحلول الممكنة تشمل:

  • الآلية الوقائية الوطنية (يحتوي على دعم لمساحات العمل ولكن بدائل أفضل)،
  • 1 غزل (أصبحت بدائل قديمة جدًا وأفضل وأكثر كفاءة)،
  • الغزل ≥ 2 (فكرة مثيرة للاهتمام، ولكن التوصيل والتشغيل غير مدعوم بشكل جيد في كل مكان، خاصة مع React Native)،
  • بنم (ارتباطات رمزية، تم إنشاؤها مع وضع مساحات العمل في الاعتبار، وكفاءة القرص).

بعد النظر في كل هذه الأمور، قررنا الذهاب معها بنم ل:

  • كفاءة القرص (يستخدم برنامج Virtual متجر و الروابط الرمزية، بحيث يتم تنزيل الحزم مرة واحدة فقط ثم يتم ربطها بوحدات العقدة الخاصة بك من المتجر الافتراضي).
  • السرعة (بما أن الحزم مخزنة مؤقتًا، فإن عمليات التثبيت اللاحقة تكون أسرع بكثير)،
  • مدمج لدعم مساحات العمل/هندسة monorepo (الأسماء المستعارة والتنسيق وما إلى ذلك ...).

على ورقة بنم هي جوهرة مطلقة، لكن الارتباطات الرمزية كانت غريبة بعض الشيء لإعدادها بشكل صحيح (مرة أخرى، خاصة مع React Native).

حسنًا، لقد تم اختيارنا، وسنذهب معه بنم.

تنسيق البرنامج النصي

رغم أن بنم يضيف المزيد والمزيد من التنسيق إلى ميزاته، فهو لا يزال لا يغطي كل ما أردنا القيام به، مثل:

  • بناء متسلسل,
  • التخزين المؤقت.

بالنسبة لهؤلاء، وجدنا اثنين من المتنافسين المثيرين للاهتمام وكان علينا إلقاء نظرة عليهما:

  • NX (من قبل الفريق الزاوي)،
  • توربوريبو (الذي أعلن للتو عن الإصدار 1.0.0 عندما بدأنا العمل عليه، ويعمل الآن مع فريق Vercel).

لقد قمنا بإثبات المفهوم على حد سواء.

NX كان يحتوي على المزيد من الميزات، والمولدات، والأتمتة، والرسوم البيانية التبعية الرائعة وما إلى ذلك... ولكنه أضاف الكثير من النفقات العامة، وبما أنه متشدد إلى حد ما، فسيتعين علينا اتباع اتفاقياتهم.

توربوريبو من ناحية أخرى، هي ميزة أساسية جدًا. ومع ذلك، فهو حل مناسب للتوصيل والتشغيل ويمكننا تغييره بسرعة كبيرة إذا دعت الحاجة إليه.

رغم أن توربوريبو كان لديه ميزات أقل من NXلقد فعل الشيئين اللذين كنا نبحث عنهما:

  • تنسيق البنيات مع احترام شجرة التبعية (والبنيات المتزامنة)،
  • التخزين المؤقت (يتم تخزين الإصدارات مؤقتًا و"إعادة تشغيلها" إذا لم يتغير الكود الخاص بها).

هذا، بالإضافة إلى سهولة الدخول والخروج، جعلنا نختار الطفل الجديد في المبنى، توربو ريبو.

الإصدارات

لقد بحثنا أيضًا في العديد من الحلول، ولكننا قررنا استخدامها في النهاية https://github.com/changesets/changesets نظرًا لأنها كانت إحدى الأدوات التي أوصى بها TurboRepo، وبعد قليل من قراءة الوثائق، بدا أنها تتوافق مع احتياجاتنا.

سيحتاج المطورون إلى أن يكونوا أكثر صرامة في تدفق التطوير الخاص بهم وتقديمه changesets (ملف يصف المكتبة التي يتغير رمزها، وخطورة ما يلي سمفر الاتفاقية ووصف التغيير). هؤلاء changesets يتم استخدامها بعد ذلك لتحديث إصدار الحزم تلقائيًا مع احترام درجات الخطورة المحددة، بالإضافة إلى أتمتة إنشاء سجل التغييرات. علاوة على ذلك، تسمح الأدوات بذلك pre release الوضع 🍒 على 🍰.

ماذا بعد ؟

بعد اتخاذ قرار بشأن الأدوات، حان الوقت لبدء العمل. في مقال المدونة التالي، سنتحدث عن نظام البناء وجميع عمليات التطوير/الأتمتة/التكامل المستمر في سياق مستودع أحادي.


فالنتين دي ألميدا
تجربة المطور والتقنية الأساسية – Ledger Live

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة