深入讲解微前端架构的落地方式,对比 qiankun 与 Module Federation,并结合真实工程分析拆分策略与通信方案。
随着前端项目复杂度不断提升,单体应用逐渐暴露出明显问题:
当一个系统包含多个业务域时,微前端成为一种自然演进方向。
微前端的核心思想是:
将一个前端应用拆分为多个独立可运行的子应用。
每个子应用拥有:
最终由一个“主应用”进行组合。
优点:
缺点:
qiankun 是基于 single-spa 的微前端框架。
特点:
适合后台系统、企业级中台。
Webpack 5 提供的模块联邦机制。
核心能力:
典型结构如下:
Host(主应用)
├── Remote A(用户系统)
├── Remote B(订单系统)
├── Remote C(支付系统)
每个 Remote 都可以独立部署。
new ModuleFederationPlugin({ name: "host", remotes: { userApp: "userApp@http://localhost:3001/remoteEntry.js" }, shared: { react: { singleton: true }, "react-dom": { singleton: true } } })
new ModuleFederationPlugin({ name: "userApp", filename: "remoteEntry.js", exposes: { "./App": "./src/App" }, shared: { react: { singleton: true }, "react-dom": { singleton: true } } })
Host 中使用:
const UserApp = React.lazy(() => import("userApp/App"))
或者:
<Suspense fallback={"loading"}> <UserApp /> </Suspense>
window.dispatchEvent(new CustomEvent("login", { detail: user }))
const store = { user: null }
/user?id=123
避免重复加载 React:
shared: { react: { singleton: true } }
不能依赖主应用构建。
微前端本质是“解耦”,不是“强耦合系统”。
通常是 remoteEntry 加载失败。
解决方式:
React / Vue 必须共享 singleton。
适合:
不适合:
微前端不是“技术炫技”,而是一种组织结构优化方式。
Module Federation 提供了最轻量、最现代的实现方式,是当前 React / Webpack 体系下的主流选择。
暂无评论,留下第一条声音吧。