跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

前端微前端:大型应用的模块化解决方案

探讨前端微前端架构作为大型应用模块化解决方案的价值。针对单体应用维护难、协作冲突及 iframe 方案性能差等问题,介绍了微前端的团队协作、技术栈灵活、独立部署等优势。通过对比反面教材,展示了基于 Webpack Module Federation 和 Single-SPA 的正确实现方式,涵盖主应用与微应用的配置代码。总结指出 Module Federation、Single-SPA 及 Qiankun 等工具能实现模块共享、路由管理及状态管理,帮助简化大型应用的开发与维护流程。

萤火微光发布于 2026/4/6更新于 2026/7/2644 浏览

前端微前端:大型应用的模块化解决方案

背景与挑战

在大型应用中,单体架构常面临维护困难、团队协作冲突等问题。虽然有人尝试使用 iframe 解决,但往往导致性能差、用户体验不佳。微前端并非银弹,但对于特定规模的大型应用,它是有效的解决方案。

核心优势

  • 团队协作:不同团队可以独立开发和部署
  • 技术栈灵活:不同微前端可以使用不同的技术栈
  • 独立部署:单个微前端可以独立部署,不影响其他部分
  • 可扩展性:可以轻松添加新的微前端

常见误区

使用 iframe 加载微前端是常见的错误实践:

<!-- 反面教材:使用 iframe 实现微前端 -->
<!DOCTYPE html>
<html>
<head>
  <title>主应用</title>
</head>
<body>
  <h1>主应用</h1>
  <!-- 使用 iframe 加载微前端 -->
  <iframe src="https://micro-app1.example.com"></iframe>
  <iframe src="https://micro-app2.example.com"></iframe>
</body>
</html>

实现方案

基于 Module Federation

主应用 webpack 配置:

const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'host',
      remotes: {
        microApp1: 'microApp1@http://localhost:3001/remoteEntry.js',
        microApp2: 'microApp2@http://localhost:3002/remoteEntry.js'
      },
      shared: {
        react: { singleton: true, requiredVersion: '^18.0.0' },
        'react-dom': { singleton: true, requiredVersion: '^18.0.0' }
      }
    })
  ]
};

微应用 1 webpack 配置:

const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'microApp1',
      filename: 'remoteEntry.js',
      exposes: { './App': './src/App' },
      shared: {
        react: { singleton: true, requiredVersion: '^18.0.0' },
        'react-dom': { singleton: true, requiredVersion: '^18.0.0' }
      }
    })
  ]
};

主应用中使用微应用:

import React, { lazy, Suspense } from 'react';
// 懒加载微应用
const MicroApp1 = lazy(() => import('microApp1/App'));
const MicroApp2 = lazy(() => import('microApp2/App'));
function App() {
  return (
    <div>
      <h1>主应用</h1>
      <Suspense fallback={<div>加载中...</div>}>
        <MicroApp1 />
        <MicroApp2 />
      </Suspense>
    </div>
  );
}

基于 Single-SPA

主应用配置:

import { registerApplication, start } from 'single-spa';
// 注册微应用
registerApplication({
  name: 'micro-app-1',
  app: () => import('@org/micro-app-1'),
  activeWhen: (location) => location.pathname.startsWith('/micro-app-1'),
  customProps: { authToken: 'token' }
});
registerApplication({
  name: 'micro-app-2',
  app: () => import('@org/micro-app-2'),
  activeWhen: (location) => location.pathname.startsWith('/micro-app-2')
});
// 启动应用
start();

微应用配置:

import { mountRootParcel } from 'single-spa';
// 导出生命周期函数
export const bootstrap = async () => { console.log('微应用 1 启动'); };
export const mount = async (props) => {
  console.log('微应用 1 挂载', props);
  // 挂载应用
  const el = document.getElementById('micro-app-1');
  // 渲染应用
  return Promise.resolve();
};
export const unmount = async () => { console.log('微应用 1 卸载'); return Promise.resolve(); };

总结

  • Module Federation:Webpack 5 的内置功能,支持模块共享
  • Single-SPA:最早的微前端框架,支持多种技术栈
  • Qiankun:基于 Single-SPA 的微前端方案,提供了更多功能
  • 独立部署:每个微前端可以独立构建和部署
  • 技术栈灵活:不同微前端可以使用不同的技术栈
  • 模块共享:共享公共依赖,减少重复加载
  • 路由管理:统一的路由管理,实现微前端间的导航
  • 状态管理:跨微前端的状态管理方案

微前端旨在让大型应用的开发和维护变得更加简单,需配合合理的架构设计和团队协作。

目录

  1. 前端微前端:大型应用的模块化解决方案
  2. 背景与挑战
  3. 核心优势
  4. 常见误区
  5. 实现方案
  6. 基于 Module Federation
  7. 基于 Single-SPA
  8. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • JadeAI 简历生成器:模板、AI 辅助与 Docker 部署
  • Stable Diffusion 3.5 FP8 模型部署与性能优化指南
  • AI 绘画提示词风控:Qwen3Guard-Gen-8B 前置审核实战
  • AI 大模型开发入门:四大必备开源工具指南
  • 开源 AI 联网搜索工具 OpenWebSearch MCP 升级,支持多引擎与流式响应
  • 非科班转码者的 AI 学习路径:从 0 到 1
  • 数据结构基础:栈与队列的顺序及链式实现
  • 秋叶绘世 Stable Diffusion 整合包与 ComfyUI 使用指南
  • AI 小说生成器本地部署与配置指南
  • Rust 异步 Web 框架 Axum:核心原理与实战进阶
  • Git 实战:如何精准合并指定分支的特定提交
  • 云开发 Copilot:AI 赋能的低代码开发
  • C++11 核心特性详解:列表初始化、新式声明、范围 for 与 STL 变化
  • AIGC 时代 C++ 吞吐量优化技巧与性能提升实践
  • SketchUp STL 插件安装与使用指南
  • MySQL 库核心操作详解:创建、修改与备份实战
  • LM Studio 本地离线部署大语言模型实战指南
  • 大模型上下文窗口 200k 到底是什么
  • 机场出租车调度问题的数学建模与 Python 仿真实现
  • MySQL 常用函数整理与使用指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online