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

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

        以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下:

前言

Module Federation 的Webpack.config.js核心配置包括:

  1. name + filename(定义应用标识)

  2. remotes(引用远程模块)

  3. exposes(暴露本地模块)

  4. shared(共享依赖,优化加载)

 Host应用中:

// host/webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { ModuleFederationPlugin } = require('webpack').container;
const webpack = require('webpack');module.exports = {// 📦 模式:development(开发)或 production(生产)mode: 'development',// 📂 构建入口:Webpack 构建从这里开始entry: './src/index.js',// 📤 构建输出output: {// 构建目录(dist 文件夹)path: path.resolve(__dirname, 'dist'),// 输出 JS 文件名(可以使用哈希做缓存)filename: '[name].[contenthash].js',// 所有静态资源的基础路径,必须指向 devServer 地址(用于加载 remote)publicPath: 'http://localhost:3000/',// 每次构建自动清空 dist 文件夹clean: true,},// 🌐 Dev Server 本地开发服务器配置devServer: {port: 3000, // 主机端口static: {directory: path.join(__dirname, 'dist'), // 静态资源路径},compress: true, // 启用 gzip 压缩hot: true, // 启用模块热替换historyApiFallback: true, // SPA 路由兼容open: true, // 启动时自动打开浏览器client: {overlay: true, // 编译错误以浮层形式显示},},// 📚 Source Map(方便调试)devtool: 'eval-source-map',// 📦 模块加载规则module: {rules: [{test: /\.js$/, // 匹配 JS 文件exclude: /node_modules/,use: 'babel-loader', // 使用 Babel 编译},{test: /\.css$/, // 匹配 CSS 文件use: ['style-loader', 'css-loader'], // 加载样式},{test: /\.(png|jpg|gif|svg)$/, // 图片加载type: 'asset/resource', // 转成文件资源},],},// 🔧 模块解析配置resolve: {extensions: ['.js', '.jsx', '.json'], // 自动补全扩展名alias: {'@': path.resolve(__dirname, 'src'), // 设置路径别名},modules: [path.resolve(__dirname, 'src'), 'node_modules'], // 优先搜索路径},// 🎯 性能提示控制performance: {hints: false, // 不提示 bundle 过大},// ⚙️ 缓存配置cache: {type: 'filesystem', // 文件系统缓存(构建更快)},// 💡 Webpack 插件plugins: [// 自动生成 HTML 页面,并注入输出的 JS 脚本new HtmlWebpackPlugin({template: './public/index.html',favicon: './public/favicon.ico',}),// 允许定义全局变量(编译时替换)new webpack.DefinePlugin({'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),}),// 🌐 模块联邦核心插件new ModuleFederationPlugin({// 当前应用唯一标识name: 'host',// 使用远程模块的声明remotes: {remote1: 'remote1@http://localhost:3001/remoteEntry.js',remote2: 'remote2@http://localhost:3002/remoteEntry.js',},// 如果你要暴露本地组件(可选)exposes: {'./LocalComponent': './src/components/LocalComponent.js',},// 共享模块(版本控制、避免重复加载)shared: {react: {// 必须的库名称requiredVersion: '^17.0.0',// 是否单例模式(防止重复加载)singleton: true,// 是否立即加载(false为异步)eager: true,// 允许的版本范围version: '17.0.2',// 严格版本检查strictVersion: false,// 共享作用域名称shareScope: 'default'}},}),],// 🧠 优化配置(可选)optimization: {// 代码分割:把 node_modules 拆出来splitChunks: {chunks: 'all', // 所有模块分割},runtimeChunk: 'single', // 单独抽出运行时代码moduleIds: 'deterministic', // 稳定 moduleId,有利于长期缓存},// 🌍 目标环境(默认是 web)target: 'web',
};

Remote 应用的配置:

new ModuleFederationPlugin({name: 'remote1',filename: 'remoteEntry.js', //定义远程入口文件的名称,默认值: remoteEntry.jslibrary: { type: 'var', name: 'app1' },  //定义如何暴露模块exposes: {'./Button': './src/components/Button.js',},shared: {lodash: {singleton: true,import: 'lodash', // 精确指定导入包名eager: true, // 提前加载,避免延迟加载风险},react: { singleton: true, requiredVersion: '^18.2.0' },},
});

跟host应用的稍微差别,主要体现在下面两个属性:

  • filename(字符串)

    • 定义远程入口文件的名称

    • 默认值: remoteEntry.js

    • 示例: filename:remoteEntry.js 

    • 注意区分这个属性与下面表格中的output.filename,output.filename的全称是module.output.filename,但是这个属性的全称是module.filename

  • library (对象)

    • 定义如何暴露模块

    • 常用配置:

      library: {type: 'var',name: 'app1'
      }
    • type:暴露类型,可选值有varmoduleassignthiswindowselfglobalcommonjscommonjs2amdamd-requireumdumd2jsonp

    • name:暴露的全局变量名

总结表:

  • 常用属性总结:
模块属性含义
entry./src/index.js应用入口文件
output.pathdist构建输出目录
output.filenamebundle.js输出文件名
output.publicPathCDN 或本地路径用于动态加载 remote
devServer.port3000本地开发端口
module.rulesbabel-loader, css-loader, asset加载规则
pluginsHtmlWebpackPlugin, ModuleFederationPlugin插件系统
ModuleFederationPlugin.name'host'当前模块名
ModuleFederationPlugin.remotes远程模块映射remote 应用位置
ModuleFederationPlugin.exposes本地暴露模块可供 remote 使用
ModuleFederationPlugin.shared共享模块避免重复打包
optimization.splitChunks公共依赖提取减少重复代码
resolve.alias路径别名简化导入
cache.type'filesystem'启用构建缓存
performance.hints'false'忽略性能提示
  • 共享模块属性总结:
属性名类型说明
singletonboolean是否只加载一份模块(如 React 必须 true
strictVersionboolean是否强制匹配 requiredVersion,严格匹配版本
requiredVersionstring版本约束,所期望的依赖版本号(SemVer),要求的版本范围
versionstring实际运行时模块的版本(建议提供)
eagerboolean是否在启动时立即加载,默认懒加载(默认 false,建议 false)
import`stringfalse`
includeSecondariesboolean是否包含子模块(如 react/jsx-runtime)
shareScopestring指定共享作用域(默认为 default)

相关文章:

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块&#xff0…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时,需要使用外部低速晶振...

Unity中的transform.up

2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...