إطلاق نظام بناء JS جديد للنواة Discourse

بعد التحديث الناجح لأنظمة بناء الثيم وإضافة الملحقات خلال العام الماضي، نحن الآن مستعدون للمضي قدمًا في تنفيذ ترقية مماثلة لنواة Discourse.

وعلى الرغم من أن هذا التغيير يمثل إعادة هيكلة شاملة لنظام البناء الأساسي، إلا أنه مصمم ليكون متوافقًا تمامًا مع الإصدارات السابقة. لا ينبغي أن تلاحظ أي تغييرات في تثبيتات Discourse في بيئة الإنتاج. وسيظل نظام الأصول المُجمَّعة مسبقًا يعني أن خوادمكم لن تحتاج إلى بناء الأصول الأساسية بنفسها.

التقنيات

نحن ننتقل من ember-cli/webpack إلى rolldown، وهو أداة تجميع تعتمد على Rust لـ JavaScript. يُعد Rolldown جوهر أحدث إصدار من Vite، لذا نحن في شركة جيدة ومتوافقون مع اتجاه نظام بيئة Ember.

يتم الآن بناء جميع كود JavaScript الخاص بـ Discourse إلى وحدات ES الأصلية، مما يحسن أداء وقت التشغيل ويفتح المجال أمام عدد من التحسينات المستقبلية.

أداء البناء

في بيئة التطوير، يجب أن تكون عمليات البناء أسرع بحوالي 80% مما كانت عليه سابقًا. على جهازي[1]، أدى ذلك إلى تقليل وقت تشغيل التطوير من حوالي 30 ثانية إلى حوالي 5 ثوانٍ. ونتوقع أن يتحسن الأداء بشكل أكبر في المستقبل، حيث لا تزال هناك بعض أجزاء البناء تعتمد على تقنيات أقدم مثل Babel.

تجربة المطور

كجزء من هذا الانتقال، قررنا التوقف عن استخدام وكيل أمامي لـ Discourse لأغراض التطوير. يجب الآن إجراء التطوير مباشرةً ضد خادم Rails.

تم استبدال bin/ember-cli -u بـ bin/dev. سيؤدي هذا الأمر إلى تشغيل Rails على المنفذ :3000، وسيعمل على تشغيل عملية بناء rolldown في الخلفية. سيتم إظهار مخرجات السجل من العمليتين مع بادئة مناسبة. يجب عليك زيارة :3000 في متصفحك. ولن يعود المنفذ :4200 يقدم أي شيء.

لمساعدة عملية الترحيل، أصبح bin/ember-cli الآن غلافًا متوافقًا مع الإصدارات السابقة. سيُظهر معلومات المساعدة، وسيشغل خادمًا خفيفًا الوزن على المنفذ :4200 مع تعليمات للانتقال إلى :3000.

إذا كنت تفضل تشغيل Rails وبناء JS كأوامر منفصلة، فلا يزال بإمكانك فعل ذلك. لم تتغير أوامر تشغيل Rails، ويمكن تشغيل أداة تجميع rolldown في وضع المراقبة باستخدام bin/dev --only ember.

تحذيرات بشأن البناء غير المحدث

إذا كان البناء الحالي الموجود على القرص قد تم إنتاجه باستخدام أداة تجميع rolldown للتطوير، ولم تعد عملية أداة التجميع قيد التشغيل، فسيقوم Rails بإلقاء خطأ لتنبيهك بأن الأصول غير محدثة. وينطبق هذا على وضع التطوير واختبارات النظام.

لن يتم إلقاء هذا الخطأ إذا استخدمت أمر البناء لمرة واحدة (pnpm build) كما نفعل في بيئة التكامل المستمر (CI).

شكرًا لكم!

تمت إتاحة هذا العمل بفضل فرق Ember/Embroider، و مبادرة Ember. شكرًا خاصًا لـ @real_ate على عمله معنا في هذا المشروع! :tada:


  1. MacBook Pro مزود بشريحة M3 Pro ↩︎

واو! هذا رائع! :raising_hands:t3: