Angular微前端架構:Module Federation + ngx-build-plus (Webpack)

????????以下是一個完整的 Angular 微前端示例,其中使用的是?Module Federation 和 npx-build-plus?實現了主應用(Shell)與子應用(Remote)的集成。

🛠? 項目結構

angular-mf/
├── shell-app/       # 主應用(Shell)
├── remote-app/      # 子應用(Remote)
├── angular.json     # Angular CLI 配置
└── package.json     # 項目依賴

1?? 安裝依賴

首先,確保你已安裝 npx-build-plus:

ng add ngx-build-plus

然后,安裝?@angular-architects/module-federation:

npm install @angular-architects/module-federation --save-dev

2?? 配置 Remote 應用(子應用)

在remote-app/webpack.config.js?中,配置ModuleFederationPlugin:

const { ModuleFederationPlugin } = require('webpack').container;module.exports = {output: {uniqueName: 'remoteApp',publicPath: 'auto',},plugins: [new ModuleFederationPlugin({name: 'remoteApp',filename: 'remoteEntry.js',exposes: {'./RemoteModule': './src/app/remote/remote.module.ts',},shared: {'@angular/core': { singleton: true, strictVersion: true },'@angular/common': { singleton: true, strictVersion: true },'@angular/router': { singleton: true, strictVersion: true },},}),],
};

3?? 配置 Shell 應用(主應用)

在 shell-app/webpack.config.js?中,配置ModuleFederationPlugin:

const { ModuleFederationPlugin } = require('webpack').container;module.exports = {output: {uniqueName: 'shellApp',},plugins: [new ModuleFederationPlugin({name: 'shellApp',remotes: {remoteApp: 'remoteApp@http://localhost:4201/remoteEntry.js',},shared: {'@angular/core': { singleton: true, strictVersion: true },'@angular/common': { singleton: true, strictVersion: true },'@angular/router': { singleton: true, strictVersion: true },},}),],
};

4?? 配置 Angular.json File +?Angular 路由

????????angular.json文件配置如下:angular.json 配置的關鍵部分是如何集成 npx-build-plus 以支持 Webpack Module Federation。

? angular.json 配置說明

🧭 關鍵修改目標

  1. 使用 npx-build-plus 替代默認@angular-devkit/build-angular:browser

  2. 添加extraWebpackConfig?指向自定義的?Webpack 配置文件

  3. 配置輸出格式(如 umdModules(非必須)、outputPath)

📁 angular.json 配置片段

{"projects": {"shell-app": {"architect": {"build": {"builder": "ngx-build-plus:browser","options": {"outputPath": "dist/shell-app","index": "src/index.html","main": "src/main.ts","polyfills": "src/polyfills.ts","tsConfig": "tsconfig.app.json","aot": true,"assets": ["src/favicon.ico", "src/assets"],"styles": ["src/styles.scss"],"scripts": [],"extraWebpackConfig": "webpack.config.js","umdModuleIds": {"@angular/core": "ng.core","@angular/common": "ng.common","@angular/router": "ng.router"}},"configurations": {"production": {"optimization": true,"outputHashing": "all","sourceMap": false,"extractCss": true,"namedChunks": false,"fileReplacements": [{"replace": "src/environments/environment.ts","with": "src/environments/environment.prod.ts"}]}}},"serve": {"builder": "ngx-build-plus:dev-server","options": {"browserTarget": "shell-app:build"},"configurations": {"production": {"browserTarget": "shell-app:build:production"}}}}}}
}

📦 額外建議

  • 確保webpack.config.js?文件存在于根目錄或指定位置。

  • 如果你有多個環境配置(如 staging/test),也可以擴展configurations?。

  • 如果你使用webpack.prod.config.js,可以在生產配置中加上extraWebpackConfig?覆蓋。

在shell-app/src/app/app-routes.ts?中,配置動態加載 Remote 模塊:

import { Routes } from '@angular/router';
import { loadRemoteModule } from '@angular-architects/module-federation';export const routes: Routes = [{path: 'remote',loadChildren: () =>loadRemoteModule({remoteName: 'remoteApp',exposedModule: './RemoteModule',}).then((m) => m.RemoteModule),},
];

5?? 啟動應用

分別啟動 Remote 和 Shell 應用:

# 啟動 Remote 應用
cd remote-app
ng serve --port 4201# 啟動 Shell 應用
cd shell-app
ng serve --port 4200

訪問 http://localhost:4200/remote 即可加載 Remote 模塊。


? 總結

  • 使用 Webpack 5 的 ModuleFederationPlugin 實現了主應用與子應用的動態模塊共享。

  • 通過npx-build-plus擴展了 Angular CLI 的構建功能,支持自定義 Webpack 配置。

  • 采用@angular-architects/module-federation提供的 loadRemoteModule實現了 Angular 路由的懶加載遠程模塊。

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

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

相關文章

ESP32 I2S音頻總線學習筆記(四): INMP441采集音頻并實時播放

簡介 前面兩期文章我們介紹了I2S的讀取和寫入,一個是通過INMP441麥克風模塊采集音頻,一個是通過PCM5102A模塊播放音頻,那如果我們將兩者結合起來,將麥克風采集到的音頻通過PCM5102A播放,是不是就可以做一個擴音器了呢…

馮諾依曼架構是什么?

馮諾依曼架構是什么? 馮諾依曼架構(Von Neumann Architecture)是現代計算機的基礎設計框架,由數學家約翰馮諾依曼(John von Neumann)及其團隊在1945年提出。其核心思想是通過統一存儲程序與數據&#xff0…

【持續更新】linux網絡編程試題

問題1 請簡要說明TCP/IP協議棧的四層結構,并分別舉出每一層出現的典型協議或應用。 答案 應用層:ping,telnet,dns 傳輸層:tcp,udp 網絡層:ip,icmp 數據鏈路層:arp,rarp 問題2 下列協議或應用分別屬于TCP/IP協議…

橢圓曲線密碼學(ECC)

一、ECC算法概述 橢圓曲線密碼學(Elliptic Curve Cryptography)是基于橢圓曲線數學理論的公鑰密碼系統,由Neal Koblitz和Victor Miller在1985年獨立提出。相比RSA,ECC在相同安全強度下密鑰更短(256位ECC ≈ 3072位RSA…

【JVM】- 內存結構

引言 JVM:Java Virtual Machine 定義:Java虛擬機,Java二進制字節碼的運行環境好處: 一次編寫,到處運行自動內存管理,垃圾回收的功能數組下標越界檢查(會拋異常,不會覆蓋到其他代碼…

React 基礎入門筆記

一、JSX語法規則 1. 定義虛擬DOM時,不要寫引號 2.標簽中混入JS表達式時要用 {} (1).JS表達式與JS語句(代碼)的區別 (2).使用案例 3.樣式的類名指定不要用class,要用className 4.內…

Linux鏈表操作全解析

Linux C語言鏈表深度解析與實戰技巧 一、鏈表基礎概念與內核鏈表優勢1.1 為什么使用鏈表?1.2 Linux 內核鏈表與用戶態鏈表的區別 二、內核鏈表結構與宏解析常用宏/函數 三、內核鏈表的優點四、用戶態鏈表示例五、雙向循環鏈表在內核中的實現優勢5.1 插入效率5.2 安全…

SQL進階之旅 Day 19:統計信息與優化器提示

【SQL進階之旅 Day 19】統計信息與優化器提示 文章簡述 在數據庫性能調優中,統計信息和優化器提示是兩個至關重要的工具。統計信息幫助數據庫優化器評估查詢成本并選擇最佳執行計劃,而優化器提示則允許開發人員對優化器的行為進行微調。本文深入探討了…

安寶特方案丨船舶智造AR+AI+作業標準化管理系統解決方案(維保)

船舶維保管理現狀:設備維保主要由維修人員負責,根據設備運行狀況和維護計劃進行定期保養和故障維修。維修人員憑借經驗判斷設備故障原因,制定維修方案。 一、痛點與需求 1 Arbigtec 人工經驗限制維修效率: 復雜設備故障的診斷和…

MFC內存泄露

1、泄露代碼示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 獲取 Ribbon Bar 指針// 創建自定義按鈕CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…

基于區塊鏈的供應鏈溯源系統:構建與實踐

前言 在當今全球化的經濟環境中,供應鏈的復雜性不斷增加,商品從原材料采購到最終交付給消費者的過程涉及多個環節和眾多參與者。如何確保供應鏈的透明度、可追溯性和安全性,成為企業和消費者關注的焦點。區塊鏈技術以其去中心化、不可篡改和透…

Web攻防-SQL注入數據格式參數類型JSONXML編碼加密符號閉合

知識點: 1、Web攻防-SQL注入-參數類型&參數格式 2、Web攻防-SQL注入-XML&JSON&BASE64等 3、Web攻防-SQL注入-數字字符搜索等符號繞過 案例說明: 在應用中,存在參數值為數字,字符時,符號的介入&#xff0c…

探秘鴻蒙 HarmonyOS NEXT:實戰用 CodeGenie 構建鴻蒙應用頁面

在開發鴻蒙應用時,你是否也曾為一個頁面的布局反復調整?是否還在為查 API、寫模板代碼而浪費大量時間?今天帶大家實戰體驗一下鴻蒙官方的 AI 編程助手——CodeGenie(代碼精靈) ,如何從 0 到 1 快速構建一個…

DBAPI如何優雅的獲取單條數據

API如何優雅的獲取單條數據 案例一 對于查詢類API,查詢的是單條數據,比如根據主鍵ID查詢用戶信息,sql如下: select id, name, age from user where id #{id}API默認返回的數據格式是多條的,如下: {&qu…

使用Whisper本地部署實現香港版粵語+英語混合語音轉文字方案

今天要一個非常好的朋友有個工作,就是要把醫院醫生診斷的說話記錄轉成文字,之前都是她本人一句一句的聽,然后記錄下來的,我想通過ai 來解決這個問題。 她的需求如下: 不能把數據傳到網上,隱私問題所以需要…

案例分享--汽車制動卡鉗DIC測量

制動系統是汽車的主要組成部分,是汽車的主要安全部件之一。隨著車輛性能的不斷提高,車速不斷提升,對車輛的制動系統也隨之提出了更高要求,因此了解車輛制動系統中每個部件的動態行為成為了制動系統優化的主要途徑,同時…

保姆級教程:在無網絡無顯卡的Windows電腦的vscode本地部署deepseek

文章目錄 1 前言2 部署流程2.1 準備工作2.2 Ollama2.2.1 使用有網絡的電腦下載Ollama2.2.2 安裝Ollama(有網絡的電腦)2.2.3 安裝Ollama(無網絡的電腦)2.2.4 安裝驗證2.2.5 修改大模型安裝位置2.2.6 下載Deepseek模型 2.3 將deepse…

【Redis技術進階之路】「原理分析系列開篇」分析客戶端和服務端網絡誦信交互實現(服務端執行命令請求的過程 - 初始化服務器)

服務端執行命令請求的過程 【專欄簡介】【技術大綱】【專欄目標】【目標人群】1. Redis愛好者與社區成員2. 后端開發和系統架構師3. 計算機專業的本科生及研究生 初始化服務器1. 初始化服務器狀態結構初始化RedisServer變量 2. 加載相關系統配置和用戶配置參數定制化配置參數案…

VB.net復制Ntag213卡寫入UID

本示例使用的發卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、讀取舊Ntag卡的UID和數據 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click輕松讀卡技術支持:網站:Dim i, j As IntegerDim cardidhex, …

SQL SERVER 數據庫遷移的三種方法!

要將SQL Server從研發環境的把數據庫結構(不含數據)遷移至生產環境,可通過以下幾種方法實現。以下是具體操作步驟及適用場景: ?? 一、使用SSMS圖形界面生成結構腳本(推薦新手) 通過SQL Server Management Studio的生成腳本向導,僅導出數據庫架構: ??連接測試庫??…