本示例将演示如何利用 webpack5 的联邦模块支持项目微前端开发
Module Federation(联邦模块)
What
Module Federation 使 JavaScript 应用得以从另一个 JavaScript 应用中动态地加载代码 —— 同时共享依赖。如果某应用所消费的 federated module 没有 federated code 中所需的依赖,Webpack 将会从 federated 构建源中下载缺少的依赖项。
Why
- 方便代码共享
- 共享依赖(代码最下化)
- 运行时的代码共享可加快构建速度
How
基本概念
Host:消费其他 Remote 的 Webpack 构建;
Remote:被 Host 消费的 Webpack 构建;
一个构建产物可以同时是 Host 和 Remote,Remote 依赖的三方包会优先使用 host 里面加载了的,当 host 没有或者版本不一致的时候会加载自己的(当然也可以配置成版本不强制一致)
配置
1 | new ModuleFederationPlugin({ |
示例
三个应用(basic、app1、app2)
basic:基座应用-部署时的主应用、包含部分公用页面、全局 store、通用样式等
app1:演示父子通讯、跳转、多版本包
app2:演示 remoteEntry.js 懒加载
优势
- 微前端的优点
- 构建产物最小
- 简单(理解简单、开发方便)
问题
- 样式冲突–命名空间、style-components
- entry 多个–可优化(是否可以动态应用模块 entry文档)