Module Federation in Webpack
Introduction
Module Federation is a feature in Webpack 5 that allows multiple Webpack builds to work together. It enables the sharing of code between applications at runtime, facilitating micro-frontend architectures.
Key Concepts
- **Remote**: A module that is loaded from a different build.
- **Host**: The application that consumes remote modules.
- **Shared**: Dependencies that are shared between host and remote applications.
Setup
To set up Module Federation, you need to configure your `webpack.config.js` files for both the host and remote applications.
Host Configuration
const { ModuleFederationPlugin } = require("webpack").container;
module.exports = {
// other configurations
plugins: [
new ModuleFederationPlugin({
name: "host",
remotes: {
remoteApp: "remote@http://localhost:3001/remoteEntry.js",
},
shared: {
react: {
singleton: true,
eager: true,
},
"react-dom": {
singleton: true,
eager: true,
},
},
}),
],
};
Remote Configuration
const { ModuleFederationPlugin } = require("webpack").container;
module.exports = {
// other configurations
plugins: [
new ModuleFederationPlugin({
name: "remote",
filename: "remoteEntry.js",
exposes: {
"./Component": "./src/Component",
},
shared: {
react: {
singleton: true,
eager: true,
},
"react-dom": {
singleton: true,
eager: true,
},
},
}),
],
};
Code Example
Here's a simple example of consuming a remote component:
import React, { Suspense } from 'react';
const RemoteComponent = React.lazy(() => import('remoteApp/Component'));
function App() {
return (
Host Application
Loading... }>
Best Practices
- Keep shared dependencies in sync to avoid version conflicts.
- Minimize the number of shared modules to reduce bundle size.
- Use dynamic imports to load remote components only when needed.
FAQ
What is Module Federation?
Module Federation is a Webpack 5 feature that allows for sharing code dynamically between multiple applications.
Can I use Module Federation with React?
Yes, Module Federation works seamlessly with React and other frameworks.
Is Module Federation compatible with Webpack 4?
No, Module Federation is a feature of Webpack 5 and is not backward-compatible with Webpack 4.