
من فترة كدة وتحديدا مع دخول webpack 5 تم اختراع فكرة جديدة اسمها module federation عملت ثورة في مجال السوفتوير
تعالوا بأة نتعرف علي العظمة الجديدة وازاي نستفيد منها

Webpack
ويب باك يا صديقي هو bundler tool بيجمع أجزاء التطبيق من مصادر مختلفة في bundle واحد
ودة بيقلل عدد الـ round trips بدل ما بنضطر كل شوية نروح نحمل ملف عن طريق الشبكة بنحمل الـ bundle مرة واحدة ودة بيخلي التطبيق اسرع
أثناء عملية التجميع دي ممكن يحصل عمليات transformation داخلية زي مثلا transpiling لكود Typescript لتحويله لكود javascript أو مثلا عمل minify لـ static file
او تقليل حجم الصور عشان تحميلها علي الشبكة يكون أسرع
Module Federation
مع دخول Webpack 5 ظهرت تقنية جديدة اسمها module federation
ودي بتساعدك تقسم التطبيق لتطبيقات صغيرة بحيث لما تجمعهم كلهم تعمل التطبيق النهائي
كل تطبيق ممكن يتعمل بتكنولوجي مختلفة ويتم نشرها بشكل مستقل تماما
يعني مثلا ممكن جزء يتبرمج ب Angular وجزء تاني يتبرمج بـ React وكل جزء يترفع علي سيرفر مستقل
كل تطبيق صغير من دول له تيم مستقل تماما
في النهاية بنجمع التطبيقات الصغيرة دي جوة container بيشكل التطبيق النهائي
التطبيق الرئيسي اللي بيمثل الـ container بنسميه host والتطبيقات الفرعية بنسميهم remotes
خد بالك ان ال host نفسه بكل ال remotes اللي جواه ممكن نخليه remote لـ host تاني اكبر منه
الفكرة دي خلتنا نقد نستخدم أي component لأي تطبيق تاني وكأنه جزء من التطبيق الحالي
البنية التحتية لموقع أمازون
خد عندك مثال
لو شوفنا موقع زي أمازون, موقع ضخم زي دة لا يمكن يتم انجازه بسهولة ولو اتعمل مرة واحدة أكيد هيكون فيه كمية اخطاء كبيرة اوي
دي غير ان عمليات الـ build والـ deploy هتبأة طويلة وهتاخد وقت طويل أوي
يعني كل مرة هتعمل تعديل بسيط جدا في أي جزء من التطبيق هتاخد وقت طويل أوي في الـ build ووقت وتكلفة عالية في ال deployment
الأسوأ من كدة ان أي غلطة في الابليكيشن هتوقف الأبليكيشن كله!
الحل هنا اننا نقسم الابليكيشن بتاعنا لأجزاء صغيرة, كل جزء مساقل بذاته تماما
وكل جزء له تيم متخصص فيه ويفهم تفاصيله كويس جدا وممكن كمان يختار تقنيات و framework مختلفة عن الاجزاء التانية
بل ويتم رفع كل جزء علي سيرفر مختلف
الحلو هنا ان لو حصل خطأ في أي تطبيق, باقية التطبيقات هتفضل شغالة عادي
مثلا ممكن تنقل الـ shopping card لتطبيق مستقل وله تيم مستقل
وتنقل كل مايخص الدفع وال integration مع ال payment gateways وتديها لتيم مساقل
أما عرض الـ products وتفاصيلها واسعارها لتيم تالت خالص
وكل تيم يقرر علي كيفه هيشتغل بأنهو framework
Microservices and micro front-end
الفكرة اللي طبقناها في أمازون اننا نقسم الابليكيشن الضخم لـ apps صغيرة
كل app مستقل تماما بذاته وله تيم مستقل وكل app معمول ب framework او حتي لغة برمجة مختلفة
وكل واحد فيهم بيترفع علي سيرفر مختلف
الفكرة دي بنسميها microservice والتواصل بين ال micro services دي بيكون عن طريق APIs
اما في الفرونت اند بنسميها micro front-end ودي بتكون شبه الـ microservices مع شوية اختلافات
بفضل تقنية module federation نقدر نخلي اي app يستخدم components بتاعة app تاني بعيد تماما عنه ودة تحديدا فكرة الـ micro frontend اللي هنتكلم عنها بتفاصيل أكتر الدروس القادمة
Native Federation
مع مرور الوقت الدنيا اتطورت أكتر وظهرت build tools غير webpack زي esbuild اللي يعتبر أسرع من webpack 10 مرات
هنا بأة مش هنقدر نستفيد بـ module federation لانها خاصية في webpack
لحسن الحظ فكرة ال federation بدأت تبأة مدعومة natively في المتصفحات الحديثة وخصوصا مع تطور ال ES modules
وأكيد هيكون لنا درس نتعلم فيه ازاي نشتغل بالطريقتين