微前端--qiankun原理概述

这篇具有很好参考价值的文章主要介绍了微前端--qiankun原理概述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

demo放最后了。。。

一、微前端

一》微前端概述

        微前端概念是从微服务概念扩展而来的,摒弃大型单体方式,将前端整体分解为小而简单的块,这些块可以独立开发、测试和部署,同时仍然聚合为一个产品出现在客户面前。可以理解微前端是一种将多个可独立交付的小型前端应用聚合为一个整体的架构风格。

二》微前端架构核心

1、技术栈无关:主框架不限制接入应用的技术栈,微应用具备完全自主权

2、独立开发、独立部署:微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新

3、增量升级:在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略

4、独立运行:每个微应用之间状态隔离,运行时状态不共享

三》主流的微前端方案

1、iframe

        iframe 最大的特性就是提供了浏览器原生的硬隔离方案,不论是样式隔离、js 隔离这类问题统统都能被完美解决。

        但他的最大问题也在于他的隔离性无法被突破,导致应用间上下文无法被共享(主要是本地存储、全局变量和公共插件),两个项目不同源(跨域)情况下数据传输需要依赖 postMessage,随之带来的开发体验、产品体验的问题。

2、single-spa 方案

        Single-spa 是一个将多个单页面应用聚合为一个整体应用的 JavaScript 微前端框架(GitHub 主页)。简单来说就是将子项目的内容(包括容器、js)插入到主项目,从而呈现出子项目的内容。

        相对于 iframe,single-spa 让父子项目属于同一个 document,这样做既有好处,也有坏处。好处就是数据/文件都可以共享,公共插件共享,子项目加载就更快了,缺点是带来了 js/css 污染。

        single-spa 上手并不简单,也不能开箱即用,开发部署更是需要修改大量的 webpack 配置,对子项目的改造也非常多。

二、qiankun

一》qiankun是什么

         qiankun 是一个基于 single-spa 的微前端实现库,它在 single-spa 的基础上,实现了开箱即用,除一些必要的修改外,子项目只需要做很少的改动,就能很容易的接入。

二》qiankun主要特性

1、基于 single-spa 封装,提供了更加开箱即用的 API。

2、技术栈无关,任意技术栈的应用均可 使用/接入,不论是 React/Vue/Angular/JQuery 还是其他等框架。

3、HTML Entry 接入方式,让我们接入微应用像使用 iframe 一样简单

4、样式隔离,确保微应用之间样式互相不干扰。

5、JS 沙箱,确保微应用之间 全局变量/事件 不冲突。

6、资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度。

7、umi 插件,提供了 @umijs/plugin-qiankun 供 umi 应用一键切换成微前端架构系统。

三》single-spa和qiankun的关系

微前端需要解决的问题分为两大类:

1、应用的加载与切换

        应用的加载与切换要解决的问题包括: 路由问题、应用入口、应用加载

2、应用的隔离与通信

        应用的隔离与通信需要解决的问题包括:js隔离、css样式隔离、应用间通信

微前端--qiankun原理概述

 四》原理概述

1、路由

【1】single-spa是通过监听hashChange和popState这两个原生事件来检测路由变化的

【2】当路由变化时,single-spa会监听到,并触发urlReroute

【3】接着它会调用reroute,该函数正确设置各个应用的状态后调用getAppChanges获取 待清除、待卸载、待加载、待挂载4种不通状态下应用的数据。

【4】对不同的数组执行不同的生命周期方法。

流程图如下:

微前端--qiankun原理概述

 

2、应用入口

        只要你的应用实现了 bootstrap 、mount 和 unmount 三个生命周期钩子,有这三个函数导出,我们的框架应用就可以知道如何加载这个子应用。这三个钩子也正好是子应用的生命周期钩子。当子应用第一次挂载的时候,我们会执行 bootstrap 做一些初始化,然后执行 mount 将它挂载。当你应用切换走的时候,我们会执行 unmount 把应用卸载掉。

微前端--qiankun原理概述

 3、应用加载

qiankun采用的应用加载是在运行是通过加载子应用的HTML。

【1】检查是否有缓存,如果有,直接从缓存中返回

【2】如果没有则通过fetch函数去下载配置的html入口、并返回字符串

【3】通过process函数处理字符串、返回模版、外联脚本、外联样式、和应用入口脚本。

【4】调用getEmbedHTML把外联的样式下载下来,并替换到模板内,使其变成内部样式

【5】返回一个对象,该对象包含处理后的模板,以及getExternalScripts、getExternalStyleSheets、execScripts等几个核心方法。

应用加载及process函数处理流程图:

微前端--qiankun原理概述

 4、JS隔离

qiankun的隔离方式有两种:

•基于proxy对全局window生成一个代理对象

微前端--qiankun原理概述

 

•通过快照沙箱在沙箱挂载和卸载的时候记录快照,在应用切换的时候依据快照恢复环境。

微前端--qiankun原理概述

 5、样式隔离

qiankun内置了两种样式隔离的方法:

•ShadowDOM

微前端--qiankun原理概述

•样式隔离 RFC

微前端--qiankun原理概述

 6、应用间通信

        基于一个全局的globalState对象。这个对象由基座应用负责创建,内部包含一组用于通信的变量,以及两个分别用于修改变量值和监听变量变化的方法:setGlobalState和onGlobalStateChange。

微前端--qiankun原理概述

 三、总结

        虽然阿里说:“可能是你见过最完善的微前端解决方案🧐”。但是qiankun 也有一些事情没有做的。比如没有对 localStorage 进行隔离,如果多个子应用都用到 localStorage 就有可能冲突了,除此之外,还有 cookie, indexedDB 的共享等。

附demo

GitHub - 14130110048/qiankun-demo: 微前端-qiankun框架demo文章来源地址https://www.toymoban.com/news/detail-412906.html

到了这里,关于微前端--qiankun原理概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • qiankun 微前端实例化使用

    一、qiankun使用场景 1. 简介:qiankun是在single-spa的基础上实现的,可以保证各个项目独立使用,也可以集成使用。各系统之间不受技术栈的限制,集成使用也能保证各样式和全局变量的隔离。 模块的插拔式使用,当公司项目集是一个大系统下包含多个子系统或者模块时,可以

    2024年02月04日
    浏览(50)
  • 微前端框架篇一,了解qiankun

    微前端是一种将复杂单体应用拆分为多个小型独立前端应用,然后将这些小应用按需加载并集成到主应用的技术方案。 每个子应用都有自己的 JavaScript 和 CSS 代码。 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用。所有页面都来回在这张页面上切换。

    2024年01月22日
    浏览(28)
  • qiankun原理解析

    qiankun 是一个基于 single-spa 框架实现的一个微前端框架, single-spa 虽然实现了路由劫持和应用加载,但是没有实现样式隔离和js隔离,并不是一个完善的微前端框架; qiankun 在实现了路由劫持和应用加载的同时还实现了沙箱和import-html-entry 基于 single-spa 封装了更加开箱即用的a

    2024年02月16日
    浏览(22)
  • vue项目集成乾坤(qiankun)微前端

    npm i qiankun -S qiankun文档官方地址:https://qiankun.umijs.org/zh/guide 新建一个.vue文件 配置路由地址

    2024年02月05日
    浏览(33)
  • 微前端:qiankun的五种通信方式

    今天盘点一下 qiankun 父子应用的通信方式都有哪些,我发现了 5 种。 1、localStorage/sessionStorage 2、通过路由参数共享 3、官方提供的 props 4、官方提供的 actions 5、使用vuex或redux管理状态,通过shared分享 接下来我们一个一个进行说明 有人说这个方案必须主应用和子应用是同一个

    2024年03月21日
    浏览(36)
  • 【qiankun】前端微服务架构踩坑记录

    目录 前言 1.Cannot GET /cooperation/board 场景: 分析 解决 2.Invalid options in vue.config.js:\\\"css.requireModuleExtension\\\" is not allowed 原因 解决 3.less版本升级导致除法写法未转换 原因 解决 4.主子应用样式隔离 场景 解决 5.在webpack5中配置output报错 报错如下  原因  解决 6.微应用部署后报错 场景

    2024年02月15日
    浏览(27)
  • 【qiankun】微前端在项目中的具体使用

    在主应用的入口文件main.ts中,引入qiankun的注册方法: 创建一个数组,用于配置子应用的相关信息。每个子应用都需要提供一个名称、入口URL、挂载点和一些可选配置项。例如: 调用 registerMicroApps 方法,注册子应用: 调用 start 方法,启动qiankun微前端应用: 在主应用的根文

    2024年02月12日
    浏览(32)
  • 微前端架构-qiankun在vue3的应用

    本文章介绍了qiankun在vue3的应用,其中子应用有vue2、vue3、react、angular qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 其他几款([single-spa]、[micro-app]、[百度emp]]) 使用 iframe 整合系统时,假设我们有系统 A, 当

    2023年04月08日
    浏览(27)
  • 微前端qiankun架构 (基于vue2实现)使用教程

    node -- 16+ @vue/cli -- 5+ 创建文件夹qiankun-test。 使用vue脚手架创建主应用main和子应用dev   安装 qiankun: 使用qiankun: 在 utils 内创建 微应用文件夹 microApp,在该文件夹内创建微应用出口文件 index.js,路由文件 microAppRouter,配置函数文件 microAppSetting。 路由文件 microAppRouter 配置函数文件

    2023年04月19日
    浏览(37)
  • 基于vue3+webpack5+qiankun实现微前端

    一 主应用改造(又称基座改造) 1 在主应用中安装qiankun(npm i qiankun -S)  2 在src下新建micro-app.js文件,用于存放所有子应用。  3 改造vue.config.js,允许跨域访问子应用页面  4 改造main.js   5 在App.vue中写响应跳转子应用(根据自己的项目找对应位置写,不局限于App.vue)   需要注

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包