微前端 - Module Federation使用完整示例

Angular 框架中

項目結構

main-app/src/app/app.module.tsapp.component.ts
micro-app/src/app/app.module.tsapp.component.ts

主應用配置

安裝必要依賴:

ng add @angular-architects/module-federation

修改 webpack.config.js

const { share, SharedMappings } = require('@angular-architects/module-federation/webpack');module.exports = {output: {uniqueName: "mainApp",publicPath: "auto"},optimization: {runtimeChunk: false},plugins: [new ModuleFederationPlugin({remotes: {"micro-app": "micro-app@http://localhost:4201/remoteEntry.js"},shared: share({"@angular/core": { singleton: true, strictVersion: true },"@angular/common": { singleton: true, strictVersion: true },"@angular/router": { singleton: true, strictVersion: true }})})]
};

主應用路由配置 (app.module.ts):

const routes: Routes = [{path: 'micro-app',loadChildren: () => import('micro-app/MicroModule').then(m => m.MicroModule)}
];

子應用配置

子應用 webpack.config.js

const { share, SharedMappings } = require('@angular-architects/module-federation/webpack');module.exports = {output: {uniqueName: "microApp",publicPath: "auto"},optimization: {runtimeChunk: false},plugins: [new ModuleFederationPlugin({name: "micro-app",filename: "remoteEntry.js",exposes: {'./MicroModule': './src/app/micro.module.ts'},shared: share({"@angular/core": { singleton: true, strictVersion: true },"@angular/common": { singleton: true, strictVersion: true },"@angular/router": { singleton: true, strictVersion: true }})})]
};

子應用模塊 (micro.module.ts):

@NgModule({declarations: [MicroComponent],imports: [CommonModule,RouterModule.forChild([{ path: '', component: MicroComponent }])]
})
export class MicroModule { }

運行應用

  • 啟動子應用:
ng serve micro-app --port 4201
  • 啟動主應用:
ng serve main-app --port 4200

訪問主應用路由 /micro-app 即可加載子應用模塊。

共享服務示例:

假如想要創建host和remote項目共享的部分,我們可以使用共享服務。

創建共享服務 (shared-lib.service.ts):

@Injectable({ providedIn: 'root' })
export class SharedLibService {public data$ = new BehaviorSubject<string>('Initial Value');
}

雙方應用webpack.config.js 中共享:

shared: share({"shared-lib": { singleton: true, strictVersion: true }
})

動態加載組件

????????有個時候我們在host項目中,想要通過非常規的模式使用remote中的頁面(常規方式是指官方指導文件中提到的方式,即路由方式),我們還可以怎么辦呢?

在主應用中動態加載子應用組件:

@Component({...})
export class HostComponent implements OnInit {constructor(private viewContainerRef: ViewContainerRef) {}async ngOnInit() {const m = await import('micro-app/Component');this.viewContainerRef.createComponent(m.MyExposedComponent);}
}

記得確保子應用暴露組件:

exposes: {'./Component': './src/app/my-component.ts'
}

詳細的各種方式可以參考下面這位大大的github:

倉庫地址:https://github.com/edumserrano/webpack-module-federation-with-angulargithub.com

React 框架中:

????????因為本人目前只比較熟悉Angular框架,所以關于React,各位可以參考下面這位大大的github:

GitHub - module-federation/module-federation-examples: Implementation examples of module federation , by the creators of module federation

?

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

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

相關文章

麒麟v10系統的docker重大問題解決-不支持容器名稱解析

今天給客戶在麒麟v10Kylin-Server-V10-SP1下安裝nextcloudonlyoffice的時候出現無法連接onlyoffice的問題,經過分析找到了是docker版本過低的原因,現在把解決思路和步驟分享給大家。 一、問題 用一鍵安裝工具,給客戶裝好了系統,Nextcloud可以正常訪問 但是訪問nextcloud中的o…

PyCharm中運行.py腳本程序

1.最近在弄一個python腳本程序&#xff0c;記錄下運行過程。 2.編寫的python程序如下 # # Copyright 2017 Pixar # # Licensed under the terms set forth in the LICENSE.txt file available at # https://openusd.org/license. # # Check whether this script is being run …

學習資料搜集-ARMv8 cache 操作

【ARM64】【cache/MMU】學習總結_arm64 mmu-CSDN博客 [mmu/cache]-ARMV8的cache的維護指令介紹_data cache set allocation-CSDN博客 https://download.csdn.net/blog/column/12036969/139483584 驗證碼_嗶哩嗶哩 【ARM Cache 與 MMU 系列文章 2 -- Cache Coherence及內存順…

Flutter快速上手,入門教程

目錄 一、參考文檔 二、準備工作 下載Flutter SDK&#xff1a; 配置環境 解決環境報錯 zsh:command not found:flutter 執行【flutter doctor】測試效果 安裝Xcode IOS環境 需要安裝brew&#xff0c;通過brew安裝CocoaPods. 復制命令行&#xff0c;打開終端 分別執行…

八股文——JVM

1. JVM組成 1.1 JVM由哪些部分組成&#xff1f;運行流程&#xff1f; Java Virtual Machine&#xff1a;Java 虛擬機&#xff0c;Java程序的運行環境&#xff08;java二進制字節碼的運行環境&#xff09;好處&#xff1a;一次編寫&#xff0c;到處運行&#xff1b;自動內存管理…

在Pnetlab6上繞過TPM、安全啟動和 RAM 檢查安裝windows 11筆記

筆者本次安裝的windows11的鏡像為: zh-cn_windows_11_enterprise_ltsc_2024_x64_dvd_cff9cd2d.iso 1、創建鏡像目錄并上傳iso文件 mkdir /opt/unetlab/addons/qemu/win-win11x64-2024-LTSC //目錄名稱務必按照官方文檔格式,否則無法識別 目錄創建完成后,將.iso格式鏡像上…

PCL點云庫入門(第18講)——PCL庫點云特征之3DSC特征描述3D shape context descriptor

一、3DSC&#xff08;3D Shape Context&#xff09;特征算法原理 1. 背景 3DSC 是一種描述三維點云局部形狀的特征描述子&#xff0c;受二維 Shape Context 的啟發。它用于捕捉點云某一點局部的幾何分布信息&#xff0c;對點云配準、識別等任務非常有效。 2. 基本思想 3DSC…

SpringBoot+Mysql校園跑腿服務平臺系統源碼

&#x1f497;博主介紹&#x1f497;&#xff1a;?在職Java研發工程師、專注于程序設計、源碼分享、技術交流、專注于Java技術領域和畢業設計? 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的老師 Wechat / QQ 名片 :) Java精品實戰案例《700套》 2025最新畢業設計選題推薦…

分庫分表的取舍

文章目錄 大數據量下采用**水平分表**的缺點**1. 跨表查詢復雜性與性能下降****2. 數據分布不均衡****3. 分布式事務與一致性問題****4. 擴展性受限****5. 查詢條件限制與索引管理復雜****6. 數據遷移與維護成本高****7. 業務邏輯復雜度增加****總結** shardingJdbc分片策略**1…

Vue3解決“找不到模塊@/components/xxx.vue或其相應的類型聲明ts文件(2307)”

問題 1&#xff1a;如果沒有這個env.d.ts文件&#xff0c;就新建 declare module "*.vue" {import { DefineComponent } from "vue";const component: DefineComponent<{}, {}, any>;export default component; }2&#xff1a;如果有tsconfig.json文…

計算機視覺與深度學習 | 基于MATLAB的圖像特征提取與匹配算法總結

基于MATLAB的圖像特征提取與匹配算法全面指南 圖像特征提取與匹配 基于MATLAB的圖像特征提取與匹配算法全面指南一、圖像特征提取基礎特征類型分類二、點特征提取算法1. Harris角點檢測2. SIFT (尺度不變特征變換)3. SURF (加速魯棒特征)4. FAST角點檢測5. ORB (Oriented FAST …

如何通過API接口獲取淘寶商品列表?操作詳解

一、準備工作 注冊開發者賬號 訪問淘寶開放平臺官網/萬邦開放平臺&#xff0c;完成企業開發者認證&#xff08;個人賬號權限受限&#xff09;&#xff0c;使用已有淘寶賬號可直接登錄。創建應用并填寫基本信息&#xff08;如應用名稱、類型等&#xff09;&#xff0c;系統生成A…

大數據驅動企業決策智能化的路徑與實踐

&#x1f4dd;個人主頁&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 一、引言&#xff1a;數據驅動的企業競爭力重構 在這個瞬息萬變的商業時代&#xff0c;“快者勝”的競爭邏輯愈發明顯。企業如何在復雜環…

DataGridView關閉默認第一列及表頭居中設置

1、關閉默認第一列 如上圖所示&#xff0c;C#和VB.net中的DataGridView控件都是有一個默認的第一列&#xff08;雖然是空白&#xff09;的&#xff0c;如何關閉這個默認列呢&#xff1f; 把“RowHeadersVisible”的值設置成“false”就可以了&#xff1a; 2、表頭居中顯示 如上…

nodejs express 打包部署

當前文件路徑 webpack.config.js const path require(path); module.exports {entry: ./app.js, // Express 入口文件target: node, // 指定 Node.js 環境output: {path: path.resolve(__dirname, dist),filename: bundle.js},mode: production };打包命令 npx webpac…

CentOS 7 修改為靜態 IP 地址完整指南

在企業網絡環境中,服務器通常需要配置靜態 IP 地址以確保網絡連接的穩定性和可管理性。以下是使用 NetworkManager 工具在 CentOS 7 系統中將動態 IP 配置修改為靜態 IP 的完整指南: 一、檢查當前網絡配置 查看網絡連接狀態: 使用 nmcli connection show 命令列出所有網絡連…

微信小程序動態組件加載的應用場景與實現方式

動態組件加載的應用場景與實現方式 你提供的代碼展示了微信小程序中動態加載組件的方法&#xff0c;但這種方式在實際開發中需要注意使用場景和實現細節。下面我來詳細說明如何應用&#xff1a; 應用場景 按需加載組件&#xff1a;在某些條件滿足時才加載組件動態配置組件&a…

學習記錄: 使用react-router-dom

假設有一個vite創建的react項目,先npm install react-router-dom. 在app中: import { RouterProvider, createBrowserRouter } from "react-router-dom"; import Login from "./comm/Login"; import Home from "./comm/Home"; import TotalMan…

Angular中Webpack與ngx-build-plus 淺學

Webpack 在 Angular 中的概念 Webpack 是一個模塊打包工具&#xff0c;用于將多個模塊和資源打包成一個或多個文件。在 Angular 項目中&#xff0c;Webpack 負責將 TypeScript、HTML、CSS 等文件打包成瀏覽器可以理解的 JavaScript 文件。Angular CLI 默認使用 Webpack 進行項目…

java中word快速轉pdf

java中word快速轉pdf 網上其他方法轉pdf要不轉的太慢&#xff0c;要不就是損失格式&#xff0c;故而留下此方法留作備用。 文章目錄 java中word快速轉pdf一、依賴二、依賴包三、代碼 一、依賴 <dependency><groupId>com.aspose</groupId><artifactId>…