بنية Micro-Frontends: تنفيذ Module Federation و Single-SPA
بناء micro-frontends مع Webpack Module Federation و Single-SPA. يغطي تنظيم الفريق والتبعيات المشتركة وأنماط النشر الإنتاجي.
مقدمة
تمد الواجهات المصغرة مفهوم الخدمات المصغرة إلى الواجهة الأمامية. عندما ينمو فريق الواجهة الأمامية لديك إلى أكثر من 8-10 مطورين، أو عندما تمتلك فرق مختلفة أجزاء مختلفة من تجربة المستخدم، يمكن للواجهات المصغرة تمكين التطوير والنشر المستقل.
متى تفكر في الواجهات المصغرة
قبل التنفيذ، قيّم بصدق إذا كنت تحتاجها:
المرشحون الجيدون:
- فرق كبيرة (20+ مطور واجهة أمامية)
- نطاقات عمل متميزة بملكية منفصلة
- الحاجة لدورات نشر مستقلة
- تحديث الأنظمة القديمة (نمط الخانق)
المرشحون السيئون:
- فرق صغيرة تريد "أن تكون مثل Netflix"
- تطبيقات بسيطة
- فرق بدون قدرات DevOps قوية
بنية اتحاد الوحدات
اتحاد وحدات Webpack 5 هو النهج الأكثر نضجاً:
// تطبيق المضيف (الهيكل) webpack.config.js const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin; module.exports = { plugins: [ new ModuleFederationPlugin({ name: 'shell', remotes: { catalog: 'catalog@http://localhost:3001/remoteEntry.js', checkout: 'checkout@http://localhost:3002/remoteEntry.js', }, shared: { react: { singleton: true, requiredVersion: '^18.0.0' }, 'react-dom': { singleton: true, requiredVersion: '^18.0.0' }, }, }), ], };
استراتيجية التبعيات المشتركة
إدارة التبعيات المشتركة حاسمة لحجم الحزمة.
التواصل بين الواجهات المصغرة
نمط ناقل الأحداث
class EventBus { private listeners: Map<string, Set<EventCallback>> = new Map(); subscribe(event: string, callback: EventCallback): () => void { if (!this.listeners.has(event)) { this.listeners.set(event, new Set()); } this.listeners.get(event)!.add(callback); return () => this.listeners.get(event)?.delete(callback); } publish(event: string, data: unknown): void { this.listeners.get(event)?.forEach(callback => callback(data)); } } export const eventBus = new EventBus();
استراتيجية التوجيه
// الهيكل يتعامل مع التوجيه على المستوى الأعلى function ShellApp() { return ( <BrowserRouter> <Layout> <Routes> <Route path="/catalog/*" element={<CatalogApp />} /> <Route path="/checkout/*" element={<CheckoutApp />} /> </Routes> </Layout> </BrowserRouter> ); } // كل واجهة مصغرة تتعامل مع مساراتها الفرعية function CatalogApp() { return ( <Routes> <Route index element={<ProductList />} /> <Route path=":productId" element={<ProductDetail />} /> </Routes> ); }
الخلاصة
الواجهات المصغرة نمط قوي لتوسيع نطاق تطوير الواجهة الأمامية عبر الفرق الكبيرة. القرارات الرئيسية هي:
- نهج التكامل: اتحاد الوحدات للتركيب في وقت التشغيل
- التبعيات المشتركة: إدارة دقيقة لتجنب الانتفاخ
- التواصل: ناقل الأحداث للترابط المرن
- التوجيه: الهيكل يمتلك المستوى الأعلى، الواجهات المصغرة تمتلك المسارات الفرعية
تذكر: الواجهات المصغرة تضيف تعقيداً. اعتمدها فقط عندما تفوق الفوائد التنظيمية التكاليف التقنية.
مقالات ذات صلة
هندسة البرمجياتقراءة 18 دقيقة
المايكروسيرفيس مقابل المونوليث: متى تستخدم كل منهما (دليل 2024)
مقارنة المايكروسيرفيس والمونوليث مع معايير قرار حقيقية. تعلم متى تضيف المايكروسيرفيس قيمة مقابل التعقيد غير الضروري.
هندسة الواجهاتقراءة 19 دقيقة
تحسين أداء React: useMemo و useCallback و Code Splitting (2024)
تحسين أداء React مع useMemo و useCallback و code splitting. مقاييس أداء حقيقية وأنماط من تطبيقات إنتاجية واسعة النطاق.
هندسة الواجهاتقراءة 17 دقيقة
إدارة الحالة في React: مقارنة Redux مقابل Zustand مقابل Context API
قارن حلول إدارة الحالة في React: Redux Toolkit و Zustand و Context API. تعلم متى تستخدم كل منها مع أمثلة حقيقية واعتبارات الأداء.
الأداء وتحسين محركات البحثقراءة 18 دقيقة
ميزانيات الأداء: تحديد حدود حجم الحزمة مع Webpack و Lighthouse
تحديد وفرض ميزانيات الأداء مع Webpack و Lighthouse CI ومحللات الحزم. يغطي الاختبار الآلي وتكامل CI/CD ومساءلة الفريق.
الأداء وتحسين محركات البحثقراءة 21 دقيقة
كيفية تحسين Core Web Vitals: دليل تحسين LCP و FID و CLS
تحسين درجات Core Web Vitals مع تقنيات تحسين LCP و FID و CLS العملية. مقاييس قبل/بعد حقيقية من تطبيقات React و Next.js الإنتاجية.