Chuyển đến nội dung chính

第 11 課:微前端整合策略 - 建置時與運行時

組成微前端的 7 種策略:iframe、Web 元件、建置時整合、JavaScript 捆綁、模組聯合、伺服器端包含、邊緣端包含。比較細節並選擇正確的方法。

🏗️ 建築 — 第 11 課 第 11 課:微前端集成 策略——建置時與運行時

微服務與微前端系統設計-從基礎到生產

第 4 部分:微前端 — 架構與原理

亞洲開發網

簡介

建立微前端應用程式的方法有很多種。每種方法都有其自身的權衡。本文深入探討了每種策略並幫助您選擇正確的策略。

4 種微前端整合策略


1. 建置時整合(NPM 套件)

每個 MFE 都會發佈為 npm 套件,並在建置時匯入主機應用程式:

host-app/package.json:
  "@company/product-mfe": "^2.1.0"
  "@company/cart-mfe": "^1.3.0"

優點: 簡單、型別安全、可搖樹 缺點: MFE 更新時必須重建 + 重新部署主機應用程式 結論: ❌ 不是「真正的」微前端-沒有獨立部署


2. 運行時集成

2.1 iframe

<iframe src="https://product.example.com/embed" />

**優點:**完美隔離,簡單 **缺點:**沒有共享樣式,難以溝通,SEO糟糕,性能差 用例: 遺留應用程式嵌入、沙盒小部件

2.2 Web 元件

<product-catalog data-category="electronics"></product-catalog>
<script src="https://product.cdn.com/product-catalog.js"></script>

優點: 框架無關、Shadow DOM 隔離、瀏覽器標準 缺點: 複雜的 SSR、需要 React 包裝器、Shadow DOM 樣式棘手

2.3 JavaScript 整合(動態腳本載入)

function loadMicroFrontend(name, containerId) {
  const script = document.createElement('script');
  script.src = `https://${name}.cdn.com/bundle.js`;
  script.onload = () => {
    window[`render_${name}`](document.getElementById(containerId));
  };
  document.body.appendChild(script);
}

優點: 簡單、靈活、不可知的框架 缺點: 無依賴共享,捆綁包大

2.4 模組聯盟 (Webpack 5) ⭐

┌─────────────────────────────┐
│        Shell App (Host)     │
│                             │
│  import('product/Catalog')  │──► Product MFE (Remote)
│  import('cart/MiniCart')     │──► Cart MFE (Remote)
│                             │
│  Shared: React, React-DOM   │
│  (loaded once, shared)      │
└─────────────────────────────┘

優點: 執行時期整合、共享依賴項、延遲載入、TypeScript 缺點: Webpack 特定的,學習曲線 結論: ⭐ 對於大多數用例推薦。


3. 伺服器端方法

3.1 伺服器端包含 (SSI)

<!--# include virtual="/fragments/product?id=123" -->

3.2 邊緣包含 (ESI)

<esi:include src="https://product.service/fragment/header" />

用例: 內容豐富的頁面,當 SEO 和 TTFB 很重要時。


4.決策矩陣

戰略獨立性能複雜性最適合
NPM 套件❌低✅ 最好低共享庫
iframe✅ 高❌ 窮低傳統嵌入式
網頁組件✅ 高✅ 好中多框架
JS 整合✅ 高⚠️ 好的中等簡單案例
模組聯盟✅ 高✅ 好中大多數專案
SSI/ESI✅ 高✅ 很棒的 TTFB高內容網站

總結

  • 建置時 (npm):簡單但沒有獨立部署
  • 模組聯盟:同一框架的最佳平衡 - ⭐推薦
  • Web 元件:最適合多框架
  • SSI/ESI:最適合伺服器呈現的內容網站

下一篇文章: 第 12 課:Webpack 模組聯合與 Vite — 深入探討