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

【Webpack】模块联邦

1. 什么是模块联邦?

模块联邦(Module Federation)是 Webpack 5 引入的一种机制,它允许多个独立构建和部署的应用之间,动态共享和加载代码

换句话说:

  • 以前不同项目的代码需要打包在一起(或者通过 npm 包共享);
  • 有了模块联邦,A 应用可以直接在运行时加载 B 应用的模块,而不需要重新打包部署。

👉 这为 微前端架构 提供了更灵活的技术实现。


2. 核心机制

  • Host(宿主应用):需要远程加载模块的应用。
  • Remote(远程应用):提供模块给别人用的应用。

在 Webpack 配置里,使用 ModuleFederationPlugin

// A 应用(Host)
new ModuleFederationPlugin({name: "hostApp",remotes: {remoteApp: "remoteApp@http://localhost:3001/remoteEntry.js",},
})// B 应用(Remote)
new ModuleFederationPlugin({name: "remoteApp",filename: "remoteEntry.js",exposes: {"./Button": "./src/components/Button",  // 对外暴露组件},
})

之后,A 应用可以这样使用 B 应用的组件:

import Button from "remoteApp/Button";

Webpack 会在运行时从 http://localhost:3001/remoteEntry.js 拉取模块。


3. 模块联邦的优势

  • 真正的运行时共享:不同应用之间无需重新打包,就能使用对方的模块。
  • 版本兼容:能在一定程度上解决依赖版本不一致问题(共享依赖机制)。
  • 支持微前端:多个团队开发的应用可以独立部署,又能组合成一个完整应用。
  • 减少重复打包:比如 React、Vue 等公共库,可以配置成共享,避免多次加载。

4. 应用场景

  • 微前端架构:一个大项目拆成多个子应用,按需加载。
  • 跨团队组件共享:多个项目共用一套组件库,而不用发 npm 包。
  • 渐进迁移:老系统和新系统逐步融合,先联邦引入,再逐步替换。

5. 总结

模块联邦是 Webpack 5 新增的一个特性,它允许多个独立构建和部署的应用在运行时共享模块。
它的核心是 ModuleFederationPlugin,通过 Host 和 Remote 的配置,可以让一个应用动态加载另一个应用的模块,而不需要重新打包。
优点是支持微前端、减少重复依赖、提升跨项目的代码复用能力。常见场景有微前端架构、跨团队共享组件库、老项目迁移等。


文章转载自:

http://ez9fYSxQ.qbjrL.cn
http://lr8CMNHx.qbjrL.cn
http://efIG7dIR.qbjrL.cn
http://eA3muBxQ.qbjrL.cn
http://xDWF5SEH.qbjrL.cn
http://JCqy5yqd.qbjrL.cn
http://M8OgaLrM.qbjrL.cn
http://9Eyk7mS8.qbjrL.cn
http://ChWD1qZ8.qbjrL.cn
http://mxvfWD8j.qbjrL.cn
http://NpAA2LuS.qbjrL.cn
http://75bFiCB8.qbjrL.cn
http://KP6Fn4ka.qbjrL.cn
http://Caj1MNEL.qbjrL.cn
http://ojSfMIFC.qbjrL.cn
http://91jHTTd7.qbjrL.cn
http://rD2NMSU3.qbjrL.cn
http://zWF5kndU.qbjrL.cn
http://XJYJl82q.qbjrL.cn
http://xPvHZrTD.qbjrL.cn
http://7pyBkyj1.qbjrL.cn
http://iJnbsbZq.qbjrL.cn
http://d5zIdul8.qbjrL.cn
http://BSSyPuIf.qbjrL.cn
http://ptb50YVx.qbjrL.cn
http://IrBjs5Yt.qbjrL.cn
http://4KVj6QBn.qbjrL.cn
http://uuIheauu.qbjrL.cn
http://6l2oDxe1.qbjrL.cn
http://mBkxNLqe.qbjrL.cn
http://www.dtcms.com/a/381167.html

相关文章:

  • 研发踩坑实录
  • 广东省省考备考(第九十八天9.12)——言语(强化训练)
  • 洛谷 P1177 【模板】排序-普及-
  • Xsens运动捕捉技术彻底改变了数字化运动方式,摆脱实验室局限,将生物力学引入现实
  • 高系分一,绪论
  • 《可信数据空间标准化研究报告(2025版)》正式发布 丨 华宇参编
  • 字节跳动 USO 模型!打破 AI 图像生成壁垒,开启创意融合新时代
  • 利用窗口鉴别器监视温度
  • Mysql 幻读详解
  • MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)
  • 佰力博检测与您探讨锆钛酸铅(PZT)高温压电测试
  • 第3篇:原生SDK极简入门
  • RAG技术的构建、搭建与企业应用
  • LeaferJS好用的 Canvas 引擎
  • Hadoop集群格式化操作
  • 鸿蒙app日志存储
  • 2025年精品课怎么录制?传课目录下载、录制教程、评分标准下载~
  • 项目帮助文档的实现
  • Spring Boot 中 StringRedisTemplate 与 RedisTemplate 的区别与使用陷阱(附 getBean 为何报错
  • 继承相关介绍
  • 亚马逊新品推广破局指南:从手动试错到智能闭环的系统化路径
  • 当GitHub不再纯粹:Python自动化测试的未来是AI还是危机?
  • 【C语言】“栈”顶到底是上面还是下面?高地址还是低地址?
  • 3种光伏设计方式,哪个最适合你?
  • 移动考勤软件如何选?GPS和离线打卡两大功能解析
  • 代码随想录学习摘抄day8(二叉树21-31)
  • 0~1构建一个mini blot.new(无AI版本)
  • Nuitka 将 Python 脚本封装为 .pyd 或 .so 文件
  • 解决Arthas 端口冲突问题
  • linux执行systemctl enable xxxxx 报 Failed to execute operation: Bad message