微前端之旅:探索Qiankun的实践经验


theme: devui-blue

image.png

什么是微前端?

微前端是一种前端架构方法,它借鉴了微服务的架构理念,将一个庞大的前端应用拆分为多个独立灵活的小型应用,每个应用都可以独立开发、独立运行、独立部署,再将这些小型应用联合为一个完整的应用。

核心思路:

  • 可独立开发、运行、部署
  • 模块化、可拓展

适用场景:

  • 大型的Web应用
  • 公司内部的平台系统
  • 对已有成熟项目的拓展

场景分析:

  1. 大型的web应用:

架构设计阶段的完全微前端架构

利用微前端的架构思想,将大型web应用逐步拆分设计成小型的、耦合性较低的并在后期方便扩容的块。以应对在业务不断升级和迭代的过程中,尽量在设计阶段规避带来的项目体积、改造成本等问题。从而优化和提升开发效率。

  1. 公司内部的平台系统:

由业务、数据等聚合需求发起的聚合式微前端架构

随着数据聚合平台往往承担了该领域下聚合的责任。在过去的平台,前端技术往往采用iframe和window.open等方式将业务内容融合到平台上,兼容性较差的体验慢慢被现代用户诟病。随着微前端的出现,这种格局正在慢慢改变。

  1. 对已有成熟项目的拓展

避免推翻重建或其他拓展性要求发起的嵌入式、拓展式微前端架构

一些项目使用的是老旧的技术,使用微前端之后,对于新功能的开发可以使用新的技术框架,这样避免了推翻重构,也避免了继续基于过时的技术进行开发。

如何进行微前端架构设计?

我们以完整的构建一个大型web应用为例,进行微前端的架构设计。

image.png

1. 技术选型

微前端的技术选型部分与常规的前端应用选型类似,在关注前端框架、构建工具、状态管理工具等的同时,需关注微前端框架的选型,如qiankun、single-spa、wujie等等。这里简单对比一下qiankun的优劣势分析:

优势

  • 基于 single-spa,拥有强大的社区支持和活跃的维护团队。
  • 提供了完善的生命周期钩子,便于主应用和子应用之间的通信和状态管理。
  • 支持多种前端框架,如 React、Vue、Angular 等,具有良好的框架无关性。
  • 提供了沙箱机制,确保子应用之间的隔离性,减少冲突。

劣势

  • 对于子应用的路由管理有一定的限制,需要遵循 qiankun 的路由规范。
  • 在处理复杂场景时,可能需要额外的配置和优化。
  • 对于某些特定框架(如Vue3)的支持可能存在延迟或不完善的情况。

2. 拆分规则

在整体项目的设计初期,首先根据业务将系统拆分为多个独立的小型应用,每个小型应用对应一个业务模块,可根据实际与产品端进行具体的划分。

3. 通信机制与数据共享

主应用与子应用的通讯机制与数据共享实际上就是参数如何传递的过程。

  • qiankun提供的通讯API
  • 本地存储Local Storage
  • vuex等状态管理

4. 构建部署

依赖现有的CICD流程分git仓库进行管理。

符合以下原则:

  • 主应用、子应用依照拆分规则独立git仓库
  • 打包、部署解耦
  • 主子之间、子子之间互不影响

5.UI 组件协同

  • 统一同基座子应用与主应用的UI库(包括版本)、框架版本
  • 统一封装前端组件上传私服、统一封装前端方法上传私服(components untils)或可copy联动

根据规范的代码范例才更容易的进行low code快速生成模板代码(增删改查等操作)

6.权限统一管理

  • 集成统一的token、菜单、角色、按钮等权限管理。

简化开发和维护:通过统一的鉴权体系,可以避免每个微前端应用都需要实现自己的用户认证和授权逻辑,简化开发和维护工作。由主应用统一获取token令牌,子应用通过载体中介获取令牌

7.监控、日志设计

  • 全局埋点监控:主应用级路由拦截根据应用前缀区分pv量。
  • 应用停留监控:根据Qiankun生命周期在挂载子应用钩子中触发计时器,在卸载子应用钩子中终止计时器,可对应用停留时长进行监控。
  • 日志推送:根据Qiankun生命周期挂载子应用时,获取该子应用预设的提示信息进行弹窗提醒。

8.关联大数据展示

主应用作为以业务单元为基础的子应用的载体,采集监控、埋点等数据汇总、分析、利用图形展示。

  • 方向1:数据驱动迭代、产品设计
  • 方向2:性能分析
  • 方向3:…

qiankun的部分代码基础

具体请参考qiankun官网:https://qiankun.umijs.org/zh/guide

image.png

准备

首先我们需要创建两个独立的 vue 项目,一个是主应用 shell(壳),一个是微应用 app1。 两个项目使用 vue-cli 分别初始化,并安装 qiankun

vue create micro-frontend-shell 
cd micro-frontend-shell 
npm install qiankun # 或 yarn add qiankun
vue create micro-frontend-app1
cd micro-frontend-app1
npm install qiankun # 或 yarn add qiankun

shell中配置四要素:

  • 应用名
  • 资源地址
  • 挂载div
  • 匹配前缀
// main.js
import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'app1',
    entry: '//localhost:8080',
    container: '#container',
    activeRule: '/app1'
  }
]);

start();

<!-- App.vue -->
<div id="container"></div>

总结

微前端架构最大的优势在于它实现了系统模块的完全解耦。原来复杂得难以维护的单体代码,通过分解成独立的子应用模块后,每个子应用内部变得极其清晰和易管理。不同子应用可以由专精的团队独立负责,大大提升了开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/688437.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D打印随形水路:模具水路的革命性技术

在快速发展的模具制造行业中&#xff0c;3D打印技术以其独特的优势正在引领一场技术革命。其中&#xff0c;3D打印随形水路技术&#xff0c;凭借其灵活性和定制化设计的能力&#xff0c;为模具带来了前所未有的变革。 模具3D打印随形水路技术&#xff0c;是一种利用3D打印技术制…

环 境 变 量

如果希望某一个文件在 CMD 窗口的任意路径下都可以打开&#xff0c;则需要将该文件的路径存放在环境变量中。 在 CMD 中运行该文件时&#xff0c;优先查看当前路径下的文件&#xff0c;如果没有找到&#xff0c;则进入环境变量中记录的路径下寻找该文件&#xff0c;如果能找到…

阿里通义千问,彻底爆了!(本地部署+实测)

点击“终码一生”&#xff0c;关注&#xff0c;置顶公众号 每日技术干货&#xff0c;第一时间送达&#xff01; 问大家一个问题&#xff1a;你是否想过在自己的电脑上部署一套大模型&#xff1f;并用自己的知识库训练他&#xff1f; 阿里通义千问今天发布了最新的开源大模型系…

灵动岛动效:打造沉浸式用户体验

灵动岛是专属于 iPhone 14 Pro 系列交互UI&#xff0c;通过通知消息的展示和状态的查看与硬件相结合&#xff0c;让 iPhone 14 Pro 系列的前置摄像头和传感器的“感叹号”&#xff0c;发生不同形状的变化。这样做的好处是让虚拟软件和硬件的交互变得更为流畅&#xff0c;以便让…

M1Pro 使用跳板机

Mac (M1 Pro) 通过Iterm2 使用跳板机 1、由于堡垒机&#xff08;跳板机&#xff09;不能支持mac系统终端工具&#xff0c;只支持xshell等win生态。所以我们需要先安装iterm2 装iterms教程 这里头对rz、sz的配置不详细。我们可以这样配置&#xff1a; where iterm2-send-zmod…

关闭文件及使用with语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 关闭文件 打开文件后&#xff0c;需要及时关闭&#xff0c;以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。close()方…

网络安全实验BUAA-全套实验报告打包

下面是部分BUAA网络安全实验✅的实验内容 &#xff1a; 认识路由器、交换机。掌握路由器配置的基本指令。掌握正确配置路由器的方法&#xff0c;使网络正常工作。 本博客包括网络安全课程所有的实验报告&#xff1a;内容详细&#xff0c;一次下载打包 实验1-路由器配置实验2-AP…

Linux存储管理

简介 硬件上的存储设备目前有两类&#xff0c;通过磁头读写信息的机械硬盘和用主控芯片将信息写入晶体管的固态硬盘&#xff0c;硬盘调度算法等知识可以通过前面的操作系统设备管理文章学习&#xff0c;本章只介绍Linux中能对存储设备的操作。 为了让操作系统识别和管理物理磁…

SAP ERP系统主要模块简介

SAP系统通过提供一系列高度灵活的模块&#xff0c;满足企业在不同业务领域的需求。这些模块不仅功能齐全且相对独立&#xff0c;但它们之间又能紧密协作&#xff0c;共同构筑一个协同高效的工作环境。 财务会计&#xff08;FI&#xff09;模块 它涵盖了总账、应收账款、应付账…

React@16.x(21)渲染流程-更新

目录 1&#xff0c;更新的2种场景2&#xff0c;节点更新3&#xff0c;对比 diff 更新3.1&#xff0c;React 的假设3.1.2&#xff0c;key 2.1&#xff0c;找到了对比的目标2.1.1&#xff0c;节点类型一致1&#xff0c;空节点2&#xff0c;DOM节点3&#xff0c;文本节点4&#xf…

通俗易懂的解释保护性看跌期权和抛补看涨期权!

今天带你了解通俗易懂的解释保护性看跌期权和抛补看涨期权&#xff01;当涉及期权交易时&#xff0c;保护性看跌期权和抛补看涨期权是两种常见的策略&#xff0c;它们的目的都是为了在特定市场情况下对投资进行保护或增强收益。 保护性看跌期权 保护性看跌期权是一种风险管理策…

第八篇——矢量化:象形文字和拼音文字是如何演化的?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过这篇看似在讲文字的演化过程&#xff0c;实际是在说人生应该如何走&a…

多分类混淆矩阵详解

⭐️ 前言 在机器学习和数据科学中&#xff0c;混淆矩阵&#xff08;Confusion Matrix&#xff09;是一个重要的工具&#xff0c;用于评估分类模型的性能。特别是在多分类问题中&#xff0c;混淆矩阵能够清晰地展示模型在每个类别上的预测结果。以下是对多分类混淆矩阵的详细解…

AI做的2024年高考数学试卷,答案对吗?

2024年高考数学考试已经结束&#xff0c;现在呈上数学真题及AI给出的解答。供各位看官欣赏。 总的来说&#xff0c;人工做题两小时&#xff0c;AI解答两分钟。 但是&#xff0c;AI做的答案是否正确&#xff0c;那就要各位看官来评判了&#xff01; 注&#xff1a;试卷来源于…

【MySQL | 第十二篇】重新认识MySQL数据类型

12.理解MySQL数据类型 12.1整数类型 整数类型有五种&#xff1a;tinyint、smallint、mediumint、int、bigint&#xff08;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;8字节&#xff09;&#xff0c;存储范围为 -2^(N-1) 到 2^(N-1)-1所有整数类型默认有符号数&…

文本审核纠错

探索高效文本审查利器&#xff1a;Word Checker-CSDN博客 GitHub - shibing624/pycorrector: pycorrector is a toolkit for text error correction. 文本纠错&#xff0c;实现了Kenlm&#xff0c;T5&#xff0c;MacBERT&#xff0c;ChatGLM3&#xff0c;LLaMA等模型应用在纠错…

音视频开发19 FFmpeg 视频解码- 将 h264 转化成 yuv

视频解码过程 视频解码过程如下图所示&#xff1a; ⼀般解出来的是420p FFmpeg流程 这里的流程是和音频的解码过程一样的&#xff0c;不同的只有在存储YUV数据的时候的形式 存储YUV 数据 如果知道YUV 数据的格式 前提&#xff1a;这里我们打开的h264文件&#xff0c;默认是YU…

Android无障碍服务

Hi I’m Shendi Android无障碍服务 最近想制作一个记录点击操作并重复播放的工具&#xff0c;用以解放双手&#xff0c;因现在的Android高版本基本上难以Root&#xff0c;所以选择了使用无障碍来实现&#xff0c;在这里记录下来。 Android无障碍 可参考文档&#xff1a;https:…

os和os.path模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 目录也称文件夹&#xff0c;用于分层保存文件。通过目录可以分门别类地存放文件。我们也可以通过目录快速找到想要的文件。在Python中&#xff0c;并…

【go】windows环境设置goos

场景 本地环境&#xff1a;windows 生产环境&#xff1a;linux 现想在本地将go脚本编译为可执行二进制文件&#xff0c;转移至生产中进行运行测试。但go build不生效。 方案&#xff08;修改GOOS&#xff09; cmd打开命令行&#xff0c;执行go env查看本地go环境&#xff0c…