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

news2024/10/6 4:02:17

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>

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[pixi.js] 入门简单案例 简易时钟

老实说pixi虽然之前拿来做个几个简单的游戏&#xff0c;但是是好久前的了&#xff0c;又忘了&#xff0c;现在算是重新入门。 官网版本已经更新到v8去了&#xff0c;而react相关的pixi库pixi-react 虽然支持react18 但还是v6-v7的版本&#xff0c;既然已经看了v8的文档&#xf…

解决富文本中抖音视频无法播放的问题——403

问题 富文本中的抖音视频无法播放&#xff0c;资源状态码是403禁止访问打开控制台&#xff0c;可以看到在项目中打开&#xff0c;数据请求的请求头多了一个Referer: http://localhost:3000/而复制链接在新窗口直接打开&#xff0c;请求头中并不会携带Referer 解决方案 在ind…

书客护眼大路灯Sun再次引领先锋,守护青少年视力健康!

在这个信息化高速发展的时代&#xff0c;我们的眼睛承受着前所未有的压力。每年的护眼日&#xff0c;不仅是提醒我们关注眼睛健康的时刻&#xff0c;更是全社会共同努力&#xff0c;为青少年营造健康用眼环境的契机。 “守护明亮视界&#xff0c;预防近视从我做起”。随着国内青…

【Vue2源码学习分析】

# 文件结构 源码目录 # 调试环境搭建 安装依赖: npm i安装rollup: npm i -g rollup修改dev脚本&#xff0c;添加sourcemap&#xff0c;package.json "dev": "rollup -w -c scripts/config.js --sourcemap --environment TARGET:web- full-dev",运行开发命令…

SkyWalking之P0业务场景输出调用链路应用

延伸扩展&#xff1a;XX业务场景 路由标签打标、传播、检索 链路标签染色与传播 SW: SkyWalking的简写 用户请求携带HTTP头信息X-sw8-correlation “X-sw8-correlation: key1value1,key2value2,key3value3” 网关侧读取解析HTTP头信息X-sw8-correlation&#xff0c;然后通过SW…

Linux网络编程:网络层协议|IP

目录 前言&#xff1a; 1.IP协议 1.1.IP协议格式 1.2.网段划分 1.2.1.知识引入 1.2.2.IP地址划分和子网掩码 1.3.IP地址分类 1.3.1.特殊IP地址 ​编辑 1.3.2.私有IP和公网IP 1.3.3.浅谈NAT技术 1.4.路由 1.4.1.什么是路由 1.4.2.路由表 1.5.网络层数据切片和组装…

Allegro导入DXF文件

阿里狗导入DXF文件 点击File–>Import–>DXF&#xff0c;注意DXF file那边不能使用中文路径和文件名以及非法字符&#xff0c;DXF units一般为mm&#xff0c;结构那边一般都用mm制作图&#xff0c;右边三个选项只需要勾选中间那个&#xff0c;意思是以增加的形式导入&am…

jail管理器CBSD实践@FreeBSD

CBSD介绍 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案的单一集成工具&#xff0c;用于使用预定义的软件集以最少的配置快速构建和部署计算机虚拟环境。 虽然CBSD没有提供额外的操作系统级功能&#xff0c;但它极大地简化了…

Codeforces Round 951 (Div. 2) F. Kostyanych‘s Theorem(思维题 交互好题)

题目 交互题&#xff0c;n&#xff08;n<1e5&#xff09;个点的完全图&#xff0c;无向的&#xff0c;初始恰好删了n-2条边 每次询问可以输入一个d&#xff1a;? d 交互器会输出一个当前度>d的点v&#xff0c; 如果有多个这样的点&#xff0c;输出度最小的&#xff…

搭建自己的DNS服务器

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

STM32-呼吸灯仿真

目录 前言: 一.呼吸灯 二.跑马灯 三. 总结 前言: 本篇的主要内容是关于STM32-呼吸灯的仿真,包括呼吸灯,跑马灯的实现与完整代码,欢迎大家的点赞,评论和关注. 接上http://t.csdnimg.cn/mvWR4 既然已经点亮了一盏灯,接下来就可以做更多实验了, 一.呼吸灯 在上一个的基础上…

Informer

I n f o r m e r Informer Informer 摘要&#xff1a; 长序列时间序列的预测 i n f o r m e r informer informer优点&#xff1a; P r o b s p a r e Probspare Probspare自关注机制&#xff0c;在时间复杂度和内存使用方面达到 O ( N l o g N ) O(NlogN) O(NlogN),在序列依…

plsql 实现自动补全语句

1.打开plsql程序所在文件目录 2.在此目录下新建文件auto_complete.txt &#xff08;文件名随便起&#xff09; 3.在auto_complete.txt 中写入关系对应&#xff1a; 4.在配置-首选项-用户界面-编辑器 中引入auto_complete.txt 即可 5.开一个sql窗口&#xff0c;输入sf 后敲个…

hadoop部署hive

1.安装mysql数据库 这里采用docker部署mysql,如果没有安装docker #安装yum工具 yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken #设置docker镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/…

golang的函数为什么能有多个返回值?

在golang1.17之前&#xff0c;函数的参数和返回值都是放在函数栈里面的&#xff0c;比如函数A调用函数B&#xff0c;那么B的实参和返回值都是存放在函数A的栈里面&#xff0c;所以可以轻松的返回多个值。 其他的编程语言大都使用某个寄存器来存储函数的返回值。 但是从golang…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于两阶段鲁棒的多综合能源微网-共享储能电站协同优化运行策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Android 安装调试 TelephonyProvider不生效

直接安装TelephonyProvider的时候&#xff0c;&#xff08;没有重启&#xff09;发现数据库没有生效。 猜测应该是原本的数据库没有删除后重建更新。 解决方法&#xff1a;杀掉phone进程 adb shell am force-stop com.android.phone 查看device进程 adb shell ps | grep <…

实验二、网络属性设置《计算机网络》

精神状态 be like&#xff1a;边写边崩溃&#xff0c;越写越得劲儿。 目录 一、实验目的&#xff1a; 二、实验内容 三、实验步骤&#xff1a; 四、实验小结 一、实验目的&#xff1a; 掌握 IP 地址、子网掩码等网络属性的设置。 二、实验内容 预备知识&#xff1a; 1、…

MySQL有哪些锁?

文章目录 前言一、全局锁1.全局锁是怎么用的&#xff1f;2.全局锁应用场景是什么&#xff1f;3.加全局锁又会带来什么缺点呢&#xff1f;4.既然备份数据库数据的时候&#xff0c;使用全局锁会影响业务&#xff0c;那有什么其他方式可以避免&#xff1f; 二、表级表1.MySQL 表级…

vue2组件封装实战系列之space组件

组件之 GfSpace 多个同类型的内容比如 div/span/button/li 等&#xff0c;实现水平、垂直方向的均匀布局的功能 效果预览 属性 参数类型说明可选值默认值flexBoolean是否 flex 布局true/falsefalsegapNumber内容间距-10directionString内容排列方向row/columnrow 代码实现 这…