是 webpack5 新增的功能。

    模块联邦的出现是为了不同开发小组可以共同开发一个或多个应用,类似于微前端的 qiankun 和 single-spa。

    使用模块联邦可以把一个应用,划分成多个块,比如 头部、主体、等,每个应用块由不同的组开发。

    提供给别人使用的应用叫做 remote。
    引用别人的应用叫做 host。
    host 可以使用 remote 暴露出来的模块。

    1. // 微前端的终极解决方法
    2. // 两个项目
    3. // 给别人引用的叫做 remote
    4. // 引用别人的叫做 host
    5. ```js
    6. // remote 给别人用的
    7. import ('./bootstrap')
    8. // bootstrap
    9. import React from 'react'
    10. import App from './app'
    11. // App
    12. import NewsList from './components/NewsList' // 常规开发 新闻列表组件
    13. ... ...
    14. 常规代码
    15. webpack.config.js
    16. // 引入内置插件 模块联邦
    17. const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin')
    18. output: {
    19. // 产出资源在HTML模板中引入的路径
    20. publicPath: 'http://localhost:8080/'
    21. }
    22. plugins: [
    23. new ModuleFederationPlugin({
    24. filename: 'remoteEntry.js',
    25. name: 'remote',
    26. exposes: { 被远程引用的时候可暴露的资源路径和别名
    27. './remoteList': './src/remoteList'
    28. }
    29. })
    30. ]
    1. // host
    2. // 也要引入 bootstrap
    3. 引用 remote 暴露出来的模块
    4. const RemoteList = React.lazy(() => import('remote/RemoteList'))
    5. <RemoteList />
    6. new ModuleFederationPlugin({
    7. filename: 'remoteEntry.js',
    8. name: 'remote',
    9. remotes: {
    10. remote: 'remote@http://lcoalhost:3000/remoteEntry.js'
    11. }
    12. })

    ```