中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于webpack5聯邦模塊的簡介

發布時間:2020-07-09 11:00:21 來源:億速云 閱讀:343 作者:清晨 欄目:開發技術

這篇文章主要介紹關于webpack5聯邦模塊的簡介,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

特性

webpack 5引入聯邦模式是為了 更好的共享代碼 。 在此之前,我們共享代碼一般用npm發包來解決。 npm發包需要經歷構建,發布,引用三階段,而聯邦模塊可以 直接引用其他應用代碼 ,實現熱插拔效果。對比npm的方式更加簡潔、快速、方便。

使用方法

  • 引入遠程js
  • webpack配置
  • 模塊使用

引入遠程JS

假設我們有app1,app2兩個應用,端口分別為3001,3002。 app1應用要想引用app2里面的js,直接用script標簽即可。

例如app1應用里面index.html引入app2應用remoteEntry.js

<head>
  <script src="http://localhost:3002/remoteEntry.js"></script>
 </head>

webpack配置

app1的webpack配置:

const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
  
module.exports = {
 //....
 plugins: [
  new ModuleFederationPlugin({
   name: "app1",
   library: { type: "var", name: "app1" },
   remotes: {
    app2: "app2",
   },
   shared: ["react", "react-dom"],
  }),
 ],
};

對于app2的webpack配置如下

plugins: [
  new ModuleFederationPlugin({
   name: "app2",
   library: { type: "var", name: "app2" },
   filename: "remoteEntry.js",
   exposes: {
    "./Button": "./src/Button",
   },
   shared: ["react", "react-dom"],
  })
 ],

可以看到app1和app2的配置基本相同,除了app2 多了filename和exposes以外。

參數解釋

  • name 應用名,全局唯一,不可沖突。
  • library 。UMD標準導出,和name保持一致即可。
  • remotes 聲明需要引用的遠程應用。如上圖app1配置了需要的遠程應用app2.
  • filename 遠程應用時被其他應用引入的js文件名稱。對應上面的 remoteEntry.js
  • exposes 遠程應用暴露出的模塊名。
  • shared 依賴的包。
    • 如果配置了這個屬性。webpack在加載的時候會先判斷本地應用是否存在對應的包,如果不存在,則加載遠程應用的依賴包。
    • 以app2來說,因為它是一個遠程應用,配置了["react", "react-dom"] ,而它被app1所消費,所以webpack會先查找app1是否存在這兩個包,如果不存在就使用app2自帶包。 app1里面同樣申明了這兩個參數,因為app1是本地應用,所以會直接用app1的依賴。
         

模塊使用

對于app1/App.js代碼使用app2的組件,代碼如下:

import React from "react";

const RemoteButton = React.lazy(() => import("app2/Button"));

const App = () => (
 <div>
  <h2>Basic Host-Remote</h2>
  <h3>App 1</h3>
  <React.Suspense fallback="Loading Button">
   <RemoteButton />
  </React.Suspense>
 </div>
);

export default App;

具體這一行

const RemoteButton = React.lazy(() => import("app2/Button")); 

使用方式為:import('遠程應用名/暴露的模塊名'),對應webpack配置里面的name和expose。使用方式和引入一個普通異步組件無差別。

適用范圍

由于share這個屬性的存在,所以本地應用和遠程應用的技術棧和版本必須兼容,統一用同一套。比如js用react,css用sass等。

聯邦模塊和微前端的關系:因為expose這個屬性即可以暴露單個組件,也可以把整個應用暴露出去。同時由于share屬性存在,技術棧必須一致。所以加上路由,可以用來實現single-spa這種模式的微前端。

使用場景:新建專門的組件應用服務來管理所有組件和應用,其他業務層只需要根據自己業務所需載入對應的組件和功能模塊即可。模塊管理統一管理,代碼質量高,搭建速度快。特別適用矩陣app,或者可視化頁面搭建等場景。

關于webpack5聯邦模塊的簡介

例子的 github地址

以上是關于webpack5聯邦模塊的簡介的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天柱县| 兴安盟| 南涧| 上饶县| 济阳县| 江山市| 新密市| 治县。| 大港区| 齐河县| 丰镇市| 赫章县| 南宫市| 灌阳县| 清水县| 锡林郭勒盟| 衡阳市| 中西区| 榆社县| 巴林左旗| 泽库县| 东丰县| 固镇县| 理塘县| 阿合奇县| 新巴尔虎右旗| 邓州市| 射阳县| 连云港市| 宿迁市| 青海省| 凭祥市| 方城县| 阿尔山市| 长治市| 恭城| 汕尾市| 鄂托克旗| 定西市| 富阳市| 奉节县|