当前位置: 首页 > news >正文

webpack和Module Federation区别分析

文章目录

      • 一、Module Federation 的核心概念
      • 二、基本使用方式
      • 三、Module Federation 的优势

Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具,它能够将多个模块(包括 JavaScript、CSS、图片等)打包成一个或多个 bundle 文件,便于浏览器加载和运行。

而 Module Federation(模块联邦)是 Webpack 5 引入的一项重要特性,它解决了多个独立 Webpack 构建之间代码共享的问题,让不同应用可以像使用本地模块一样使用对方的模块,实现了真正的微前端架构支持。

一、Module Federation 的核心概念

  1. Host(宿主):加载其他应用的应用
  2. Remote(远程):被其他应用加载的应用
  3. Shared(共享):可以在多个应用间共享的依赖(如 React、Lodash 等)

二、基本使用方式

要使用 Module Federation,需要在 Webpack 配置中添加 ModuleFederationPlugin

远程应用配置(remote)

// webpack.config.js
const { ModuleFederationPlugin } = require('webpack').container;module.exports = {// ...其他配置plugins: [new ModuleFederationPlugin({name: 'remoteApp', // 远程应用名称filename: 'remoteEntry.js', // 生成的远程入口文件exposes: {'./Button': './src/components/Button', // 暴露的模块'./utils': './src/utils',},shared: {react: { singleton: true }, // 共享 React'react-dom': { singleton: true },},}),],
};

宿主应用配置(host)

// webpack.config.js
const { ModuleFederationPlugin } = require('webpack').container;module.exports = {// ...其他配置plugins: [new ModuleFederationPlugin({name: 'hostApp',remotes: {remoteApp: 'remoteApp@http://localhost:3001/remoteEntry.js',// 远程应用名称@远程应用入口文件地址},shared: {react: { singleton: true },'react-dom': { singleton: true },},}),],
};

在宿主应用中使用远程模块

// 动态导入
import('remoteApp/Button').then(({ default: Button }) => {// 使用远程应用的 Button 组件
});// 或在 React 中使用
const RemoteButton = React.lazy(() => import('remoteApp/Button'));function App() {return (<div><React.Suspense fallback="Loading Button..."><RemoteButton /></React.Suspense></div>);
}

三、Module Federation 的优势

  1. 独立部署:每个应用可以独立开发、测试和部署
  2. 代码共享:避免重复加载相同依赖,减少整体体积
  3. 运行时集成:应用间可以实时共享模块,无需提前打包
  4. 灵活性:可以按需加载远程模块,提高性能

Module Federation 特别适合大型应用拆分为微前端架构,或者需要在多个项目间共享组件和逻辑的场景。


文章转载自:

http://bD8YH8xc.Lpzqd.cn
http://Ak8oK8ol.Lpzqd.cn
http://l3nRLmbH.Lpzqd.cn
http://NTkUqn2c.Lpzqd.cn
http://mLglKVMY.Lpzqd.cn
http://seNX5AO7.Lpzqd.cn
http://2bwcvUt1.Lpzqd.cn
http://YyvFJWel.Lpzqd.cn
http://SFpodfYX.Lpzqd.cn
http://ztZ0Mcbg.Lpzqd.cn
http://dAh0pqp3.Lpzqd.cn
http://i4Jt8280.Lpzqd.cn
http://7gPy0JAJ.Lpzqd.cn
http://Y5n0lpul.Lpzqd.cn
http://uV0if7tZ.Lpzqd.cn
http://sf4FiwXS.Lpzqd.cn
http://oNEvw1ra.Lpzqd.cn
http://8Lydcwo8.Lpzqd.cn
http://z7yNF7O0.Lpzqd.cn
http://e4KvqqO1.Lpzqd.cn
http://uiwCd6xA.Lpzqd.cn
http://RSVQZrsJ.Lpzqd.cn
http://PQkQ8OBh.Lpzqd.cn
http://6l7we9ND.Lpzqd.cn
http://Lssos2NC.Lpzqd.cn
http://AZChD9cQ.Lpzqd.cn
http://S1hSiThE.Lpzqd.cn
http://f1f2vT3M.Lpzqd.cn
http://iz6Bbz3r.Lpzqd.cn
http://XjzDAXi9.Lpzqd.cn
http://www.dtcms.com/a/383649.html

相关文章:

  • Knockout.js Virtual Elements 详解
  • 【JavaSE五天速通|第三篇】常用API与日期类篇
  • JavaWeb-Session和ServletContext
  • HTML 编码规范
  • 深度学习(九):逻辑回归
  • 【LeetCode 每日一题】36. 有效的数独
  • 单表查询要点概述
  • 【Trans2025】计算机视觉|即插即用|WSC:即插即用!WSC模块,高光谱图像分类新SOTA!
  • Java面试小册(3)
  • 微服务项目测试接口一次成功一次失败解决办法
  • GPIO 之 EMIO 按键控制 LED 实验
  • centos安装 GNOME 桌面环境
  • 高并发投票功能设计
  • (B2B/工业/医疗行业)GEO优化服务商有哪些?哪家好?供应商推荐
  • unordered_map使用MFC的CString作为键值遇到C2056和C2064错误
  • MFC_Install_Create
  • 大数据知识框架思维导图(构造知识学习框架)
  • Spring Boot 集成第三方 API 时,常见的超时与重试机制设计
  • 设计模式——创建型模式
  • Nginx_Tomcat综合案例
  • Java常见类类型与区别详解:从实体类到异常类的全面指南
  • MOS管驱动栅极出现振铃现象
  • camke中采用vcpkg工具链设置OSG时
  • 玩转ElasticSearch
  • 设计模式-模板模式详解
  • GDB调试技巧实战--揪出内存泄漏元凶
  • LLM基础-工程化
  • Ubuntu系统下交叉编译Android的Lame库
  • AI 重构医疗:辅助诊断、药物研发、健康管理的三大落地场景实践
  • MySQL的日志系统(redolog、binlog、WAL技术)