一文大白话讲清楚webpack进阶——8——Module Federation

文章目录

  • [一文大白话讲清楚webpack进阶------8------Module Federation](#一文大白话讲清楚webpack进阶——8——Module Federation)
  • [1. 啥是Module Federation](#1. 啥是Module Federation)
  • [2. 这里讲两个基础概念](#2. 这里讲两个基础概念)
  • [3. 容器应用配置](#3. 容器应用配置)
  • [4. 远程应用配置](#4. 远程应用配置)
  • [5. 模块使用](#5. 模块使用)
  • [5. ModuleFederation好在哪里](#5. ModuleFederation好在哪里)
  • [6. ModuleFederation实战](#6. ModuleFederation实战)

一文大白话讲清楚webpack进阶------8------Module Federation

1. 啥是Module Federation

  • Module是模块,Federation是捆绑,Module Federation就是模块联邦,
  • 那问题来了谁跟谁联邦,怎么联邦
  • 第一个问题,可以概括为把别人的微前端绑定到自己的项目中,作为本项目的一个模块,从而实现代码共享
  • 第二个问题,怎么绑,先不着急回答,先讲我们之前用第三方库代码怎么用,得通过npm或者yarn等包管理工具下载到本地,然后再项目中引用。也就是说,我们在项目的中必须要有这个物理包,然后引入。再说模块联邦怎么绑定,一句话,远程绑定,换句话说就是不同把第三方库代码下载到本地,直接上URL。
  • Module Federation是webpack5引入的新特性,它允许不同的web应用在运行时共享代码,不需要传统的打包或者发布过程中的物理共享,这表示每个微应用都可以独立开发,构建,部署,还能轻松地实现共享组件,库甚至是业务逻辑。可以说,彻底改变了微前端的结构实现

2. 这里讲两个基础概念

  • 1. 容器应用
  • 作为微前端结构的宿主,负责加载和协调哥哥微应用,说白了就是在你的项目中,既然要联邦很多微应用,那总得有一个负责引用和管理这些微应用的东西吧,这个就是
  • 2. 远程应用
  • 说白了就是你项目中引用的微应用,是独立的,可以暴露自己的模块给其他应用使用,当然也可以作为容器应用引用来自其他英勇的模块。
  • 一句话,容器应用和远程应用我中有你,你中有我,我可以是你,你也可以是我,就看你是用别人的,还是被别人用的

3. 容器应用配置

  • 大白话,就是你怎么应用别人
  • 我们在webpack.config.js中通过ModuleFederationPlugin来声明远程微应用的来源
js 复制代码
const ModuleFederationPlugin=require('webpack/lib/container/ModuleFederationPlugin')
module.exports={
    plugins:[
        new ModuleFederatoionPlugin({
            name:'container',
            remotes:{//引用的远程微应用的名称和远程入口文件的URL
                app1:'app1/@http:xxx.js',
                app2:'app2/@http:yyy.js'
            },
            shared:{//指明了哪些模块应该作为单例共享
                react:{
                    singleton:true
                }
            }
        })
    ]
}

4. 远程应用配置

  • 大白话就是,你怎么被别人使用
  • 我们在webpack.config.js中同样使用ModuleFederationPlugin进行配置,但这次不是引用别人,还是暴露自己,被别人使用
js 复制代码
const ModuleFederationPlugin=require('webpack/lib/container/ModuleFederationPlugin')
module.exports={
    plugins:[
        new MoudleFederationPlugin({
            name:'app1',
            filename:'xxx.js',
            exposes:{//定义哪些模块将对外暴露
                './MyCompent':'./src/components/MyCompent',//声明MyComponent组件可以被容器应用导入和shiyong
            },
            shared:{
                react:{
                    singlerton:true
                }
            }
        })
    ]
}

5. 模块使用

  • 通过容器应用配置MyComponent组件后,我们可以直接在本地项目中导入远程引用暴露出来的MyComponent模块
js 复制代码
import MyComponent from 'app1/MyComponet'
const fn=()=>{
    return (
        <div>
            <MyCompent/>
        </div>
    )
}
export default fn

5. ModuleFederation好在哪里

  1. 独立开发和部署,每个微应用都可以独立开发,构建恶化部署,大大提高开发效率和部署灵活性
  2. 实现按需加载,应用在首屏加载上,能提升性能
  3. 良好的版本管理和隔离,各微应用独立维护版本,避免版本冲突问题
  4. 抑郁维护,Module Federation有较好的松耦合性,使得添加和移除微应用变得简单而方便

6. ModuleFederation实战

相关推荐
人工智能训练师1 小时前
Ubuntu22.04如何安装新版本的Node.js和npm
linux·运维·前端·人工智能·ubuntu·npm·node.js
Seveny072 小时前
pnpm相对于npm,yarn的优势
前端·npm·node.js
yddddddy2 小时前
css的基本知识
前端·css
昔人'3 小时前
css `lh`单位
前端·css
Nan_Shu_6144 小时前
Web前端面试题(2)
前端
知识分享小能手4 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
蚂蚁RichLab前端团队5 小时前
🚀🚀🚀 RichLab - 花呗前端团队招贤纳士 - 【转岗/内推/社招】
前端·javascript·人工智能
孩子 你要相信光6 小时前
css之一个元素可以同时应用多个动画效果
前端·css
huangql5206 小时前
npm 发布流程——从创建组件到发布到 npm 仓库
前端·npm·node.js
Days20506 小时前
LeaferJS好用的 Canvas 引擎
前端·开源