微前端项目实战及原理

21 篇文章 0 订阅
订阅专栏

背景

使用微前端在项目中主要是解决使用iframe引入第三方页面时遇到的框架受限,页面交互不统一等问题,项目中遇到的问题大概如下:

  1. iframe 内部路由跳转,不会影响到外部的路由地址,无法记住当前访问的页面地址,iframe加载第三方公司应用,在 iframe 里面发生的页面跳转,外部的路由地址是不会变化的,如果我刷新页面,它又回到的之前的页面。
  2. iframe 内部的弹窗遮罩问题,iframe内部的弹窗只在内部生效,这样看上去就和左侧菜单以及头部分离了,页面看起来不美观,与正常的UI交互不一致
  3. iframe 的高度不是自适应的,必须由 js 来动态 调整
  4. 存在重复加载资源问题

除此之外,微前端的初衷是解决遗留老项目更新维护困难的问题,那么到底什么是微前端呢?

什么是微前端

在这里插入图片描述
如果我们把页面看成是最终向用户展示产品的窗口,那么窗口里面的每一项,每一个小块,每一个功能,都可以由不同的技术,不同的框架来完成。

在这个图中,我们的窗口包含头部、左侧、内容和脚部 这四部分,中间是内容区,内容区的部分可以加载任何符合规范的前端代码,不论你是用 react、vue还是 angular 来开发的,只要你符合规范的约定,我就可以把你的内容加载过来。

它把前端开发从原来的基于一个大框架下的开发,拆分成了基于功能的若干微小的开发,各个端之间业务独立,互不影响,一个端出问题了也不会影响到其它端,所以把它称之为微前端。

微前端的特点:
1、与技术栈无关
2、子应用独立部署
3、子应用与主应用无缝衔接,主应用对子应用可控,子应用可获取主应用资源(看上去就是一个应用一样)

其中第三点就是区别于 iframe 的地方,因为 iframe 无法做到这一点

实现原理

介绍完什么是微前端后,那接下来介绍下微前端的实现原理
在这里插入图片描述微前端实现原理是 主工程在运行时获取应用配置,然后注册应用和路由,先加载主应用(菜单等),当url 地址变化时,通过路由管理器和应用管理器动态加载对应的子应用

路由管理器是指把所有子应用的路由统一放在一个总路由里管理,应用管理器是把所有子应用打包后的实例放在一个应用管理器里,当URL和路由管理器中的子应用路由匹配时,通过应用管理器加载对应的子应用

基于这个原理,我画了一个流程图:
在这里插入图片描述
子应用在加载前会创建基于自身的生命周期实例和路由,然后注册到主工程中,当页面URL跳转时,通过路由管理器和应用管理器匹配子应用,在加载子应用的过程中,有三个生命周期,bootstrap是初始化,这个时候页面显示loading,也就是正在加载中,然后走到mount,开始加载页面,不需要显示当前子应用时,通过unmount卸载子应用

核心的技术是 systemjs 和Single-Spa
在这里插入图片描述

systemjs 提供通用的模块导入途径,支持传统模块和ES6的模块,相当于加载器,主要用来调度子应用,决定何时展示哪个子应用。
single-spa 包装器,可以把现有的应用包装,使得加载器可以使用它们
说下这两个技术点的原理,最核心的原理其实很简单,抛出 各个规范不讲, 只讲最核心的 JS 函数。

在这里插入图片描述主要做的是:

  1. 根据远程地址,可以加载 JS、CSS 等文件。
  2. 根据 AMD 的模块规范,动态创建script标签,把远程加载的文件,按照 ES Module 规范载入并执行。
    在这里插入图片描述single-spa 原理:

1.根据主应用的注册信息,找到所有的子应用。
在这里插入图片描述
3. 然后根据路由匹配的情况,发起一个路由匹配应用事件(single-spa:routing-event),在结合 SystemJS.import 方法去加载文件

技术细节

在这里插入图片描述我将按照项目架构、路由分发、应用加载和公用依赖加载这四个流程来为大家介绍
在这里插入图片描述
首先看下项目架构,这是主框架,由 index.html 和公用部分navbar 及子应用 app1 组成,其他子应用和 app1的实现原理一样
在这里插入图片描述
index.html 相当于总入口,配置所有资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后说下路由分发,也就是主框架是怎样通过路由找到每个子应用的

以demo中的菜单为例,菜单navbar 和首页index 以及弹窗遮罩APP1 都是单独的子应用,这些子应用的路由都放在主框架的路由管理器里,运行页面就加载菜单栏,所以主框架初始化就运行navbar路由,默认导航到首页,点击弹窗遮罩菜单项,url变成 /app1,通过路由分发 ,路由管理器找到 app1 对应的子应用名称,再去应用管理器里找到这个子应用,加载到主框架

在这里插入图片描述
通过路由分发,子应用是怎样挂载到主框架

先说子应用,子应用创建 vue 的实例和项目加载前,加载后,卸载时的钩子函数,并暴露到全局,通过setPublicPath这个方法生成对应的路由,这个路由是唯一的,并暴露到全局,这样子应用的路由和实例都暴露到全局中,在主框架中就容易拿到子应用的配置
在这里插入图片描述
主框架通过 SystemJS 把子应用的入口 js 文件加载进来,通过singleSpa.registerApplication注册路由和应用,

当url前缀和应用的路由匹配时,就会加载应用
在这里插入图片描述
最后说下公共依赖是怎么加载的
公共依赖是指子应用和主框架可以共用的依赖,像 vue、vue-router、webpack等
这些公共依赖放在主框架中,子应用在vue.config.js文件通过config.externals 配置共用依赖,这样需要时,就从主框架加载
在这里插入图片描述

主框架通过 systemjs-importmap 把需要的公用依赖文件导入进来,通过 System.import 使用依赖

结语

目前项目已经改造完成,踩了不少坑,微前端已封装成插件放到前端生态中,整体是参考阿里 qiankun 框架,后续也会不断总结并发布到博客中。

qiankun前端原理及部分源码解读
lyn1772671980的博客
01-03 942
前端qiankun原理及源码解读
Taro多端开发实现原理项目实战
03-28
Taro 多端开发实现原理项目实战
基于vue+qiankun前端项目实战vue项目(新手学习).zip
03-03
基于vue+qiankun前端项目实战vue项目.zip 本项目采用 vue + qiankun 实践前端落地。 同时 qiankun 是一个开放式前端架构,支持当前三大前端框架甚至 jq 等其他项目无缝接入。 此项目为了尽可能的简单易上手,以及方便文章讲解,大部分逻辑都在主应用和子应用的 main.js 来回施展, 实际项目应用可不要如此粗暴,要有优雅的架构设计。
理解前端技术原理
Jack, what else can you do besides holding your little darling?
12-03 1651
理解前端技术原理
前端实战:打造高效、灵活的前端应用架构_micro- app前端架构设计负责哪些模块实战
最新发布
2301_82056337的博客
05-02 30
将多个独立的应用程序组合成一个统一的前端应用程序将基于不同框架的代码组合在一起浏览器端组合、服务端组合以及路由高效的开发团队实践和项目工作流Michael Geers是一名软件开发者,专注于用户界面相关开发领域。他从十几岁起就开始为网站开发软件。在过去的几年里,他参与过多个垂直架构的项目,在多个国际性会议上分享了自己的经验,并在杂志上发表了一系列相关的文章。目前,他仍在持续运营https://micro-frontends.org站点。
前端框架qiankun之原理与实战
热门推荐
夕山雨的博客
02-22 2万+
一、前端概述 在讲解qiankun之前,我们先来了解一下何为前端前端的概念借鉴自后端的服务,主要是为了解决大型工程在变更、维护、扩展等方面的困难而提出的。它的主要思路是将一个大型工程拆分成若干个更小、更简单,可以独立开发、测试和部署的小工程,分别进行维护。 如果以前端组件的概念作类比,我们可以把每个被拆分出的小工程看作是一个应用级组件。这时我们需要一个“管理者”,负责决定哪些“应用级组件”渲染到页面上,而这个“管理者”,就是我们的主工程。 ...
前端(Micro-Frontends)qiankun框架原理与实现(vue-react)
weixin_43434729的博客
10-27 1186
前端(Micro-Frontends)qiankun框架原理与实现 文章目录前端(Micro-Frontends)qiankun框架原理与实现1. qiankun简介2. qiankun核心设计理念3. 为什么不用iframe4. qiankun的特性5. 实现原理(1)应用加载(2)js隔离(3)css隔离(4)通信前端(Micro-Frontends)实战(qiankun-vue-react)1、基座应用a. 创建基座应用vue(带router)b. 基座应用安装qiankunc. 基座应用引入e
前端实现原理研究总结
vgub158的博客
07-04 540
前端实现原理
前端原理解析
weixin_43783814的博客
09-06 1459
前端个人总结
前端项目
07-08 464
前端项目 项目管理 项目开发 项目模块
2020年你必须要会的前端 -(实战篇)
ddwddw4的博客
07-29 285
2020年你必须要会的前端 -(实战篇) 最近你有没有经常听到一个词,前端? 是不是听上去感觉非常地高大上!然而~ 前端其实非常地简单,非常地容易落地,而且也非常不高大上~ 那么就来一起看看什么是前端吧: 一.为什么需要前端? 这里我们通过3W(what,why,how)的方式来讲解什么是前端: 1.What?什么是前端? 前端就是将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。 前端的核心在于拆, 拆完后再合! 2.Why?为什么..
前端--qiankun原理概述
别告诉我有Bug
04-07 2280
前端概述前端概念是从服务概念扩展而来的,摒弃大型单体方式,将前端整体分解为小而简单的块,这些块可以独立开发、测试和部署,同时仍然聚合为一个产品出现在客户面前。可以理解前端是一种将多个可独立交付的小型前端应用聚合为一个整体的架构风格。二》前端架构核心1、技术栈无关:主框架不限制接入应用的技术栈,应用具备完全自主权2、独立开发、独立部署:应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新3、增量升级。
前端VUE实战——去哪儿网项目实战.7z
08-17
用VUE框架实现的去哪儿网项目,建议学习完都实践一下,教程B站可以搜到“”VUE去哪儿网实战“”压缩包里有全部代码,配好环境可以直接运行看看效果!
前端项目实战
02-10
主要模仿的是一个做衣服的前端首页和购买,有图片轮播效果,有放大镜效果,还有字体位移效果!
前端项目实战美团网
03-18
2017前端项目实战美团网 2017前端项目实战美团网 2017前端项目实战美团网
vue-router的实现原理_聊聊前端原理和实践
weixin_39699163的博客
12-01 250
本文首发于 vivo互联网技术 信公众号 链接:https://mp.weixin.qq.com/s/2qH9qMNpU_LuLEBTsDUKzA作者:Tan Xin本文对前端的概念和场景进行科普,介绍一些主流的前端的实现库及其用法,并讲解部分这些库的原理和实践知识。一、前端在项目迭代中,随着业务的发展壮大,项目的功能模块通常也会越来越多。可能原来所有的代码模块都在一个仓库里,由一个团队负...
前端项目搭建
qq_33203555的博客
01-28 532
本文主要介绍基于single-spa的前端项目搭建 一、涉及技术及框架 single-spa:连接主项目与子应用的桥梁 systemjs:浏览器端异步加载模块 single-spa-vue:vue子应用连接主应用插件 二、主应用工程搭建 vue-cli搭建vue项目 vue create root-web 改造root项目使用systemjs加载子应用,以下是index.html的改造 <!DOCTYPE html> <html lang=""> <head&g
前端(一)项目搭建
飞天代码的博客
04-24 585
前端的春风已经吹遍了前端行业,国内可能用qiankun来做前端最多的吧,我这里也是采用qiankun来进行验证。为了赶上前端这列车,打算还是写几个demo来验证下。 目前如果输入qiankun进行搜索,网上的例子基本都是官方的那个列子,丑、简单,基本找不到比较好的企业级应用列子,求人不如求己还是自己上吧 计划写如下一个列子 建立4个应用,1个是登录应用,1个是主框架应用,1个是oa任务应用、1个是oa会议应用。将oa的任务应用和oa的会议应用注册到主框架应用。 项目目录结构大概如下: go-lo
vue前端项目实战案例
05-30
以下是几个比较常见的 Vue 前端项目实战案例: 1. TodoList:一个简单的任务清单,用户可以添加、删除、编辑任务。 2. 简易留言板:用户可以在留言板上发布留言,管理员可以审核、删除留言。 3. 电商平台:一个...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • websocket和http区别 13190
  • vue 封装动态生成form表单和table表格组件 7613
  • 前端经典算法题大全 7193
  • 微前端项目实战及原理 5062
  • 微信H5页面点击直接跳转app-微信开放标签 4758

分类专栏

  • H5开发 1篇
  • 微信 1篇
  • http 2篇
  • html5 1篇
  • websocket 2篇
  • 网络 2篇
  • node 1篇
  • git 1篇
  • vue 4篇
  • 前端 21篇
  • cookie、 sessionStorage 、localStorag
  • css 5篇
  • 面试 9篇
  • js 15篇
  • 性能 2篇
  • es6 2篇
  • 小程序 1篇

最新评论

  • 微信H5页面点击直接跳转app-微信开放标签

    Hello.Reader: 有什么实现方式吗

  • 微信H5页面点击直接跳转app-微信开放标签

    cwxcc: 微信现在应该不支持引流到抖音

  • 微信H5页面点击直接跳转app-微信开放标签

    Hello.Reader: 可以跳转抖音app吗

  • vue 封装动态生成form表单和table表格组件

    qq_41082114: 子组件formData: this.form这里不是违背了prop单向数据流理念吗,通过自定义事件把formData传给父组件是不是好一点

  • Node进程管理工具—pm2

    松鹤望白兰: 你好.楼主,请问我怎么能知道某个进程的端口号呢表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • https
  • 使用vue+element开发一个谷歌浏览器插件
  • 从 Babel 到 AST
2023年7篇
2022年11篇
2021年2篇
2020年11篇
2019年17篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司南宁网站优化按天收费公司信阳高端网站设计雅安百姓网标王报价景德镇网站推广价格鹤岗模板网站建设报价荆州网站排名优化多少钱喀什外贸网站制作推荐益阳网络推广报价成都seo网站推广深圳模板推广坪山企业网站制作公司永新网站优化排名价格昌都网站推广推荐昌吉百度网站优化三明网站改版推荐民治网站建设阳江网站改版沧州SEO按天收费哪家好保定网络广告推广哪家好布吉网站优化按天扣费哪家好乌海企业网站建设绵阳SEO按天收费哪家好潜江品牌网站设计公司驻马店百姓网标王无锡优秀网站设计公司广州百度关键词包年推广多少钱福永百度seo哪家好太原网站改版价格肇庆网站关键词优化报价宜春网站搭建报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化