一文大白话讲清楚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实战

相关推荐
SEO_juper14 分钟前
解密 URL 参数:如何利用它们提升网站性能和用户体验
前端·javascript·ux·seo·url·数字营销·谷歌seo
nuIl15 分钟前
让 Cursor 帮你把想法落地
前端·ai编程
去伪存真34 分钟前
看我如何破解api接口文档定义空白, 还不想手动写接口TS类型定义的困局
前端·typescript
skyWang4161 小时前
Vite模块联邦(vite-plugin-federation)实现去中心化微前端后台管理系统架构
前端
喝拿铁写前端1 小时前
你以为你是中级前端,其实你还停留在执行阶段-完整前端成长之路
前端
前端卧龙人1 小时前
uniapp开发技巧:开启代理与gzip优化实践
前端
hepherd1 小时前
Vue学习笔记 - 插件
前端·vue.js
027西瓜皮1 小时前
使用 Leaflet.js 生成北京地铁地图(Trae实现)
前端·trae
就是我1 小时前
3种必须知道的JavaScript异步编程模型
前端·javascript·面试
青花雅月1 小时前
写好代码之MVVC架构模式
前端·javascript·代码规范