إدارة الإصدارات والنشر والتنسيق
انشر التطبيقات البعيدة بشكل مستقل باستخدام الإصدار الدلالي، وأدر تعارضات المكتبات المشتركة، ونسّق الإصدارات
إدارة الإصدارات والنشر والتنسيق درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
النشر المستقل: القيمة الأساسية
تتمثل القيمة الأساسية لـ Module Federation في النشر المستقل: إذ يستطيع الفريق تحديث تطبيقه البعيد واختباره ونشره من دون التنسيق مع فرق المضيف أو تشغيل عمليات إعادة نشر للمضيف. يلتقط المضيف التغييرات تلقائيًا في المرة التالية التي يحمّل فيها remoteEntry.js من عنوان URL الخاص بالتطبيق البعيد.
إصدار عناوين URL للتطبيقات البعيدة
بدلًا من تقديم remoteEntry.js على عنوان URL ثابت (يتغير مع كل عملية نشر)، أدرجوا تجزئة المحتوى في عنوان URL: remoteEntry.[hash].js. يجعل ذلك كل عملية نشر غير قابلة للتغيير — تستمر عناوين URL القديمة في العمل، ويشير المضيف إلى التجزئة الجديدة بعد تحديثه إلى عملية النشر الجديدة. تتيح عناوين URL غير القابلة للتغيير تخزينًا مؤقتًا قويًا على CDN.
أعلام الميزات على مستوى البنية التحتية
بما أن المضيف يكتشف التطبيقات البعيدة عبر عنوان URL، يمكنكم تنفيذ اختبار A/B على مستوى البنية التحتية: قدّموا عناوين URL مختلفة لملف remoteEntry.js لمستخدمين مختلفين (بحيث تشير إلى إصدارات مختلفة من التطبيق البعيد). يتيح ذلك عمليات نشر canary حقيقية للواجهات الأمامية المصغّرة من دون أي منطق لأعلام الميزات في شيفرة التطبيق.
نهج البيان للاكتشاف المرن
بدلًا من تضمين عناوين URL للتطبيقات البعيدة في إعداد Webpack مباشرةً، يجلب المضيف بيان JSON عند بدء التشغيل: GET /federation-manifest.json returns { buttonApp: 'https://cdn.example.com/button/remoteEntry.abc123.js' }. لتحديث الإصدار الذي يستخدمه المضيف، حدّثوا البيان — ولا حاجة إلى إعادة بناء المضيف.
التراجع عبر تحديث البيان
عندما يتسبب نشر تطبيق بعيد في حدوث تراجع، يكون التراجع فوريًا: حدّثوا federation-manifest.json ليشير إلى عنوان URL السابق لـ remoteEntry.js. يبدأ المضيف فورًا باستخدام الإصدار القديم في دورة الطلب التالية. لا حاجة إلى إعادة بناء المضيف أو التراجع عنه أو إلى التنسيق بين الفرق.
Webpack Module Federation 2.0
يضيف Module Federation 2.0، أي الحزمة @module-federation/enhanced، تحسينات مهمة: دعمًا أفضل لـ TypeScript مع توليد تلقائي للأنواع من manifests الوحدات البعيدة، وواجهة API لإضافات وقت التشغيل تتيح منطق تحميل مخصصًا، وإدارة محسّنة لنطاق المشاركة لسيناريوهات التفاوض المعقدة حول الإصدارات.
vite-plugin-federation لـ Vite
تضيف حزمة vite-plugin-federation إمكانات Module Federation إلى المشاريع المبنية على Vite، باستخدام واجهة إعداد مشابهة لواجهة Webpack's ModuleFederationPlugin. وهي متوافقة مع الوحدات البعيدة في Vite والتطبيقات المضيفة في Webpack، والعكس صحيح، ما يتيح للفرق الانتقال إلى Vite تدريجيًا من دون التخلي عن Module Federation.
الوحدات البعيدة الديناميكية أثناء التشغيل
بالنسبة إلى البنى شديدة الديناميكية، يمكنكم ضبط عناوين URL للوحدات البعيدة بالكامل أثناء التشغيل: import(remoteRegistry[featureName])، حيث تتم تعبئة remoteRegistry عبر استدعاء API. يتيح ذلك إنشاء بنى تشبه الإضافات، بحيث يمكن إضافة واجهات أمامية مصغّرة جديدة من دون إعادة بناء تطبيق shell.
تطبيق shell بوصفه منسقًا
تتمثل المهمة الأساسية لتطبيق shell في التنسيق: فهو يقرأ manifest الخاص بالوحدة البعيدة، ويهيئ runtime الخاص بـ Module Federation، ويسجل الوحدات البعيدة ضمن مسارات مسماة، ويعرض الوحدة البعيدة المناسبة استنادًا إلى عنوان URL الحالي. صُمم shell ليكون رقيقًا عمدًا — فهو يعرف ما يجب تحميله، لا كيفية عرضه.
مراقبة Module Federation في بيئة الإنتاج
أضيفوا مراقبة الأداء إلى تحميل الوحدات البعيدة: غلّفوا عمليات استيراد الوحدات البعيدة داخل try/catch للتعامل مع إخفاقات التحميل بسلاسة، واعرضوا واجهة بديلة إذا كانت الوحدة البعيدة غير متاحة، وقيسوا الزمن اللازم لتنزيل remoteEntry.js وأجزاء المكوّنات، وأطلقوا تنبيهًا إذا تجاوز زمن تحميل الوحدة البعيدة حدًا معينًا، ما يشير إلى مشكلات في CDN.
مسار CI/CD الكامل
يبدو مسار CI/CD الناضج في Module Federation على النحو الآتي: يرسل فريق الوحدة البعيدة commit → تنشئ CI عملية بناء للوحدة البعيدة → ترفع remoteEntry.[hash].js غير القابل للتغيير إلى CDN → تحدّث federation-manifest.json → يلتقط التطبيق المضيف الوحدة البعيدة الجديدة عند طلب المستخدم التالي. تتم أتمتة كل خطوة، ولا يشارك فريق التطبيق المضيف مطلقًا في عمليات نشر الوحدات البعيدة.
استراتيجية التراجع عن نشر وحدة بعيدة في Module Federation
ما أسرع طريقة للتراجع عن عملية نشر سيئة لوحدة بعيدة في Module Federation؟
مراجعة الدرس
يتيح Module Federation النشر المستقل الحقيقي: إذ تنشر الوحدات البعيدة تحديثاتها من دون إعادة بناء التطبيق المضيف، ويكتشف التطبيق المضيف الإصدارات الجديدة تلقائيًا. استخدموا عناوين URL للوحدات البعيدة التي تتضمن تجزئة المحتوى للاستفادة من التخزين المؤقت غير القابل للتغيير على CDN، وmanifest ديناميكيًا لتوجيه الإصدارات بمرونة وإجراء عمليات تراجع فورية. تنقل vite-plugin-federation هذه الإمكانات إلى Vite، كما تتيح عمليات الاستيراد الديناميكية للوحدات البعيدة إنشاء بنى تشبه الإضافات. وينسق shell عملية تحميل الوحدات البعيدة، مع الحفاظ على بساطته عمدًا.
الأسئلة الشائعة
هل درس «إدارة الإصدارات والنشر والتنسيق» مجاني؟
نعم — نص درس «إدارة الإصدارات والنشر والتنسيق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «إدارة الإصدارات والنشر والتنسيق»؟
انشر التطبيقات البعيدة بشكل مستقل باستخدام الإصدار الدلالي، وأدر تعارضات المكتبات المشتركة، ونسّق الإصدارات تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «إدارة الإصدارات والنشر والتنسيق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- اتحاد الوحدات: الاستيراد الديناميكي وقت التشغيل
- إعداد تطبيقات React المضيفة والبعيدة
- مشاركة الحالة والتوجيه بين التطبيقات البعيدة
- إدارة الإصدارات والنشر والتنسيق