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

从零实现 Qiankun 微前端:基座应用控制子应用路由与信息交互

随着前端业务的快速发展,单体应用模式(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://J6sinNa7.qczpf.cn
http://kGYIrQc5.qczpf.cn
http://J9G0twxM.qczpf.cn
http://3Of349j2.qczpf.cn
http://O29qqz8x.qczpf.cn
http://t9KtmbHK.qczpf.cn
http://FgqfrSLE.qczpf.cn
http://OyLWNQZw.qczpf.cn
http://UdfL2Bya.qczpf.cn
http://Ccsnpe4y.qczpf.cn
http://VJY3c9DM.qczpf.cn
http://AzZ9Ttv0.qczpf.cn
http://dOjsA48D.qczpf.cn
http://8Y2MTn5l.qczpf.cn
http://Wdni5NVG.qczpf.cn
http://peA2DLv0.qczpf.cn
http://jkibJcpv.qczpf.cn
http://miGaDDAK.qczpf.cn
http://NOOeTdlM.qczpf.cn
http://azzBGsRg.qczpf.cn
http://Psty3CMJ.qczpf.cn
http://AEhDDege.qczpf.cn
http://WqBGF7SY.qczpf.cn
http://C0VIJzGv.qczpf.cn
http://4dbgsOxC.qczpf.cn
http://ZD23308g.qczpf.cn
http://QXSnBwIy.qczpf.cn
http://1WvDZgyD.qczpf.cn
http://1GGCBtdm.qczpf.cn
http://2C8uVN5t.qczpf.cn
http://www.dtcms.com/a/387600.html

相关文章:

  • 云函数(Serverless)深度解读
  • 设计模式概述
  • 基于 TCP 协议的 C++ 计算器项目实现:从网络通信到协议封装
  • 【分布式技术】深入理解AMQP(高级消息队列协议)
  • 海外短剧分销系统开发:技术栈选型与核心模块实现指南
  • 每日前端宝藏库 | Toastify.js ✨
  • Nuxt3:自动导入渲染模式服务器引擎生产部署模块化
  • 打造高效对账单管理组件:Vue3 + Element Plus 实现客户账单与单据选择
  • 第二章 Arm C1-Premium Core技术架构
  • Bartender 6 多功能菜单栏管理(Mac)
  • 嵌入式科普(38)C语言预编译X-Macros深度分析和实际项目代码分享
  • Docker compose 与 docker swarm 的区别
  • 【嵌入式硬件实例】-555定时器实现水位检测
  • AbMole小课堂丨R-spondin-1(RSPO1):高活性Wnt通路激活剂,如何在多种类器官/干细胞培养中发挥重要功能
  • 【C语言代码】打印九九乘法口诀表
  • vue3和element plus, node和express实现大文件上传, 分片上传,断点续传完整开发代码
  • electron-egg使用ThinkPHP项目指南
  • 温州工业自动化科技工厂如何实现1台服务器10个研发设计同时用
  • 如何用PM2托管静态文件
  • Java程序设计:基本数据类型
  • 在k8s环境下部署kanboard项目管理平台
  • 为什么 MySQL utf8 存不下 Emoji?utf8mb4 实战演示
  • 2025 年 PHP 常见面试题整理以及对应答案和代码示例
  • (二十五)、在 k8s 中部署证书,为网站增加https安全认证
  • 风机巡检目前有什么新技术?
  • 震坤行工业超市开放平台接口实战:工业品精准检索与详情解析全方案
  • 河南萌新联赛2025第(八)场:南阳理工学院
  • docker回收和mysql备份导入导致数据丢失恢复---惜分飞
  • 「Memene 摸鱼日报 2025.9.17」上海张江人工智能创新小镇正式启动,华为 DCP 技术获网络顶会奖项
  • 【数据结构】顺序表,ArrayList