微前端与 Module Federation 概述
微前端是一种将多个独立前端应用组合成统一整体的架构模式,Module Federation 是 Webpack 5 提供的功能,允许跨应用共享模块,实现独立部署和动态加载。
核心配置步骤
配置 Module Federation 的主应用
在 Webpack 配置中启用 Module Federation,主应用需声明远程应用的入口:
// 主应用的 webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
module.exports = {
plugins: [
new ModuleFederationPlugin({
name: "host",
remotes: {
app1: "app1@http://localhost:3001/remoteEntry.js",
},
shared: ["react", "react-dom"],
}),
],
};
配置远程 React 子应用
子应用需暴露组件或模块供主应用消费:
// 子应用的 webpack.config.js
new ModuleFederationPlugin({
name: "app1",
filename: "remoteEntry.js",
exposes: {
"./Button": "./src/Button",
},
shared: ["react", "react-dom"],
}),
主应用动态加载远程模块
在主应用中使用 React.lazy 动态加载子应用暴露的组件:
const RemoteButton = React.lazy(() => import("app1/Button"));
function App() {
return (
<React.Suspense fallback="Loading Button">
<RemoteButton />
</React.Suspense>
);
}
共享依赖管理
通过 shared 配置确保主应用和子应用使用相同版本的库(如 React),避免重复加载和版本冲突。
独立部署与版本控制
- 子应用可独立部署,主应用通过更新
remoteEntry.js的 URL 引用新版本。 - 建议使用 CI/CD 自动化部署流程,确保版本一致性。
调试与错误处理
- 使用 Webpack 的
stats分析模块加载情况。 - 捕获动态加载错误并降级处理:
<React.Suspense fallback={<ErrorFallback />}>
<RemoteComponent />
</React.Suspense>
性能优化
- 预加载远程模块:
import("app1/Button").then((module) => {
// 预加载逻辑
});
- 按需加载非关键组件,减少首屏负载。
通过以上步骤,可实现 React 应用的微前端集成,兼顾独立开发和部署的灵活性。
1345

被折叠的 条评论
为什么被折叠?



