Ce projet démontre la mise en œuvre des micro-frontends utilisant Webpack Module Federation et React. Il fournit une base solide pour comprendre et développer des applications basées sur l'architecture micro-frontend.
efreiflix/
├── efreiflix-header/ # Micro-frontend Header
│ ├── public/
│ │ └── index.html # Template HTML pour le développement standalone
│ ├── src/
│ │ ├── components/
│ │ │ └── Header.js # Composant Header
│ │ ├── bootstrap.js # Initialisation de l'application
│ │ └── index.js # Point d'entrée
│ ├── package.json # Dépendances
│ └── webpack.config.js # Configuration Webpack + Module Federation
│
└── efreiflix-shell/ # Application Shell (hôte)
├── public/
│ └── index.html # Template HTML
├── src/
│ ├── App.js # Composant principal avec import du Header
│ ├── bootstrap.js # Initialisation de l'application
│ └── index.js # Point d'entrée
├── package.json # Dépendances
└── webpack.config.js # Configuration Webpack + Module Federation
- Cloner le repository :
git clone https://github.com/akiroussama/mfe_session1.git
- Démarrer le projet :
Le Shell sera accessible à : http://localhost:3000
cd mfe_session1 make install-d
Note
Access each provider through their respective port: http://localhost:[port]
new ModuleFederationPlugin({
name: "header",
filename: "remoteEntry.js",
exposes: {
"./Header": "./src/components/Header"
},
shared: {
react: {
singleton: true,
requiredVersion: false,
eager: false
},
"react-dom": {
singleton: true,
requiredVersion: false,
eager: false
}
}
})
Points clés :
name: "header"
: Identifiant unique du micro-frontendfilename: "remoteEntry.js"
: Point d'entrée pour Module Federationexposes
: Déclare les composants accessiblesshared
: Configuration du partage des dépendances
new ModuleFederationPlugin({
name: "shell",
remotes: {
header: "header@http://localhost:3001/remoteEntry.js"
},
shared: {
react: {
singleton: true,
requiredVersion: false,
eager: true
},
"react-dom": {
singleton: true,
requiredVersion: false,
eager: true
}
}
})
-
Initialisation Asynchrone
- Bootstrap séparé pour chaque application
- Chargement asynchrone pour éviter les conflits de modules
-
Gestion des Dépendances Partagées
- Shell : chargement eager de React
- Header : chargement asynchrone
- Instance unique de React (singleton)
-
Chargement Dynamique
- Chargement lazy du Header dans le Shell
- Fallback pendant le chargement
-
Créer un nouveau Micro-Frontend
- Développer un composant
Footer
dans un nouveau MFE - L'intégrer dans le Shell
- Développer un composant
-
Améliorations Possibles
- Système de routing
- Tests automatisés
- Pipeline de déploiement
- Communication inter-MFE
- Initialisation Asynchrone est cruciale
- Configuration des Modules Partagés doit être précise
- Développement Indépendant possible en mode standalone
- Architecture Extensible pour ajout de nouveaux MFE