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

news2025/2/4 1:05:31

文章目录

  • 一文大白话讲清楚webpack进阶——8——Module Federation
  • 1. 啥是Module Federation
  • 2. 这里讲两个基础概念
  • 3. 容器应用配置
  • 4. 远程应用配置
  • 5. 模块使用
  • 5. 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来声明远程微应用的来源
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进行配置,但这次不是引用别人,还是暴露自己,被别人使用
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模块
import MyComponent from 'app1/MyComponet'
const fn=()=>{
    return (
        <div>
            <MyCompent/>
        </div>
    )
}
export default fn

5. ModuleFederation好在哪里

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

6. ModuleFederation实战

  • 看这篇文章
  • ModuleFederation实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Airflow:选择合适执行器扩展任务执行

Apache Airflow是面向开发人员使用的&#xff0c;以编程方式编写、调度和监控的数据流程平台。可伸缩性是其关键特性之一&#xff0c;Airflow支持使用不同的执行器来执行任务。在本文中&#xff0c;我们将深入探讨如何利用这些执行器在Airflow中有效地扩展任务执行。 理解Airfl…

CoRAG 来自微软与人大的创新RAG框架技术

微软与人大合作开发的CoRAG(Chain-of-Retrieval Augmented Generation)是一种创新的检索增强生成(RAG)框架,旨在通过模拟人类思考方式来提升大语言模型(LLM)在复杂问题上的推理和回答能力。以下是对CoRAG的深度介绍: 1. CoRAG的核心理念 CoRAG的核心思想是通过动态调…

Qt Creator 中使用 vcpkg

Qt Creator 中使用 vcpkg Qt Creator 是一个跨平台的轻量级 IDE&#xff0c;做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强&#xff0c;但是由于和 Qt 集成的比较深&#xff0c;用来开发 Qt 程序还是很顺手的。 早期&#xf…

mysql中in和exists的区别?

大家好&#xff0c;我是锋哥。今天分享关于【mysql中in和exists的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; mysql中in和exists的区别&#xff1f; 在 MySQL 中&#xff0c;IN 和 EXISTS 都是用于子查询的操作符&#xff0c;但它们在执行原理和适用场景上有所不…

智慧园区管理系统推动企业智能运维与资源优化的全新路径分析

内容概要 在当今快速发展的商业环境中&#xff0c;园区管理的数字化转型显得尤为重要。在这个背景下&#xff0c;快鲸智慧园区管理系统应运而生&#xff0c;成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术&#xff0c;以智能化的方式解决了传统管理模式…

物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

物联网&#xff08;IoT&#xff09;‌是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术&#xff0c;实时采集并连接任何需要监控、连接、互动的物体或过程&#xff0c;实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…

谭浩强C语言程序设计(4) 8章(下)

1、输入三个字符串按照字母顺序从小到大输出 #include <cstdio> // 包含cstdio头文件&#xff0c;用于输入输出函数 #include <cstring> // 包含cstring头文件&#xff0c;用于字符串处理函数#define N 20 // 定义字符串的最大长度为20// 函数&#xff1a;…

使用朴素贝叶斯对散点数据进行分类

本文将通过一个具体的例子&#xff0c;展示如何使用 Python 和 scikit-learn 库中的 GaussianNB 模型&#xff0c;对二维散点数据进行分类&#xff0c;并可视化分类结果。 1. 数据准备 假设我们有两个类别的二维散点数据&#xff0c;每个类别包含若干个点。我们将这些点分别存…

【Pytorch和Keras】使用transformer库进行图像分类

目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理&#xff0c;transformer库能关联到huggface中对应的模型&am…

Python 深拷贝与浅拷贝:数据复制的奥秘及回溯算法中的应用

引言 在 Python 编程领域&#xff0c;数据复制是极为常见的操作。而深拷贝和浅拷贝这两个概念&#xff0c;如同紧密关联却又各具特色的双子星&#xff0c;在数据处理过程中扮演着重要角色。深入理解它们&#xff0c;不仅有助于编写出高效、准确的代码&#xff0c;还能避免许多…

简单易懂的倒排索引详解

文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构&#xff0c;…

初级数据结构:栈和队列

目录 一、栈 (一)、栈的定义 (二)、栈的功能 (三)、栈的实现 1.栈的初始化 2.动态扩容 3.压栈操作 4.出栈操作 5.获取栈顶元素 6.获取栈顶元素的有效个数 7.检查栈是否为空 8.栈的销毁 9.完整代码 二、队列 (一)、队列的定义 (二)、队列的功能 (三&#xff09…

阿里云 - RocketMQ入门

前言 云消息队列 RocketMQ 版产品具备异步通信的优势&#xff0c;主要应用于【异步解耦】、【流量削峰填谷】等场景对于同步链路&#xff0c;需要实时返回调用结果的场景&#xff0c;建议使用RPC调用方案阿里云官网地址RocketMQ官网地址 模型概述 生产者生产消息并发送至服务…

Agentic Automation:基于Agent的企业认知架构重构与数字化转型跃迁---我的AI经典战例

文章目录 Agent代理Agent组成 我在企业实战AI Agent企业痛点我构建的AI Agent App 项目开源 & 安装包下载 大家好&#xff0c;我是工程师令狐&#xff0c;今天想给大家讲解一下AI智能体&#xff0c;以及企业与AI智能体的结合&#xff0c;文章中我会列举自己在企业中Agent实…

列表标签(无序列表、有序列表)

无序列表 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…

每天学点小知识之设计模式的艺术-策略模式

行为型模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解模板方法模式 模板方法模式是结构最简单的行为型设计模式&#xff0c;在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式&#xff0c;可以将一些复杂流程的实现步骤封装在一系列基…

AI开发学习之——PyTorch框架

PyTorch 简介 PyTorch &#xff08;Python torch&#xff09;是由 Facebook AI 研究团队开发的开源机器学习库&#xff0c;广泛应用于深度学习研究和生产。它以动态计算图和易用性著称&#xff0c;支持 GPU 加速计算&#xff0c;并提供丰富的工具和模块。 PyTorch的主要特点 …

SAP HCM insufficient authorization, no.skipped personnel 总结归纳

导读 权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限&#xff0c;结构化权限就是按照部门ID授权&#xff0c;颗粒度更细&#xff0c;对分工明细化的单位尤其重要&#xff0c;今天遇到的问题就是结构化权限的问题。 作者&#xff1a;vivi&#xff0c;来源&…

机器学习算法在网络安全中的实践

机器学习算法在网络安全中的实践 本文将深入探讨机器学习算法在网络安全领域的应用实践&#xff0c;包括基本概念、常见算法及其应用案例&#xff0c;从而帮助程序员更好地理解和应用这一领域的技术。"> 序言 网络安全一直是信息技术领域的重要议题&#xff0c;随着互联…

java-抽象类注意点

ChinesePerson 类 public class ChinesePerson extends Person{public ChinesePerson(){}public ChinesePerson(String name, int age){super(name, age);}Overridepublic void greet() {System.out.println("你好&#xff0c;我的名字叫" this.getName());} }Engl…