淺談 Webpack5 模塊聯邦

概念

Webpack 模塊聯邦是一種先進的代碼共享技術,它允許在多個獨立構建的 Web 應用程序之間共享代碼,而無需將這些代碼提前發布到 npm 倉庫或其他中央存儲。

這項技術特別適用于微前端架構,因為它能讓各個前端團隊獨立開發、部署自己的應用,同時還能無縫共享組件、庫或功能模塊。

通俗點說就是在微前端架構中每個應用都是獨立的,獨立開發,獨立部署,在開發過程中避免不了有些模塊是重復使用的,如何把這些重復的模塊利用起來,一般情況下會通過 npm 進行安裝或者相關代碼重復編寫,這樣做不好的地方就是代碼冗余,因為是微前端,會出現很多重復的內容,重復進行編寫,開發效率降低,而模塊聯邦就很好的解決了這些問題。

好處

動態加載:模塊可以在運行時動態加載,僅在需要時加載相關功能模塊,減少初始加載體積,加速頁面加載。

代碼重用:可以共享通用的庫和組件,避免重復代碼,優化代碼復用率。

版本管理:各個模塊可以獨立升級和版本化,不會因某個模塊的更新影響整個應用。

性能優化:共享庫避免重復包含,打包體積更小,網絡傳輸更快,提高應用性能。

關鍵概念

主容器與遠程容器

  • 主容器(Host):負責加載其他應用模塊的應用,消費模塊的容器。
  • 遠程容器(Remote):提供模塊供其他應用加載的應用,提供模塊的容器。

動態加載

模塊聯邦允許應用在運行時動態加載其他應用的模塊,而不是在構建時靜態合并。這使得各個應用可以獨立構建和部署,運行時按需加載所需的模塊。

舉例說明一下

假設場景

我們有兩個獨立的項目:app1app2

app1 想要復用 app2 中的一個名為 CoolButton 的組件。

創建主容器應用(Host)

首先,安裝 Webpack 5 和相關插件:

npm install webpack webpack-cli html-webpack-plugin --save-dev

設置?app2?作為共享模塊的提供者(遠程容器)

首先,在 app2webpack.config.js 文件中,我們需要配置 app2 以共享 CoolButton 組件。

// app2/webpack.config.js
module.exports = {output: {publicPath: 'http://localhost:3002/', // 公共路徑,確保在不同域下也能正確加載uniqueName: 'app2', // 確保在聯邦中的唯一命名},plugins: [new webpack.container.ModuleFederationPlugin({name: 'app2',filename: 'remoteEntry.js',exposes: {'./CoolButton': './src/components/CoolButton', // 共享 CoolButton 組件},}),],
};

在?app1?中消費?app2?提供的?CoolButton?組件(主容器)

接下來,在 app1 中,我們需要配置 app1 以消費來自 app2CoolButton

// app1/webpack.config.js
module.exports = {plugins: [new webpack.container.ModuleFederationPlugin({name: 'app1',remotes: {app2: 'app2@http://localhost:3002/remoteEntry.js', // 指定app2的遠程入口},shared: {react: { singleton: true },'react-dom': { singleton: true },},}),],
};

然后,在 app1 的代碼中,我們可以像導入本地模塊一樣導入 app2CoolButton

// app1/src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import CoolButton from 'app2/CoolButton';ReactDOM.render(<React.StrictMode><div><h1>Welcome to App1</h1><CoolButton label="Click me!" /></div></React.StrictMode>,document.getElementById('root')
);

總結

以上對模塊聯邦進行簡單的介紹,當然實際使用當中還要根據各自的項目進行配置,大家可以查看官方文檔進行更深一步了解Webpack 5 發布 (2020-10-10) | webpack 中文文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44704.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44704.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

政安晨:【Keras機器學習示例演繹】(五十二)—— 使用門控殘差和變量選擇網絡進行分類

目錄 簡介 數據集 安裝準備 數據準備 定義數據集元數據 創建用于訓練和評估的 tf.data.Dataset 創建模型輸入 對輸入特征進行編碼 實施門控線性單元 實施門控余留網絡 實施變量選擇網絡 創建門控殘差和變量選擇網絡模型 編譯、訓練和評估模型 政安晨的個人主頁&am…

OpenCV和PIL進行前景提取

摘要 在圖像處理和分析中&#xff0c;前景提取是一項關鍵技術&#xff0c;尤其是在計算機視覺和模式識別領域。本文介紹了一種結合OpenCV和PIL庫的方法&#xff0c;實現在批量處理圖像時有效提取前景并保留原始圖像的EXIF數據。具體步驟包括從指定文件夾中讀取圖像&#xff0c…

【鏈表】- 環形鏈表 II

1. 對應力扣題目連接 環形鏈表 II 2. 實現思路 a. 鏈表圖示&#xff1a; b. 檢測鏈表中是否存在環&#xff0c;即&#xff1a;會相交 思路&#xff1a; 使用 Floyd 的龜兔賽跑算法&#xff08;Floyd’s Tortoise and Hare algorithm&#xff09;&#xff0c;即快慢指針法&…

二分法求函數的零點 信友隊

題目ID&#xff1a;15713 必做題 100分 時間限制: 1000ms 空間限制: 65536kB 題目描述 有函數&#xff1a;f(x) 已知f(1.5) > 0&#xff0c;f(2.4) < 0 且方程 f(x) 0 在區間 [1.5,2.4] 有且只有一個根&#xff0c;請用二分法求出該根。 輸入格式 &#xff08;無…

Mysql查詢近半年每個月有多少天

Mysql 查詢近6個月每個月有多少天&#xff1a; SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MONTH ), %Y-%m) as months,DAY(LAST_DAY(CONCAT(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MO…

【區塊鏈+跨境服務】跨境出口電商溯源 | FISCO BCOS應用案例

當前跨境出口電商已成為帶動我國外貿發展的中堅力量&#xff0c;尤其疫情特殊時期&#xff0c;成為推動經濟增長的一個重要組成 部分。但是跨境出口電商流程長、環節多&#xff0c;且需輾轉于不同的服務商以及國家之間&#xff0c;監管與定位也相對困難&#xff0c;容 易出現諸…

兩段序列幀動畫播放,在ios機型上出現閃屏

使用場景&#xff1a;兩段序列幀動畫連接播放&#xff0c;先播放第一段播一次&#xff0c;再播放第二段&#xff0c;第二段循環播放&#xff0c;在ios機型上出現動畫閃動&#xff0c;播放不正常。 錯誤的寫法&#xff1a;把每一段序列幀動畫單獨寫在了定義的動畫里 .gacha-bg…

開源軟件項目的發展趨勢與參與經驗

目錄 前言1. 開源項目的發展現狀1.1 開源項目的快速增長1.2 企業對開源項目的重視 2. 開源社區的活躍度2.1 開源社區的多樣性2.2 社區活動的豐富性 3. 開源項目在技術創新中的作用3.1 促進技術的快速迭代3.2 提供靈活的解決方案 4. 參與開源項目的經驗和收獲4.1 如何選擇開源項…

從0-1搭建一個web項目(頁面布局詳解)詳解

本章分析頁面布局詳解詳解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 開源的后臺管理框架。在一定程度上節省您的開發效率。另外本項目還封裝了一些常用組件、hooks、指令、動態路由、按鈕級別權限控制等功能。感興趣的小伙伴可以訪問源碼點個贊 地…

【系統架構設計師】九、軟件工程(軟件開發生命周期|McCabe度量法|系統轉換|系統維護|凈室軟件工程|基于構件的軟件工程)

目錄 九、軟件開發生命周期和工具 十、McCabe度量法 十一、系統轉換 11.1 遺留系統 11.2 系統轉換 11.3 系統維護 十二、凈室軟件工程 十三、基于構件的軟件工程 13.1 構件特征 13.2 構件模型要素 13.3 CBSE過程 13.4 構件組裝 相關推薦 歷年真題練習 九、軟件開…

DOM 基本操作 - 事件基礎

theme: smartblue 一、事件概述 JavaScript使我們有能力創建動態頁面&#xff0c;而事件是可以被JavaScript偵測到的行為。 簡單理解: 觸發---響應機制。 網頁中的每個元素都可以產生某些可以觸發JavaScript的事件&#xff0c;例如&#xff0c;我們可以在用戶點擊某按鈕時產生一…

libvirt qemu添加新類型磁盤格式

目錄 前言 1 qemu部分 1.1 磁盤格式驅動創建 1.2 json文件創建數據結構對象&#xff1a; 2 libvirt部分&#xff1a; 2.1 對應關系設置 2.2參設向指令格式轉換 前言 qemu中有很多虛擬機磁盤格式&#xff0c;比如較為熟悉的qcow2&#xff0c;luks&#xff0c;r…

C語言文件操作技術詳解

C語言提供了一套強大的文件操作API&#xff0c;允許開發者進行文件讀寫、訪問和管理。本文將深入探討C語言文件操作的背后的技術&#xff0c;包括基本文件操作、文件讀寫以及文件權限和屬性。我們將通過詳細的解釋和實用的代碼案例來展示如何有效地使用這些技術。 第一部分&am…

C++ //練習 14.52 在下面的加法表達式中分別選用了哪個operator+?列出候選函數、可行函數及為每個可行函數的實參執行的類型轉換:

C Primer&#xff08;第5版&#xff09; 練習 14.52 練習 14.52 在下面的加法表達式中分別選用了哪個operator&#xff1f;列出候選函數、可行函數及為每個可行函數的實參執行的類型轉換&#xff1a; struct LongDouble{//用于演示的成員opeartor&#xff1b;在通常情況下是個…

自動駕駛技術的原理

自動駕駛汽車利用視覺識別功能來感知周圍環境并做出駕駛決策。以下是自動駕駛汽車如何利用視覺識別功能及其原理的詳細說明&#xff1a; ### 視覺識別在自動駕駛中的應用 1. **目標檢測&#xff08;Object Detection&#xff09;**&#xff1a;識別并定位道路上的其他車輛、行人…

【安全設備】EDR

一、什么是EDR EDR即集檢測、防御、運維功能于一體的主機安全及管理系統。EDR是一款集成了豐富的系統加固與防護、網絡加固與防護等功能的主機安全產品。 二、EDR的部署模式 EDR&#xff08;Endpoint Detection and Response&#xff0c;端點檢測和響應&#xff09;的部署方…

開源項目編譯harbor arm架構的包 —— 筑夢之路

GitHub - amy5200/harbor-arm64 先做個記錄&#xff0c;空了再驗證

矩陣分解及其在機器學習中的應用

陣分解是一種廣泛應用于數據挖掘和機器學習領域的技術&#xff0c;它通過將一個高維數據集分解為多個低維的數據集&#xff0c;以降低數據的復雜性、提高計算效率&#xff0c;并發現數據中的隱含結構。本文將詳細介紹矩陣分解的基本概念、主要方法及其在機器學習中的應用。 一、…

JWT總結

JWT&#xff08;JSON Web Tokens&#xff09;是一種用于在雙方之間安全傳輸信息的簡潔的、URL安全的令牌標準。以下是關于JWT的結構、作用、優點以及可能出現的問題的詳細解答&#xff1a; 一、JWT的結構 JWT的結構由三個部分組成&#xff0c;它們通過.&#xff08;點&#x…

fastadmin框架后臺列表固定第一行列表固定頭部

在列表中&#xff0c;如果列表字段很多&#xff0c;并且每頁數量很多&#xff0c;往下拉的時候就不好辨別數據是哪個字段的&#xff0c;對用戶造成不好的瀏覽體驗。 通過以下方法&#xff0c;可以實現將列表的第一行&#xff0c;也就是頭部&#xff0c;固定在第一行顯示&#…