# 模块联邦
在大型项目中,往往会把项目中的某个区域或功能模块作为单独的项目开发,最终形成「微前端」架构
在微前端架构中,不同的工程可能出现下面的场景

这涉及到很多非常棘手的问题:
- 如何避免公共模块重复打包
- 如何将某个项目中一部分模块分享出去,同时还要避免重复打包
- 如何管理依赖的不同版本
- 如何更新模块
- `......`
`webpack5`尝试着通过`模块联邦`来解决此类问题
## 示例
现有两个微前端工程,它们各自独立开发、测试、部署,但它们有一些相同的公共模块,并有一些自己的模块需要分享给其他工程使用,同时又要引入其他工程的模块。
### 初始化工程
#### home项目
安装
```shell
# 初始化 package.json
npm init -y
# 安装依赖
npm i -D webpack webpack-cli webpack-dev-server html-webpack-plugin
npm i jquery
```
修改`package.json`
```json
"scripts": {
"build": "webpack",
"dev": "webpack serve"
}
```
配置`webpack.config.js`
```js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
mode: 'development',
devtool: 'source-map',
devServer: {
port: 8080,
},
output: {
clean: true,
},
plugins: [ new HtmlWebpackPlugin() ]
};
```
代码
```js
// src/now.js
import $ from 'jquery';
export default function (container) {
const p = $('
').appendTo(container).text(new Date().toLocaleString()); setInterval(function () { p.text(new Date().toLocaleString()); }, 1000); } // src/bootstrap.js import $ from 'jquery'; import now from './now'; // 生成首页标题 $('