本文详解微前端架构的原理、主流方案对比,以及如何在WordPress中集成微前端。

什么是微前端

微前端(Micro-Frontend):
将前端单体应用拆分为多个小型、独立的应用,
每个团队独立开发、测试、部署。

类比:
后端微服务 → 前端微前端

核心价值

1. 技术栈无关
    首页用React商品页用Vue后台用Angular

2. 独立部署
    首页团队更新不影响商品页

3. 增量升级
    老项目逐步重构无需重写

主流微前端方案对比(2026)

方案 原理 学习曲线 适用场景
qiankun 单实例(主应用+子应用) 大型后台系统
Module Federation 模块级共享(Webpack 5) 多团队协作
Single-SPA 路由级隔离 复杂企业应用
iframe 浏览器原生隔离 第三方集成

qiankun 实战

主应用(React)

// main-app/src/App.jsx
import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'react-app',
    entry: '//localhost:3001',
    container: '#subapp',
    activeRule: '/react',
  },
  {
    name: 'vue-app',
    entry: '//localhost:3002',
    container: '#subapp',
    activeRule: '/vue',
  },
]);

start();

function App() {
  return (
    <div>
      <h1>主应用</h1>
      <div id="subapp"></div>
    </div>
  );
}

子应用(React,无改动)

// react-app/src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

function render(props) {
  ReactDOM.render(<App />, props.container || document.getElementById('root'));
}

// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {
  render({});
}

// 微前端环境下会调用
export async function bootstrap() {}
export async function mount(props) { render(props); }
export async function unmount(props) {
  ReactDOM.unmountComponentAtNode(props.container);
}

子应用(Vue 3)

// vue-app/src/main.js
import { createApp } from 'vue';
import App from './App.vue';

let app = null;

function render(props) {
  app = createApp(App);
  app.mount(props.container ? props.container.querySelector('#app') : '#app');
}

// 独立运行
if (!window.__POWERED_BY_QIANKUN__) {
  render({});
}

export async function mount(props) { render(props); }
export async function unmount() { app.unmount(); }

Module Federation 实战(Webpack 5)

主机应用(Host)

// webpack.config.js
const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin;

module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'host',
      remotes: {
        mfe1: 'mfe1@http://localhost:3001/remoteEntry.js',
        mfe2: 'mfe2@http://localhost:3002/remoteEntry.js',
      },
    }),
  ],
};

远程应用(Remote)

// mfe1/webpack.config.js
const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin;

module.exports = {
  name: 'mfe1',
  filename: 'remoteEntry.js',
  plugins: [
    new ModuleFederationPlugin({
      name: 'mfe1',
      filename: 'remoteEntry.js',
      exposes: {
        './Button': './src/Button.jsx',  // 暴露组件
      },
      shared: ['react', 'react-dom'],  // 共享依赖
    }),
  ],
};

使用远程组件

// host-app/src/App.jsx
import React, { Suspense } from 'react';

const RemoteButton = React.lazy(() => import('mfe1/Button'));

function App() {
  return (
    <div>
      <h1>主机应用</h1>
      <Suspense fallback="Loading...">
        <RemoteButton />
      </Suspense>
    </div>
  );
}

WordPress 集成微前端

场景:WordPress 作为内容底座 + 微前端作为交互层

架构:
WordPress(后台 + API)
    ↓ REST API / GraphQL
React 微前端(前台,SSG/SSR)
    ← 独立部署,独立迭代

实现:WordPress 作为主应用容器

// WordPress 主题 footer.php
<div id="micro-frontend-root"></div>

<script src="https://mfe-cart.example.com/remoteEntry.js"></script>
<script src="https://mfe-checkout.example.com/remoteEntry.js"></script>

<script>
// 加载微前端
import('cart/App').then(module => {
  const CartApp = module.default;
  ReactDOM.render('<CartApp />', document.getElementById('micro-frontend-root'));
});
</script>

实现:WordPress 作为微前端的数据源

// mfe-product/src/App.jsx
import { useEffect, useState } from 'react';

function ProductApp() {
  const [products, setProducts] = useState([]);

  useEffect(() => {
    fetch('https://wordpress.example.com/wp-json/wp/v2/posts?per_page=10')
      .then(res => res.json())
      .then(data => setProducts(data));
  }, []);

  return (
    <div>
      <h1>最新文章</h1>
      <ul>
        {products.map(post => (
          <li key={post.id}>{post.title.rendered}</li>
        ))}
      </ul>
    </div>
  );
}

微前端 DevOps

独立部署(CI/CD)

# .github/workflows/deploy-mfe1.yml
name: Deploy MFE1

on:
  push:
    paths:
      - 'apps/mfe1/**'  # 仅 mfe1 改动时触发

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: npm install && npm run build
      - run: aws s3 sync dist/ s3://my-bucket/mfe1/

版本管理

// host-app/version.json
{
  "mfe1": "1.2.3",
  "mfe2": "2.0.1"
}

// 加载时指定版本
const RemoteButton = React.lazy(() =>
  import('mfe1/Button')  // Webpack 会根据 publicPath 加载对应版本
);

2026 年微前端趋势

趋势一:RSC(React Server Components)替代微前端?

RSC 优势:
- 零客户端 JS
- 服务端按需渲染
- 天然模块隔离

局限性:
- 仅限 React 18+
- 需要全栈框架(Next.js/Nuxt.js- 微前端仍适合多技术栈团队

趋势二:Web Components 作为微前端标准

// 任意框架均可使用
<micro-cart></micro-cart>
<micro-checkout></micro-checkout>

<script>
class MicroCart extends HTMLElement {
  connectedCallback() {
    this.innerHTML = `<button>Cart (${cartCount})</button>`;
  }
}
customElements.define('micro-cart', MicroCart);
</script>

趋势三:Edge Side Includes(ESI)回归

原理:
CDN 边缘组装 HTML 片段

<!-- 主页面 -->
<html>
  <esi:include src="https://mfe-header.example.com/header.html" />
  <main>...</main>
  <esi:include src="https://mfe-footer.example.com/footer.html" />
</html>

优势:
-  JS 开销
- SEO 友好
- CDN 级缓存

决策建议

场景 推荐方案
大型后台系统(React/Vue 混合) qiankun
多团队独立交付 Module Federation
第三方系统集成 iframe(简单粗暴)
任意技术栈复用 Web Components

总结

微前端不是银弹,但在多团队、多技术栈场景下价值显著。2026 年,Module Federation + Web Components 是主流方向。

立即行动:用 qiankun 搭建一个主应用 + 2 个子应用的 Demo,体验微前端的威力。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。