從零實現 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://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. 內聯…