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

qiankun微服务

官网

📦 基于 single-spa 封装,提供了更加开箱即用的 API。
📱 技术栈无关,任意技术栈的应用均可 使用/接入,不论是 React/Vue/Angular/JQuery 还是其他等框架。
💪 HTML Entry 接入方式,让你接入微应用像使用 iframe 一样简单。
🛡​ 样式隔离,确保微应用之间样式互相不干扰。
🧳 JS 沙箱,确保微应用之间 全局变量/事件 不冲突。
⚡️ 资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度。

样式隔离和js沙箱

qiankun是一个用于构建微前端架构的开源框架,它能够实现主应用和子应用之间的对接、路由匹配以及数据共享。下面详细介绍qiankun微服务的原理及实现方式:

对接主应用和子应用qiankun通过自定义浏览器内核,将子应用嵌入到主应用中。在主应用中,通过创建一个容器(HTML元素)来承载子应用的内容,同时在容器中为子应用提供一个通信机制(Web组件:基于Custom Elements)。通过这种方式,主应用和子应用可以共同组成一个完整的前端应用,并通过通信机制进行交互。

路由匹配:qiankun使用了浏览器的前端路由(History API)来实现主应用和子应用之间的路由切换。主应用负责控制整个页面的路由,根据路由规则将请求分发到对应的子应用中。当路由匹配成功后,qiankun会将路由信息传递给子应用,子应用根据收到的路由信息进行展示。

数据共享:qiankun提供了两种方式来实现主应用和子应用之间的数据共享。

props共享:主应用通过props的方式将数据传递给子应用,并在子应用中通过props接收和使用这些数据。这种方式适用于简单的数据共享场景。

全局状态管理:qiankun支持集成其他全局状态管理库(如Redux或Vuex),子应用可以通过全局状态管理库来共享和管理数据。在主应用中初始化全局状态管理库,通过插件或其他方式将全局状态传递给子应用,子应用就可以访问和修改全局状态了。

qiankun通过封装和提供一系列工具、API和通信机制,实现了主应用和子应用的互相对接和协作。它允许你将多个独立的前端应用组合成一个整体,并能够充分利用浏览器的前端路由和现代浏览器的能力来实现子应用的动态加载和切换。同时,通过适当的数据共享机制,使得主应用和子应用之间可以共享数据,并实现整个系统的协同工作。

总的来说,qiankun是一个用于实现微前端架构的框架,通过自定义浏览器内核、路由管理和数据共享等机制,实现了主应用和子应用之间的协作和对接,使得多个独立的前端应用能够协同工作和共享资源,从而提供一种灵活、可扩展的前端架构设计。

qiankun微服务的子应用打包会有index.html文件吗?这和主应用的index.html有什么关系

在qiankun微服务中,子应用的打包通常不包含index.html文件,这是因为子应用的入口是通过主应用动态加载的,而不是直接在浏览器中独立打开。

主应用的index.html文件是整个微前端应用的入口文件,它通常包含了整个应用的框架、样式和主要的配置信息。主应用的index.html文件会通过静态资源服务或服务器部署,在用户访问时被加载和呈现。

子应用的打包生成的文件通常是一系列的静态资源文件,例如JS、CSS、图片等。这些静态资源文件会包含子应用的业务逻辑和界面组件。子应用在主应用中被加载时,主应用会动态插入一个容器(如div元素)来承载子应用的内容,并在这个容器中加载子应用的静态资源文件。

所以,主应用的index.html文件和子应用的打包文件是独立存在的,它们在整个微前端应用中承担不同的角色。主应用的index.html负责整个应用的框架和配置,而子应用的打包文件负责子应用的具体业务逻辑和界面。通过这样的组合,qiankun实现了将多个独立的前端应用组合成一个整体的微前端架构。

为了让主应用能正确识别微应用暴露出来的一些信息,微应用的打包工具需要增加如下配置:

const packageName = require('./package.json').name;
module.exports = {output: {library: `${packageName}-[name]`,libraryTarget: 'umd',chunkLoadingGlobal: `webpackJsonp_${packageName}`,},
};

按照上面这个配置文件打包后,主应用注册子应用是如何加载该文件的??

按照你提供的配置文件,子应用的打包工具将会生成一个UMD模块,并将子应用的代码注入到这个模块中。在这个UMD模块中,子应用的导出内容会被设置为全局变量,并通过前缀 ${packageName}-[name] 来访问。

当主应用注册子应用时,在加载子应用的打包文件时,可以指定这个UMD模块的全局变量名作为子应用的名称。这样,主应用就能正确识别子应用暴露出来的信息。

以下是示例代码,展示了主应用如何加载使用了上述打包配置的子应用:

import { registerMicroApps, start } from 'qiankun';// 定义子应用的配置信息
const apps = [{name: 'subapp1', // 子应用的名称entry: '//localhost:7100', // 子应用的入口URL,可以是服务器的地址和端口container: '#subapp-container', // 子应用的挂载点activeRule: '/subapp1', // 主应用的路由规则,用来匹配子应用的激活条件},// 可以继续定义其他子应用的配置信息
];// 注册子应用
registerMicroApps(apps);// 启动主应用
start();

在上述代码中,我们将子应用的名称设置为 subapp1,这个名称应该与子应用打包配置中设置的 ${packageName}-[name] 相匹配。主应用会根据注册的配置信息和子应用的名称,自动加载子应用的打包文件,并将其挂载到指定的容器中。

通过这种方式,主应用能够正确识别子应用打包后的文件,并与子应用进行交互。你可以根据实际情况,将以上示例代码中的子应用名称和其他配置信息替换为你自己的内容。

qiankun微服务主应用是如何加载子应用打包后的文件的

在qiankun微服务中,主应用加载子应用的打包文件是通过qiankun提供的注册子应用的API来实现的。下面是加载子应用的大致过程:

  1. 注册子应用:在主应用中,通过调用qiankun提供的registerMicroApp方法来注册子应用。在注册时,需要传入子应用的相关配置信息,包括子应用的名称、入口路由、资源路径等。主应用在注册完子应用后,就具备了加载和控制子应用的能力。

  2. 加载子应用:当主应用在合适的时机(如用户访问特定路由或用户交互触发)需要加载子应用时,可以调用start方法来启动已注册的子应用。这会触发主应用向子应用的静态资源路径发送一个加载请求。

  3. 动态加载资源:子应用的打包文件通常会被部署到一个静态资源服务(如CDN)或主应用的静态文件目录下。当主应用启动子应用时,会向这些资源路径发送加载请求,以获取子应用的静态资源文件。

  4. 挂载子应用:一旦主应用成功获取了子应用的静态资源文件,就会在页面中动态创建一个容器(通常是一个div元素),并将子应用的资源文件加载到这个容器中。这样就完成了子应用在主应用中的加载和挂载过程。

通过qiankun的API和机制,主应用能够动态地加载和卸载子应用,实现了整个微前端应用的灵活组合和动态管理。这样的设计让微服务架构更加灵活和可维护,使得不同团队开发的独立应用能够在一个完整的生态系统中协同工作。

在主应用中注册微应用:

当微应用信息注册完之后,一旦浏览器的 url 发生变化,便会自动触发 qiankun 的匹配逻辑,所有 activeRule 规则匹配上的微应用就会被插入到指定的 container 中,同时依次调用微应用暴露出的生命周期钩子。

import { registerMicroApps, start } from 'qiankun';
registerMicroApps([{name: 'react app', // app name registeredentry: '//localhost:7100',container: '#yourContainer',activeRule: '/yourActiveRule',},{name: 'vue app',entry: { scripts: ['//localhost:7100/main.js'] },container: '#yourContainer2',activeRule: '/yourActiveRule2',},
]);
start();

qiankun主应用和子应用是如何打包部署的

在使用qiankun构建微前端应用时,主应用和子应用可以分别进行打包和部署。

主应用的打包和部署与传统的前端应用类似。你可以使用常见的构建工具(如Webpack、Rollup、Vite等)对主应用进行打包,生成静态资源文件(例如HTML、JS、CSS等)。之后,将打包生成的静态资源文件部署到服务器或静态文件托管服务中即可。

子应用的打包和部署稍有不同,因为子应用需要能够在主应用中动态加载和执行。下面是子应用的打包和部署步骤:

  1. 子应用独立开发:子应用可以独立开发,使用自己的构建工具(如Webpack、Rollup、Vite等)进行打包,并生成静态资源文件。

  2. 导出子应用配置:在子应用的打包过程中,需要将其配置文件导出为一个特定的格式(通常是JSON对象),其中包含子应用的入口文件、打包后的静态资源文件路径等信息。这个配置文件将用于在主应用中引入子应用。

  3. 部署子应用资源:将子应用打包生成的静态资源文件和配置文件部署到一个静态资源服务(如CDN)或主应用的静态文件目录下。

  4. 注册子应用:在主应用中,通过使用qiankun提供的API,根据子应用的配置文件进行注册。主应用需要引入qiankun的相关库和函数,并在合适的时机(如应用初始化或路由切换)使用registerMicroApp方法注册子应用。

通过以上步骤,主应用和子应用就可以分别进行打包和部署。主应用通过静态资源文件在浏览器中加载和运行,而子应用则在主应用运行时动态加载并执行。这使得主应用能够灵活地控制和切换子应用的展示,实现整体的微前端架构。在部署时,你需要确保主应用和子应用的网络路径配置正确,以便能够正常加载和运行子应用。

相关文章:

qiankun微服务

官网 📦 基于 single-spa 封装,提供了更加开箱即用的 API。 📱 技术栈无关,任意技术栈的应用均可 使用/接入,不论是 React/Vue/Angular/JQuery 还是其他等框架。 💪 HTML Entry 接入方式,让你接…...

文件夹重命名方法:提高效率减少错误,中英文批量翻译文件夹名称

在日常生活和工作中,经常要处理大量的文件夹,无论是整理电脑上的文件,还是为项目分类。如何快速、准确地重命名这些文件夹,对于提高工作效率和减少错误至关重要。现在来看下云炫文件管理器一些实用的文件夹重命名方法,…...

【PHP】where和whereOr一起复杂查询示例

在ThinkPHP 5 中,where 和 whereOr 方法可以一起使用以实现复杂的查询条件。以下是一个示例: // 接收的参数 $param $this->request->param();// 实例化 $query new UserModel();// 关联表 $query->with([collect > function($collect_qu…...

Mysql 动态链接库配置步骤+ 完成封装init和close接口

1、创建新项目 动态链接库dll 2、将附带的文件都删除,创建LXMysql.cpp 3、项目设置 3.1、预编译头,不使用预编译头 3.2、添加头文件 3.3、添加类 3.4、写初始化函数 4、项目配置 4.1、右键解决方案-属性-常规-输出目录 ..\..\bin 4.2、生成lib文件 右…...

哈希一致性算法

一致性哈希是什么,使用场景,解决了什么问题? #网站分配请求问题? 大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。 但…...

基于SpringBoot的在线考试系统绿色

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的在线考试系统绿色,java…...

设计模式:原型模式

原型模式 定义代码实现使用场景 定义 原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制现有的对象来创建新对象,而无需从头开始编写代码。在这个模式中,我们可以使用已经存在的对象作为“原型”&…...

Qt5+VS2013兼容XP方法

用Qt5VS2013编译程序默认配置会在XP运行时报"不是有效的Win32程序" 工作需要必须要XP运行 pro文件中加一句: QMAKE_LFLAGS_WINDOWS /SUBSYSTEM:WINDOWS,5.01 ------------------------------------------------------- qtbase\mkspecs\common\msvc-desktop.conf …...

GitHub Copilot 最佳免费平替:阿里通义灵码

之前分享了不少关于 GitHub Copilot 的文章,不少粉丝都评论让我试试阿里的通义灵码,这让我对通义灵码有了不少的兴趣。 今天,阿七就带大家了解一下阿里的通义灵码,我们按照之前 GitHub Copilot 的顺序分享通义灵码在相同场景下的…...

体系化的进阶学习内容

UWA学堂:传播游戏行业的体系化的进阶学习内容。UWA学堂作为面向开发者的在线学习平台,目前已经上线272门课程,涵盖了3D引擎渲染、UI、逻辑代码等多个模块,拥有完整的学习体系,一直致力于为广大的开发者提供更丰富、更优…...

SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

最近在写和同学一起做一个前后端分离的项目,今日开始对接口准备进行 登录注册 的时候发现前端在发起请求后,抓包发现后端返回了一个403的错误,解决了很久发现是【跨域问题】,第一次遇到,便作此记录✍ 异常描述 在后端…...

【linux】更改infiniband卡在Debian系统的网络接口名

在Debian或任何其他基于Linux的系统中,网络接口的名称由udev系统管理。通过创建udev规则,可以修改网络接口名称。以下是更改InfiniBand卡接口名称的一般步骤: 1. 找到网络接口的属性,以编写匹配的udev规则 可以使用udevadm命令查…...

SPRING BOOT发送邮件验证码(Gmail邮箱)

SPRING BOOT邮件发送验证码 一、Gmail邮箱配置 1、进入Gmail(https://mail.google.com) 2、打开谷歌右上角设置 3、启用POP/IMP 4、启用两步验证(https://myaccount.google.com/security) 5、建立应用程式密码 6、复制保存应用程式密码 二、代码 1、引入依赖 <d…...

Liunx安装FTP和SFTP

ftp端口&#xff1a;20/21 sftp端口&#xff1a;22 一、ftp 1、安装ftp yum install vsftpd #安装ftp 服务 &#xff08;1&#xff09;查看ftp服务的状态 命令&#xff1a;service vsftpd status PS&#xff1a;提示vsftpd: command not found&#xff0c;修改PATH的环境…...

【Mars3d】new mars3d.layer.GeoJsonLayer({不规则polygon加载label不在正中间的解决方案

问题&#xff1a; 1.new mars3d.layer.GeoJsonLayer({type: "polygon",在styleOptions里配置label的时候&#xff0c;发现这个 不规则polygon加载的时候&#xff0c;会出现label不在中心位置。 graphicLayer new mars3d.layer.GeoJsonLayer({ name: "全国省界…...

怎么快速修复mfc140.dll文件?解决mfc140.dll缺失的方法

面对计算机报告的 ​mfc140.dll​ 文件遗失错误&#xff0c;这通常表明系统中缺少一个关键的动态链接库文件&#xff0c;该文件对于运行以 Microsoft Foundation Class (MFC) 库编写的程序十分重要&#xff0c;尤其是那些需要图形界面的应用程序和一些游戏。若没有这个文件&…...

安全防御之入侵检测与防范技术

安全防御中的入侵检测与防范技术主要涉及到入侵检测系统&#xff08;IDS&#xff09;和入侵防御技术&#xff08;IPS&#xff09;。 入侵检测系统&#xff08;IDS&#xff09;是一种对入侵行为自动进行检测、监控和分析的软件与硬件的组合系统。IDS通过从计算机网络或系统中的若…...

Leetcode2807. 在链表中插入最大公约数

Problem: 2807. 在链表中插入最大公约数 文章目录 题目思路注意点Code 题目思路 模拟插入流程&#xff1a; 检测当前节点是否有后置结点&#xff1b;将当前结点与后置结点的值做最大公约数处理得到新结点的值&#xff0c;然后插入到当前结点之后&#xff1b;再将检测结点向后…...

MySQL-DML

DML是数据操纵语言&#xff0c;用来对表中数据进行增删改操纵。 添加数据&#xff1a;INSERT 1.给指定字段添加数据&#xff1a;INSERT INTO 表名(字段名1,字段名2,...)VALUES(值1,值2); 2.给全部字段添加数据&#xff1a;INSERT INTO 表名VALUES(值1,值2) 3.给指定字段批量添…...

开源项目 | 完整部署流程、一款开源人人可用的开源数据可视化分析工具

&#x1f4da; 项目介绍 在互联网数据大爆炸的这几年&#xff0c;各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具&#xff0c;我们能够大幅提升数据分析效率、生成更高质量的项目报告&#xff0c;让用户通过直观的数据看到结…...

我建立了一个资源分享群

我建立了一个资源分享群 在为寻找资源犯愁&#xff1f; 在为分享资源犯愁&#xff1f; 一起加入分享资源群&#xff08;是wx群哦&#xff09;吧&#xff01;你可以分享自己的资源帮助他人。你可以在群组里需求资源获取别人的帮助。发广告请绕行&#xff0c;会被拉黑哦 微信…...

C++中几个常用的类型选择模板函数

std::enable_if<B, T>::type 如果编译期满足B&#xff0c;那么返回类型T&#xff0c;否则编译报错 std::conditional<B, T, F>::type 如果编译期满足B&#xff0c;那么返回类型T&#xff0c;否则返回类型F 下面是一个示例&#xff0c;展示如何使用 std::condit…...

【LeetCode】1321. 餐馆营业额变化增长

表: Customer ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | | visited_on | date | | amount | int | ------------------------ 在 SQL 中&#xff0c;(custo…...

【网络技术】【Kali Linux】Wireshark嗅探(八)动态主机配置协议(DHCP)

一、实验目的 本次实验使用 Wireshark &#xff08;“网鲨”&#xff09;流量分析工具进行网络流量嗅探&#xff0c;旨在初步了解动态主机配置协议&#xff08;DHCP协议&#xff09;的工作原理。 二、DHCP协议概述 动态主机配置协议&#xff08; D ynamic H ost C onfigurat…...

算法29:不同路径问题(力扣62和63题)--针对算法28进行扩展

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff0…...

openGauss学习笔记-188 openGauss 数据库运维-常见故障定位案例-core问题定位

文章目录 openGauss学习笔记-188 openGauss 数据库运维-常见故障定位案例-core问题定位188.1 磁盘满故障引起的core问题188.1.1 问题现象188.1.2 原因分析188.1.3 处理办法 188.2 GUC参数log_directory设置不正确引起的core问题188.2.1 问题现象188.2.2 原因分析188.2.3 处理办…...

kubernetes入门到进阶(5)

目录 镜像仓库&#xff1a;怎么用好docker hub这个宝藏 什么是镜像仓库&#xff08;Registry&#xff09; 什么是docker hub 如何在docker hub上挑选镜像 docker hub上进行概念股命名规则是什么 该怎么上传自己的镜像 离线环境该怎么办 小结 镜像仓库&#xff1a;怎么用好docke…...

【字典树Trie】LeetCode-139. 单词拆分

139. 单词拆分。 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s "leetcode&q…...

pytest常用的第三方插件介绍

本节介绍了如何安装和使用第三方插件。如果你想要编写自己的插件&#xff0c;请参阅“编写插件”。 通过pip可以轻松安装第三方插件&#xff1a; pip install pytest-NAME pip uninstall pytest-NAME如果已经安装了插件&#xff0c;pytest会自动找到并集成它&#xff0c;无需手…...

【经验】VSCode连接远程服务器(可以使用git管理、方便查看和编辑Linux源码)

1、查看OpenSSH Windows10通常自带OpenSSH不需要安装。 Windows10下检查是否已经安装OpenSSH的方法: 1)按下快捷键Win + X,选择Windows PoweShell(管理员) 2)输入以下指令: Get-WindowsCapability -Online | ? Name -like ‘OpenSSH*’ 3)如果电脑未安装OpenSSH,…...

gif表情包制作网站/爱站网长尾词挖掘

在C中enum类型仅仅相当于一系列的整数常量&#xff0c;如果要在日志中显示或标准输出打印时需要把整数与一个字符串对应起来&#xff0c;从配置文件中读取时为了配置文件的可读性最好配置的是字符串名称而不是数字&#xff0c;使用enum类型很不方便&#xff0c;而在C#和Java中都…...

林芝做网站/做seo网页价格

今天测试一款Chrome插件&#xff0c;这款插件提供了一些本地页面做测试用&#xff0c;在解决一些技术问题之后&#xff0c;在插件的官网上可以测试成功了&#xff0c;但是在本地页面上测试时Chrome始终会拦截插件&#xff0c;即使在右上角的地址栏中允许该本地页面始终使用插件…...

个人做的网站能备案吗/昆明seocn整站优化

daimayuan464. 数数 &#xff08;区间小于等于k的个数 离线树状数组&#xff09; 分析&#xff1a; [l, r]中不大于h的数字数量&#xff0c;等于[1,r]中不大于h的数字数量减去[1, l - 1]中不大于h的数字数量。故q次查询变为2*q次查询。 树状数组tree[i]维护的是数字i&#xff0…...

给女朋友做网站的素材/常德网站建设公司

MyBatis&#xff1a;ResultMap详解 一、前言                               MyBatis是基于“数据库结构不可控”的思想建立的&#xff0c;也就是我们希望数据库遵循第三范式或BCNF&#xff0c;但实际事与愿违&#xff0c;那么结果集映射就是My…...

网站开发环境分析/今日国际重大新闻

多态的运行机制 多态的运行机制insteadof 接口之间虽然可以互相转换&#xff0c;编译器不报错&#xff0c;但运行的时候会报错 A is a B 表示A和B是继承关系 A has a B 表示B是A中的一个对象&#xff0c;即A保存有B的内存地址...

国外网站博客网站也可以做引流/seo网站排名优化快速排

下面是mongodb的一些基本概念&#xff1a; 文档是MongoDB中数据的基本单元&#xff0c;类似关系数据库中的行。集合&#xff0c;是存储文档的容器&#xff0c;类似关系数据库中的表。MongoDB的单个实例容纳多个数据库&#xff0c;每个数据库都有自己的集合和权限。每一个文档都…...