随着前端业务的快速发展,单体应用模式(Monolith)越来越难以支撑复杂业务场景。微前端(Micro Frontends)应运而生,它将大型应用拆解成多个子应用(Micro App),通过主应用进行统一调度和集成。

在微前端技术栈中,Qiankun(乾坤)是一个广泛使用的解决方案,基于 single-spa 封装,提供了开箱即用的微应用加载、沙箱隔离和通信机制。接下来,我们将通过一个完整的实践案例,从零构建并配置 Qiankun 微前端架构


一、qiankun 原理概述

qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助开发者更简单、无痛地构建生产可用的微前端架构系统。qiankun 通过以下核心机制实现微前端架构:

1. 应用注册与加载

qiankun 通过 registerMicroApps 方法注册子应用,并使用 loadMicroApp 方法加载子应用的资源。qiankun 支持两种加载方式:HTML Entry 和 JS Entry。HTML Entry 是 qiankun 的默认加载方式,它通过加载子应用的 HTML 文件,解析其中的 <script><link> 标签,动态加载子应用的 JavaScript 和 CSS 资源。

2. 沙箱隔离机制

为了防止子应用之间的相互干扰,qiankun 提供了两种沙箱隔离机制:Proxy 沙箱和快照沙箱。Proxy 沙箱通过 JavaScript 的 Proxy 对象,代理全局对象 window,拦截对全局对象的访问和修改,实现对子应用的隔离。快照沙箱则在子应用挂载和卸载时,分别记录和恢复 window 对象的快照,确保子应用的独立性。

3. 样式隔离机制

qiankun 提供了两种样式隔离方式:CSS 前缀和 Shadow DOM。CSS 前缀通过为子应用的 CSS 类名添加唯一前缀,避免样式冲突。Shadow DOM 则通过浏览器的 Shadow DOM 技术,将子应用的样式和 DOM 结构封装在一个独立的影子树中,实现样式的完全隔离。

4. 生命周期管理

qiankun 为每个子应用提供了生命周期钩子函数,包括 bootstrapmountunmount 等,开发者可以在这些钩子函数中编写子应用的初始化、挂载和卸载逻辑,实现对子应用的精细化管理。

5. 应用间通信

qiankun 提供了多种应用间通信方式,包括全局事件总线、props 传递和自定义事件等,开发者可以根据需要选择合适的通信方式,实现主应用与子应用之间的数据传递和事件处理。

  📌 推荐阅读

  • Qiankun 官方文档


二、基座应用(主应用)配置

1. 安装 qiankun

在主应用中安装 qiankun:

npm install qiankun --save
或者
yarn add qiankun

2. 配置路由

router/index.ts 中配置路由:

//router/index.ts{path: "/home",component: Home,meta: { requiresAuth: true },children: [{ path: "", redirect: "/home/app-store" },{path: "app-store",name: "AppStoreHome",component: AppStore,meta: { requiresAuth: true },},{path: "app-store/:appPath(.*)*",name: "AppStoreSubApp",component: SubAppView,meta: { requiresAuth: true },},// ✅ 其他微前端子应用(不在 app-store 内部){path: ":appPath(.*)*",name: "SubAppView",component: SubAppView,

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在业务应用中集成 go-commons,实现应用+系统双指标监控

在日常 Go 服务开发中&#xff0c;我们通常需要同时监控 业务指标&#xff08;比如 QPS、请求延迟、错误率&#xff09;&#xff0c;也需要关注 系统指标&#xff08;CPU、内存、磁盘占用情况&#xff09;。 过去这类场景通常要引入多个库&#xff1a;一个负责业务指标采集&…

容器化部署番外篇之docker网络通信06

一、四种网络模式 Bridge模式&#xff1a;容器的默认网关&#xff0c;默认新建容器的网络模式Host模式&#xff1a;容器和宿主机共用一个 Network&#xff0c;使用主机的IP:PORT就可以访问容器&#xff0c;但安全性不高&#xff0c;用得少Container模式&#xff1a;这个模式指定…

Linux 线程的概念

序言&#xff1a; 在这篇博客中我们将讲解线程的概念&#xff0c;如何理解线程&#xff0c;线程和进程的区别&#xff0c;线程的优缺点等&#xff0c;我相信你看完这篇博客后会以别样的视角重新理解线程&#xff0c;下面的内容全部是基于Linux操作系统的。 一、线程的概念 1…

vscode 中通义灵码显示登录过期

本文主要分享&#xff1a;vscode 中通义灵码显示登录过期的解决办法。vscode 中的小插件通义灵码&#xff0c;用的好好的&#xff0c;突然提示&#xff1a;登录过期&#xff0c;尝试访问网页版阿里云&#xff0c;登录后&#xff0c;关闭 vscode 重新打开&#xff0c;通义灵码还…

ESP32C3-MINI-1开发板踩坑记录

某东买了一个ESP32C3-MINI-1开发板&#xff0c;名字跟ESP官网的很像&#xff0c;想着应该差不多的&#xff0c;价格便宜17块&#xff0c;而官网的就贵了60还不包邮&#xff0c;买来才发现是巨坑。 看结论&#xff0c;直接到最后&#xff0c;前面都是我的踩坑过程。第一块板子发…

基于粒子群算法的山地环境无人机最短路径规划研究(含危险区域约束的三维优化方法)

无人机在复杂地形与危险环境中的自主路径规划是保障任务顺利执行的关键问题。本文针对山地环境下单无人机三维路径规划难题&#xff0c;提出了一种基于粒子群算法&#xff08;PSO&#xff09;的优化方法。首先&#xff0c;建立了包含真实地形高程、危险区域和飞行约束条件的三维…

Linux-> UDP 编程2

目录 本文说明 一&#xff1a;字典程序的几个问题 1&#xff1a;字典的本质 2&#xff1a;翻译功能的本质 3&#xff1a;让服务端和翻译功能相关联 二&#xff1a;字典类(Dict.hpp) 1&#xff1a;加载词典(Load) 2&#xff1a;翻译单词(Translate) 三&#xff1a;服务…

辉视养老方案:重塑老年生活的温馨与安心

在当今社会&#xff0c;随着老龄化进程的加速&#xff0c;如何为老年人提供更加便捷、舒适且安全的养老环境&#xff0c;成为了全社会共同关注的焦点。辉视养老方案应运而生&#xff0c;它以科技为翼&#xff0c;以关爱为心&#xff0c;通过远程探望、客控系统、信息服务、IPTV…

SQuAD:机器阅读理解领域的里程碑数据集

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 1 什么是SQuAD&#xff1f; SQuAD&#xff08;Stanford Question Ans…

【vim,Svelte】怎样使用 vim 编辑 Svelte 那些奇奇怪怪名字的文件?

当你要使用 vim&#xff08;或者neovim&#xff09;来编辑 Svelte 下面的文件时&#xff0c;比如这些文件&#xff1a; page.svelte layout.svelte$ vim page.svelte $ vim "page.svelte" $ vim page.svelte $ vim \page.svelte使用上面的命令&#xff0c;你会遇到这…

深入解析 HTTP 状态码

在日常的网络浏览和 Web 开发过程中&#xff0c;我们总会不可避免地遇到各种 HTTP 状态码。比如常见的 “404 Not Found”&#xff0c;它意味着我们所请求的页面不存在&#xff1b;还有 “500 Internal Server Error”&#xff0c;表示服务器端出现了错误。这些由三位数字组成的…

【C++】C++类和对象—(中)

前言&#xff1a;在上一篇类和对象(上)的文章中我们已经带领大家认识了类的概念&#xff0c;定义以及对类和对象的一些基本操作&#xff0c;接下来我们要逐步进入到类和对象(中)的学习。我们将逐步的介绍类和对象的核心——类和对象的六个默认成员函数。(注意&#xff1a;这六个…

使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目

今天给大家分享一个我最近做的一个学校宿舍管理系统&#xff0c;python版&#xff0c;这个系统实现的功能有&#xff1a;首页 | 学校管理 | 宿舍楼管理 | 宿舍管理 | 学生管理 | 学生调宿 | 学生退宿 | 报修等级 | 宿舍卫生评分 | 违纪记录 | 管理员管理 。一共有11个菜单。 使…

阻塞 vs 非阻塞:程序等待的两种哲学

当程序需要等待外部操作时&#xff0c;是应该"干等"还是"边等边干"&#xff1f;为什么有些程序会卡住不动&#xff0c;而另一些却能流畅运行&#xff1f;这一切都取决于阻塞与非阻塞的编程选择&#xff01;本文将为你揭示这两种模式的本质区别&#xff01;…

MySQL 核心操作全解析(用户 + SHOW+DML+DCL)

MySQL 核心操作全解析&#xff08;用户 SHOWDMLDCL&#xff09; 基于你提供的实操笔记&#xff0c;我们将 MySQL 核心操作拆解为用户管理、SHOW 查询命令、DML 数据操作、TRUNCATE 与 DELETE 对比、DCL 权限控制五大模块&#xff0c;梳理语法逻辑、补充避坑提示&#xff0c;帮…

多语言编码Agent解决方案(6)-部署和使用指南

部署和使用指南 本指南提供完整的部署和使用说明&#xff0c;帮助您设置后端服务并在VSCode、Eclipse和IntelliJ中使用相应的插件。这个解决方案基于vLLM提供AI编码辅助&#xff0c;支持英语、中文和日文。 前提条件 操作系统&#xff1a;Linux、macOS或Windows&#xff08;推荐…

滤波器的三重境界:从信号处理到自动驾驶测试的基石

在自动驾驶的宏大叙事中&#xff0c;我们常常聚焦于人工智能、深度学习、高精地图等"明星技术"。然而&#xff0c;在这些耀眼的光环背后&#xff0c;有一个低调却至关重要的"幕后英雄"——滤波器。它不仅是信号处理的工具&#xff0c;更是连接物理世界与数…

Part4.第8章:神经网络

第8章 激活函数 如果没有激活函数&#xff0c;不论几层的神经网络都是一个线性回归。激活函数的作用是引入非线性。

nextjs+shadcn+tailwindcss实现博客中的overview

最近在用nextjsshadcntailwindcss练手&#xff0c;实现一个博客。做到了overView这里&#xff0c;可实现如下效果1.首先要安装tailwindcss&#xff0c;这个在创建项目的时候就安装了。2.然后安装shadcn,官网教程&#xff1a;3.代码如下&#xff1a;import {Card,CardContent } …

Kotlin 高阶语法解析

Kotlin 高级语法深度解析1. 协程&#xff08;Coroutines&#xff09;1.1 基础概念1.挂起和恢复2.协程构建器 (Coroutine Builders)3.协程作用域4.调度器1.2 核心用法1.3 实战示例2. 密封类&#xff08;Sealed Classes&#xff09;2.1 定义与特性2.2 模式匹配2.3 应用场景3. 内联…