当前位置: 首页 > article >正文

前端微前端架构:别再把所有代码都放在一个仓库里了

前端微前端架构别再把所有代码都放在一个仓库里了什么是前端微前端架构前端微前端架构是一种将前端应用分解为多个独立的、可独立部署的微应用的架构风格。别以为微前端只是后端微服务的前端版本它有自己的特点和挑战。为什么需要前端微前端架构团队协作不同团队可以独立开发、部署和维护各自的微应用技术栈灵活性不同微应用可以使用不同的技术栈可维护性减少单体应用的复杂性提高可维护性可扩展性可以独立扩展各个微应用渐进式迁移可以逐步将传统应用迁移到微前端架构前端微前端架构模式1. iframe 模式iframe 模式是最直接的微前端实现方式通过 iframe 嵌入其他微应用。!-- 主应用 -- div classmain-app headerMain App Header/header div classcontent iframe srchttps://micro-app-1.example.com frameborder0 width100% height500/iframe iframe srchttps://micro-app-2.example.com frameborder0 width100% height500/iframe /div footerMain App Footer/footer /div !-- 微应用 1 -- div classmicro-app-1 h1Micro App 1/h1 pThis is micro app 1/p /div !-- 微应用 2 -- div classmicro-app-2 h1Micro App 2/h1 pThis is micro app 2/p /div2. Single-SPA 模式Single-SPA 是一个前端微服务框架允许在同一页面上运行多个前端框架。// 主应用配置 import { registerApplication, start } from single-spa; // 注册微应用 registerApplication({ name: micro-app-1, app: () import(https://micro-app-1.example.com/main.js), activeWhen: (location) location.pathname.startsWith(/app1) }); registerApplication({ name: micro-app-2, app: () import(https://micro-app-2.example.com/main.js), activeWhen: (location) location.pathname.startsWith(/app2) }); // 启动应用 start(); // 微应用 1 配置 import { registerApplication } from single-spa; export const bootstrap async () { console.log(Micro App 1 bootstrap); }; export const mount async (props) { console.log(Micro App 1 mount, props); // 渲染应用 document.getElementById(micro-app-1).innerHTML h1Micro App 1/h1; }; export const unmount async () { console.log(Micro App 1 unmount); // 清理应用 document.getElementById(micro-app-1).innerHTML ; };3. Qiankun 模式Qiankun 是基于 Single-SPA 的微前端框架提供了更完整的功能。// 主应用配置 import { registerMicroApps, start } from qiankun; // 注册微应用 registerMicroApps([ { name: micro-app-1, entry: https://micro-app-1.example.com, container: #micro-app-1, activeRule: /app1 }, { name: micro-app-2, entry: https://micro-app-2.example.com, container: #micro-app-2, activeRule: /app2 } ]); // 启动应用 start(); // 微应用 1 配置 // webpack.config.js const { name } require(./package.json); module.exports { output: { library: ${name}-[name], libraryTarget: umd, jsonpFunction: webpackJsonp_${name} } }; // src/main.js export async function bootstrap() { console.log(Micro App 1 bootstrap); } export async function mount(props) { console.log(Micro App 1 mount, props); // 渲染应用 ReactDOM.render(App /, props.container.querySelector(#root)); } export async function unmount(props) { console.log(Micro App 1 unmount); // 清理应用 ReactDOM.unmountComponentAtNode(props.container.querySelector(#root)); }4. Module Federation 模式Module Federation 是 Webpack 5 引入的特性允许不同的应用共享代码。// 主应用 webpack 配置 const { ModuleFederationPlugin } require(webpack).container; module.exports { plugins: [ new ModuleFederationPlugin({ name: host, remotes: { microApp1: microApp1http://localhost:3001/remoteEntry.js, microApp2: microApp2http://localhost:3002/remoteEntry.js }, shared: { react: { singleton: true }, react-dom: { singleton: true } } }) ] }; // 微应用 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 }, react-dom: { singleton: true } } }) ] }; // 主应用使用微应用 import React, { lazy, Suspense } from react; const MicroApp1 lazy(() import(microApp1/App)); const MicroApp2 lazy(() import(microApp2/App)); function App() { return ( div h1Host App/h1 Suspense fallback{divLoading Micro App 1.../div} MicroApp1 / /Suspense Suspense fallback{divLoading Micro App 2.../div} MicroApp2 / /Suspense /div ); } export default App;5. 组合式微前端组合式微前端是一种更灵活的微前端实现方式通过组合多个微应用的组件来构建页面。// 微应用 1 导出组件 // src/components/Button.js export function Button({ children, onClick }) { return ( button classNamebtn onClick{onClick} {children} /button ); } // 微应用 2 导出组件 // src/components/Card.js export function Card({ title, children }) { return ( div classNamecard h3{title}/h3 div classNamecard-content{children}/div /div ); } // 主应用使用微应用组件 import { Button } from microApp1/Button; import { Card } from microApp2/Card; function App() { return ( div Card titleWelcome pHello from host app/p Button onClick{() console.log(Clicked)} Click me /Button /Card /div ); } export default App;前端微前端架构最佳实践1. 设计原则独立部署每个微应用可以独立部署不影响其他微应用技术栈无关不同微应用可以使用不同的技术栈共享资源合理共享公共资源如 UI 组件、工具库等通信机制建立清晰的微应用间通信机制一致性体验确保所有微应用提供一致的用户体验2. 架构设计边界划分明确微应用的边界避免功能重叠路由设计设计合理的路由策略确保微应用间的导航流畅状态管理考虑微应用间的状态共享和管理资源管理合理管理微应用的资源加载和卸载安全隔离确保微应用间的安全隔离3. 技术选型框架选择根据项目需求选择合适的微前端框架构建工具选择支持微前端的构建工具如 Webpack 5通信方案选择合适的微应用间通信方案监控方案建立微前端应用的监控体系部署策略设计合理的部署策略4. 开发流程开发环境搭建适合微前端的开发环境代码规范制定统一的代码规范测试策略建立微前端应用的测试策略CI/CD设计适合微前端的 CI/CD 流程文档管理建立微前端应用的文档体系5. 性能优化资源加载优化微应用的资源加载代码分割合理使用代码分割减少初始加载时间缓存策略设计合理的缓存策略懒加载使用懒加载技术按需加载微应用预加载预加载可能需要的微应用前端微前端架构案例1. 案例一大型电商平台某大型电商平台采用微前端架构将应用分为首页、商品详情、购物车、订单等多个微应用每个微应用由不同的团队负责开发和维护提高了开发效率和系统稳定性。2. 案例二企业管理系统某企业管理系统采用微前端架构将系统分为人力资源、财务管理、项目管理等多个微应用不同部门可以独立开发和部署各自的微应用适应了企业业务的快速变化。3. 案例三金融科技应用某金融科技应用采用微前端架构将应用分为账户管理、交易、风控等多个微应用提高了系统的安全性和可维护性。前端微前端架构挑战1. 挑战一通信复杂性微应用间的通信可能变得复杂需要建立清晰的通信机制。2. 挑战二性能问题多个微应用的加载可能导致性能问题需要优化资源加载和代码分割。3. 挑战三一致性体验确保所有微应用提供一致的用户体验可能具有挑战性。4. 挑战四部署复杂性微前端应用的部署可能比单体应用更复杂需要设计合理的部署策略。5. 挑战五调试困难调试微前端应用可能比调试单体应用更困难需要建立有效的调试策略。总结前端微前端架构是一种将前端应用分解为多个独立的、可独立部署的微应用的架构风格。它可以提高团队协作效率、技术栈灵活性、可维护性和可扩展性。记住微前端不是银弹它适用于大型前端应用对于小型应用可能会增加不必要的复杂性。在选择微前端架构时需要根据项目的实际需求进行评估。别再把所有代码都放在一个仓库里了试试微前端架构吧

相关文章:

前端微前端架构:别再把所有代码都放在一个仓库里了

前端微前端架构:别再把所有代码都放在一个仓库里了 什么是前端微前端架构? 前端微前端架构是一种将前端应用分解为多个独立的、可独立部署的微应用的架构风格。别以为微前端只是后端微服务的前端版本,它有自己的特点和挑战。 为什么需要前…...

从概率视角解析Logistic回归中的交叉熵损失函数

1. 从概率论到交叉熵:理解Logistic回归的底层逻辑 我第一次接触交叉熵损失函数时,完全被这个看似复杂的公式吓到了。直到后来从概率论的角度重新审视它,才发现这个设计简直精妙绝伦。让我们从一个简单的例子开始:假设你正在玩一个…...

【ROS2】SLAM建图成功,但是导航失败,加载地图报错Timed out waiting for transform from base_link to map to become availabl

背景 SLAM建图成功,但是使用命令ros2 launch nav2_bringup bringup_launch.py map:my_house.yaml use_sim_time:false 加载地图后,有报错打印 [component_container_isolated-1] [INFO] [1776087546.872633844] [global_costmap.global_costmap]: Checki…...

YOLO12模型在Web应用中的实时目标检测实现

YOLO12模型在Web应用中的实时目标检测实现 1. 引言 想象一下,你正在开发一个智能安防系统,需要实时分析摄像头画面中的行人、车辆和异常行为。或者你正在构建一个电商平台,希望自动识别用户上传的商品图片中的物品。传统方案需要将视频流发…...

基于Gradle 7.6与Spring Boot 3.0构建现代化Java 17微服务架构

1. 为什么选择Gradle 7.6 Spring Boot 3.0 Java 17组合 最近两年Java生态发生了翻天覆地的变化。作为一个经历过多个微服务项目的老兵,我发现这套技术组合正在成为企业级开发的新标准。Gradle 7.6带来的构建速度提升,Spring Boot 3.0对云原生的深度支持…...

解锁QQ音乐加密音频:qmc-decoder全面解决方案指南

解锁QQ音乐加密音频:qmc-decoder全面解决方案指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐下载的加密音频文件无法在其他播放器或设备上播放…...

TinyML实战:手把手教你用C++和TensorFlow Lite Micro构建一个正弦波预测器

TinyML实战:用C和TensorFlow Lite Micro构建正弦波预测器的完整指南 在嵌入式AI的世界里,TinyML正掀起一场革命。想象一下,在一个只有指甲盖大小的微控制器上运行机器学习模型,实时预测正弦波数值——这正是我们将要探索的奇妙旅…...

避开开关电源的坑:AP值计算中3个易错点实测复盘

避开开关电源的坑:AP值计算中3个易错点实测复盘 在开关电源设计中,AP值(Area Product)作为磁芯选择的核心参数,直接关系到变压器的功率处理能力和整体效率。然而,即使经验丰富的工程师,在实际项…...

Wan2.1 VAE开发实战:集成至微信小程序实现前端AI绘图

Wan2.1 VAE开发实战:集成至微信小程序实现前端AI绘图 最近在捣鼓AI绘图应用,发现很多开发者把模型部署在服务器上,然后做个网页端就完事了。但说实话,现在大家更习惯用手机,如果能直接在微信小程序里玩AI绘图&#xf…...

从零构建可验证知识表示层:2024最新AIAgent架构白皮书核心章节精译(含OWL2+SHACL+Prolog混合推理原型代码)

第一章:可验证知识表示层的架构定位与核心价值 2026奇点智能技术大会(https://ml-summit.org) 可验证知识表示层(Verifiable Knowledge Representation Layer, VKRL)是现代可信AI系统中承上启下的关键抽象层,位于数据采集层与推理…...

Mission Planner/QGC连不上Pixhawk?可能是固件签名在捣鬼(附ArduCopter稳定版固件下载)

Mission Planner/QGC连接Pixhawk失败的深度排查与解决方案 当你的无人机开发工作正进行到关键时刻,地面站却突然无法识别Pixhawk飞控,这种"幽灵串口"现象确实令人抓狂。作为一名经历过多次类似问题的开发者,我理解这种挫败感——明…...

双NPN三极管恒流源电路设计与性能优化

1. 双NPN三极管恒流源电路基础解析 第一次接触恒流源电路时,我也被这个"电流稳定器"的概念深深吸引。想象一下,就像给水管装上智能阀门,无论水压如何变化,出水流量始终保持恒定。双NPN三极管组成的恒流源电路&#xff0…...

低成本ROS小车传感器融合实战:用MPU6050和模拟里程计搞定robot_pose_ekf

低成本ROS小车传感器融合实战:用MPU6050和模拟里程计实现精准定位 在机器人开发领域,定位精度往往决定了整个系统的上限。传统方案依赖昂贵的编码器和高端IMU,但今天我要分享的是一种完全不同的思路——如何用不到200元的硬件预算&#xff0c…...

LaTeX投稿IEEE期刊,编辑让我改排版?别慌,这份单栏+双倍行距+行号配置指南帮你搞定

LaTeX投稿IEEE期刊排版急救指南:单栏、双倍行距与行号配置实战 收到期刊编辑的格式修改意见时,那种"明明内容没问题却卡在排版细节"的焦虑感,每个科研人都深有体会。上周我刚帮同事处理完一份被要求"单栏双倍行距行号"的…...

别再只用基础API了!手把手教你用OnlyOffice Connector实现文档自动批注与事件监听

解锁OnlyOffice Connector高阶玩法:从自动化批注到智能事件流处理 当大多数开发者还在用基础API处理文档时,OnlyOffice Connector早已为深度集成准备好了全套武器库。想象一下这样的场景:法务团队上传的合同能自动标记风险条款,销…...

AIAgent异常处理不是加个retry就行!20年架构老兵用217次线上故障复盘,验证这6类错误必须分层隔离

第一章:AIAgent异常处理不是加个retry就行! 2026奇点智能技术大会(https://ml-summit.org) AI Agent 的异常处理常被简化为“套一层 retry 逻辑”,但这种做法在真实生产环境中极易引发级联失败、状态不一致与语义漂移。当 Agent 在多步骤任务…...

微信小程序ECharts图表Canvas层级覆盖问题:从原理到实战解决方案

1. 微信小程序ECharts图表Canvas层级问题解析 第一次在小程序里用ECharts做数据可视化时,我就被这个坑绊倒了——明明设置了z-index,为什么滚动页面时图表还是会盖住弹窗和导航栏?后来才发现,这是微信小程序原生组件的"特权&…...

Godot游戏资源解包终极指南:一键提取PCK文件所有资产

Godot游戏资源解包终极指南:一键提取PCK文件所有资产 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 想要探索Godot游戏中的精美资源却无从下手?面对神秘的PCK文件格式感到困…...

Flux Sea Studio 在网络安全领域的创新应用:生成钓鱼演练场景图

Flux Sea Studio 在网络安全领域的创新应用:生成钓鱼演练场景图 最近和几个做企业安全的朋友聊天,他们都在头疼一件事:员工安全意识培训。传统的PPT讲解、看视频,效果越来越差。尤其是钓鱼邮件演练,市面上能找到的“钓…...

# 发散创新:基于CQRS模式的高并发订单系统架构设计与实现在现代分布式系统中,**读写分离**和**性能优化**是绕

发散创新:基于CQRS模式的高并发订单系统架构设计与实现 在现代分布式系统中,读写分离和性能优化是绕不开的核心命题。传统的单体架构在面对海量请求时逐渐暴露出瓶颈,而 CQRS(Command Query Responsibility Segregation&#xff0…...

iOS客户端应用开发深度解析:基于Flutter和Swift的技术实践

在移动应用开发领域,iOS平台因其高性能、安全性和用户体验而备受青睐。随着跨平台框架的兴起,Flutter和Swift成为开发iOS应用的核心工具。本文基于iOS客户端应用开发的职位描述,深入探讨Flutter和Swift在iOS开发中的应用、iOS核心原理(如消息机制、内存管理、UI渲染、多线程…...

Financial and Tax Quotation

Financial and Tax Quotation 财税...

LaTeX 参考文献管理与样式定制的终极实践

1. 从零开始构建你的文献数据库 写论文最头疼的莫过于整理参考文献,而LaTeX的.bib文件就像个智能文献管家。我刚开始用LaTeX时,手动输入了30多篇文献的.bib条目,结果发现作者名大小写不统一、期刊缩写格式混乱,最后排版出来惨不忍…...

如何用MelonLoader实现Unity游戏模组开发的终极跨平台方案

如何用MelonLoader实现Unity游戏模组开发的终极跨平台方案 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 你是否曾为Unity游戏…...

FontViewOK:字体预览与对比的轻量级解决方案

在日常办公或设计工作中,你是否曾为选择合适的字体而烦恼?Word里字体列表很长,但每种字体到底长什么样,只能一个一个点开看;想对比几种字体效果,要来回切换;或者你需要打印一份字体样式表&#…...

Oracle VM VirtualBox虚拟机网络配置实战:从零搭建可通信的Linux环境

1. 为什么需要配置VirtualBox虚拟机网络? 刚装好的VirtualBox虚拟机就像一台没有插网线的新电脑,虽然系统跑起来了,但根本没法上网。我刚开始用VirtualBox时就踩过这个坑——装完CentOS系统后,发现既ping不通百度,也连…...

5分钟精通百度网盘提取码智能获取:baidupankey完全使用指南

5分钟精通百度网盘提取码智能获取:baidupankey完全使用指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗?每次遇到需要密码的资源都要四处搜索,浪…...

LinkSwift网盘直链下载助手:告别龟速下载的终极解决方案

LinkSwift网盘直链下载助手:告别龟速下载的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

告别手动大气校正!用Google Earth Engine直接调用Landsat C2 L2地表反射率数据的完整指南

告别手动大气校正!用Google Earth Engine直接调用Landsat C2 L2地表反射率数据的完整指南 如果你曾经为了计算NDVI或地表温度而花费数小时处理原始Landsat数据,那么这篇文章将彻底改变你的工作流程。想象一下:无需下载数十GB的原始数据&#…...

基于X11的机器人图形界面远程调试实战指南

1. 为什么需要X11远程调试机器人图形界面 做机器人开发的朋友们应该都遇到过这样的场景:你正坐在工位上调试代码,突然需要查看机器人上rviz的可视化效果。这时候常规操作是跑过去接显示器,或者用远程桌面连上去看。但前者太麻烦,后…...