【前端知識】微前端框架qiankun

微前端框架qiankun

    • 簡介
      • 一、核心思想
      • 二、主要特性
      • 三、關鍵技術
      • 四、使用場景
      • 五、使用示例
      • 六、優勢與劣勢
      • 七、總結
    • 使用
      • 一、創建主應用(Angular CLI項目)
      • 二、創建子應用(Vue CLI項目)
      • 三、啟動并測試
    • 使用場景
      • 一、大型前端應用的拆分與整合
      • 二、獨立開發與部署
      • 三、增量升級與局部更新
      • 四、應用間的通信與共享
      • 五、跨域與安全性
    • Web Components簡介
      • 一、概念與特點
      • 二、核心組成部分
      • 三、使用場景
      • 四、優勢與挑戰
      • 五、未來發展

簡介

Qiankun是一款由螞蟻金服推出的微前端框架,它基于single-spa進行二次開發,旨在將Web應用由單一的單體應用轉變為多個小型前端應用聚合為一的應用。以下是對Qiankun的詳細介紹:

一、核心思想

Qiankun借鑒了微服務的架構理念,將一個龐大的前端應用拆分為多個獨立靈活的小型應用,每個應用都可以獨立開發、獨立運行、獨立部署,再將這些小型應用聯合為一個完整的應用。這種方式既可以將多個項目融合為一,又可以減少項目之間的耦合,提升項目擴展性。

二、主要特性

  1. 模塊化:將大型前端應用拆分為多個小型模塊,每個模塊都是一個獨立的微應用。
  2. 獨立開發:每個微應用可以由不同的團隊獨立開發,使用不同的技術棧。
  3. 獨立運行:微應用可以獨立運行,通過前端路由和頁面嵌入等技術實現模塊之間的相互調用和通信。
  4. 獨立部署:微應用可以獨立部署,無需整個應用重啟即可更新單個微應用。
  5. 技術棧無關性:允許使用不同的編程語言和框架進行開發,提高開發團隊的靈活性。

三、關鍵技術

  1. 基于路由的拆分:主應用根據路由的變化來加載和卸載不同的微應用。
  2. Web Components:利用Web Components技術封裝微應用,實現組件級別的隔離和復用。但需要注意的是,Web Components的兼容性可能因瀏覽器而異。
  3. iframe:通過iframe嵌入微應用,實現簡單的隔離和加載。但iframe的隔離性較強,可能導致樣式和腳本的沖突。
  4. 沙箱運行環境:Qiankun提供了沙箱機制,確保微應用之間的全局變量和事件不沖突。沙箱技術通過攔截和修改微應用對全局作用域(如window對象)的訪問,實現微應用之間的隔離。

四、使用場景

Qiankun適用于以下場景:

  1. 大型前端應用需要拆分為多個小型應用,以提高開發效率和可維護性。
  2. 不同技術棧、不同團隊需要獨立開發、獨立部署的應用。
  3. 需要實現應用間的增量升級和局部更新。

五、使用示例

以下是一個使用Qiankun搭建Vue微前端應用的簡單示例:

  1. 創建主應用:使用Vue或其他框架創建一個主應用,作為基座項目。在主應用中配置路由、權限等。
  2. 注冊微應用:在主應用中注冊需要加載的微應用信息,包括微應用名稱、入口地址、掛載節點、激活規則等。
  3. 啟動Qiankun:在主應用的入口文件中引入Qiankun,并調用其提供的API來啟動微前端框架。
  4. 配置微應用:在每個微應用中配置公共路徑(public-path),以確保微應用能夠正確加載資源。
  5. 啟動應用:分別啟動主應用和各個微應用。

六、優勢與劣勢

優勢

  1. 技術兼容性好:各個子應用可以基于不同的技術架構。
  2. 接入方式簡單:像使用iframe一樣接入微應用。
  3. 耦合性低:各個團隊可以獨立開發,互不干擾。
  4. 可維護性和擴展性好:便于局部升級和增量升級。

劣勢

  1. 無法支持多實例場景。
  2. 對Vite等現代前端構建工具的支持不夠友好,需要改動較多的代碼。
  3. 子應用間的資源共享能力較差,可能導致項目總體積變大。
  4. 開發人員需要處理分布式系統的復雜性。

七、總結

Qiankun是一款功能強大的微前端框架,它通過將大型前端應用拆分為多個小型應用,提高了開發效率和可維護性。同時,Qiankun提供了沙箱機制,確保了微應用之間的隔離性。然而,Qiankun也存在一些局限性,如不支持多實例場景、對Vite等構建工具的支持不夠友好等。因此,在選擇是否使用Qiankun時,需要根據具體項目的需求和團隊的技術棧進行綜合考慮。

使用

以下是一個完整的例子,用于說明qiankun微前端框架的使用。在這個例子中,我們將創建一個主應用(Angular CLI項目)和一個子應用(Vue CLI項目),并將它們集成在一起。

一、創建主應用(Angular CLI項目)

  1. 安裝Angular CLI并創建項目
npm install -g @angular/cli
ng new angular-app
cd angular-app
  1. 安裝qiankun
npm i qiankun --save
  1. 創建掛載子應用的頁面并配置路由

    在Angular項目中創建一個新的組件用于掛載子應用,并配置路由以指向該組件。

ng g component views/vue-page

配置路由(app-routing.module.ts):

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { VuePageComponent } from './views/vue-page/vue-page.component';const routes: Routes = [{ path: 'home', component: VuePageComponent }
];@NgModule({imports: [RouterModule.forRoot(routes)],exports: [RouterModule]
})
export class AppRoutingModule { }

VuePageComponent的HTML模板中添加一個容器元素用于掛載子應用:

<div id="container"></div>
  1. 在主應用中注冊子應用

    main.ts中導入qiankun并注冊子應用:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { registerMicroApps, start } from 'qiankun';platformBrowserDynamic().bootstrapModule(AppModule).catch(err => console.error(err));registerMicroApps([{name: 'vueChildOne',entry: '//localhost:8080', // 子應用的請求地址container: '#container', // 掛載到主應用的哪個元素下activeRule: '/vue-app', // 路由地址為/vue-app時,加載該子應用}
]);start();

二、創建子應用(Vue CLI項目)

  1. 安裝Vue CLI并創建項目
npm install -g @vue/cli
vue create vue-app
cd vue-app
  1. 安裝qiankun
npm i qiankun --save
  1. 在子項目中添加public-path.js

    src目錄下創建一個public-path.js文件,并添加以下代碼:

if (window.__POWERED_BY_QIANKUN__) {__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
  1. 修改Vue項目的入口文件

    main.js中導出生命周期鉤子,并處理路由和渲染邏輯:

import './public-path';
import Vue from 'vue';
import VueRouter from 'vue-router';
import App from './App.vue';
import routes from './router';Vue.config.productionTip = false;let router = null;
let instance = null;function render(props = {}) {const { container } = props;router = new VueRouter({base: window.__POWERED_BY_QIANKUN__ ? '/vue-app' : '/',mode: 'history',routes,});instance = new Vue({router,render: h => h(App),}).$mount(container ? container.querySelector('#app') : '#app');
}// 獨立運行時
if (!window.__POWERED_BY_QIANKUN__) {render();
}export async function bootstrap() {console.log('[vue] vue app bootstraped');
}export async function mount(props) {console.log('[vue] props from main framework', props);render(props);
}export async function unmount() {instance.$destroy();instance.$el.innerHTML = '';instance = null;router = null;
}
  1. 配置路由

    src/router/index.js中配置路由:

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/views/Home.vue';Vue.use(Router);const routes = [{path: '/',name: 'Home',component: Home},// 其他路由配置...
];const router = new Router({base: process.env.BASE_URL,mode: 'history',routes
});export default router;
  1. 配置微應用的打包工具

    vue.config.js中添加以下配置,以便主應用能夠正確加載子應用的資源:

module.exports = {configureWebpack: {output: {library: `${name}-[name]`,libraryTarget: 'umd',jsonpFunction: `webpackJsonp_${name}`,},},
};

三、啟動并測試

  1. 啟動子應用
npm run serve

確保子應用在localhost:8080上運行(或根據你的配置調整端口)。

  1. 啟動主應用
ng serve
  1. 訪問主應用

在瀏覽器中訪問http://localhost:4200/home(或根據你的Angular項目配置調整端口和路徑)。你應該會看到主應用的頁面,并且當路由匹配到/vue-app時,會加載并展示Vue子應用。

通過以上步驟,你就成功地使用qiankun將一個Angular主應用和一個Vue子應用集成在了一起。這只是一個簡單的例子,qiankun還支持更多高級功能,如應用間通信、樣式隔離等,你可以根據需要進行進一步的配置和開發。

使用場景

微前端框架qiankun的使用場景主要包括以下幾個方面:

一、大型前端應用的拆分與整合

  1. 巨石應用的拆分

    • 在大型前端應用中,隨著業務的發展和功能的增加,應用可能會變得非常龐大和復雜,難以維護和擴展。
    • 使用qiankun可以將這些大型應用拆分為多個小型、獨立的微應用,每個微應用都可以獨立開發、部署和迭代,從而提高開發效率和應用的可維護性。
  2. 多技術棧的整合

    • 在大型項目中,可能會使用多種不同的前端技術棧,如React、Vue、Angular等。
    • qiankun支持任意技術棧的應用接入,使得不同技術棧的微應用可以在同一個主應用中協同工作,實現技術的多樣性和靈活性。

二、獨立開發與部署

  1. 獨立開發
    • 不同的微應用可以由不同的團隊獨立開發,每個團隊都可以使用自己熟悉的技術棧和工具鏈。
    • 這種獨立開發的方式可以提高開發效率,減少團隊之間的依賴和沖突。
  2. 獨立部署
    • 每個微應用都可以獨立部署和更新,無需整個應用重啟即可更新單個微應用。
    • 這種獨立部署的方式可以減少更新對整個應用的影響,提高系統的穩定性和可靠性。

三、增量升級與局部更新

  1. 增量升級
    • 在面對各種復雜場景時,我們通常很難對一個已經存在的系統做全量的技術棧升級或重構。
    • 使用qiankun可以實現微應用的增量升級,即只更新需要升級的微應用部分,而不需要對整個系統進行重構或升級。
  2. 局部更新
    • 當某個微應用需要更新時,只需要更新該微應用的代碼和資源,而不需要更新整個應用。
    • 這種局部更新的方式可以減少更新帶來的風險和成本,提高系統的可維護性和可擴展性。

四、應用間的通信與共享

  1. 應用間通信

    • qiankun提供了多種應用間通信的方式,如全局狀態管理、事件總線等。
    • 這些通信方式可以使得不同的微應用之間能夠方便地傳遞數據和事件,實現應用間的協同工作。
  2. 資源共享

    • 在微前端架構中,不同的微應用可能需要共享一些公共的資源或組件。
    • qiankun支持在主應用中定義和共享這些公共資源和組件,使得不同的微應用能夠方便地復用這些資源和組件。

五、跨域與安全性

  1. 跨域問題

    • 在微前端架構中,不同的微應用可能部署在不同的域名下,這可能會導致跨域問題。
    • qiankun提供了一些解決方案來處理跨域問題,如使用CORS(跨來源資源共享)策略、JSONP等。
  2. 安全性

    • 微前端架構可能會增加一些安全性問題,如跨站腳本攻擊(XSS)、點擊劫持等。
    • qiankun提供了一些安全措施來防范這些攻擊,如使用沙箱機制、內容安全策略(CSP)等。

綜上所述,qiankun微前端框架的使用場景非常廣泛,適用于大型前端應用的拆分與整合、獨立開發與部署、增量升級與局部更新以及應用間的通信與共享等場景。同時,qiankun也提供了一些解決方案來處理跨域問題和安全性問題。

Web Components簡介

Web Components是一套技術規范,由一系列不同的Web平臺特性組成,允許開發者創建可復用的自定義元素(custom elements)和組件。以下是對Web Components的詳細介紹:

一、概念與特點

  1. 概念

    • Web Components是瀏覽器環境提供的一套API和模板,支持原生實現組件化。
    • 開發者可以方便地創建可重用的定制元素,這些元素具有封裝好的結構、樣式和腳本。
  2. 特點

    • 組件化:可以將復雜的UI組件封裝成一個可重用的單元,有助于提高開發效率和代碼復用性。
    • 跨平臺:Web Components可以跨瀏覽器、跨框架使用,不受特定技術棧的限制。
    • 隔離性:通過Shadow DOM可以避免組件的樣式和行為受到外部影響,提供了良好的隔離性。
    • 封裝性:提供了一種封裝和保護組件內部結構和樣式的機制,使得組件的樣式和行為不會受到外部的影響。

二、核心組成部分

Web Components實際上是一系列技術的組合,主要包含以下三部分:

  1. 自定義元素(Custom Elements)

    • 在HTML基礎標簽外擴展自定義標簽元素,即平時使用的框架組件。
    • 通過customElements.define()方法注冊自定義元素。
  2. Shadow DOM

    • 主要用于將Shadow DOM的內容與外層document DOM隔離。
    • 可以理解為在document中的一個子容器,放置各種組件。
    • 使用Element.attachShadow()方法將一個Shadow DOM附加到自定義元素上。
  3. HTML模板(HTML Templates)

    • 使用<template>來定義組件模板。
    • <template>標簽內部的內容在初始時不會渲染到頁面上,但可以通過JavaScript動態地插入到DOM中。
    • 使用<slot>作為插槽,允許外部內容插入到模板中的指定位置。

三、使用場景

  1. 創建自定義UI元素

    • Web Components允許開發者定義自己的HTML元素,這些元素具有封裝好的結構、樣式和腳本。
    • 可以像標準HTML元素一樣在DOM中使用。
  2. 構建組件化應用

    • 通過Web Components,開發者可以構建組件化的應用,提高代碼的復用性和可維護性。
    • 每個組件都是獨立的,可以單獨開發、測試和部署。
  3. 跨框架開發

    • Web Components是瀏覽器原生支持的API,因此它們可以在不同的前端框架(如React、Vue)中被無縫集成和使用。
    • 這有助于解決不同框架之間的兼容性問題,實現跨框架的組件復用。

四、優勢與挑戰

  1. 優勢

    • 技術棧無關性:允許使用不同的編程語言和框架進行開發。
    • 樣式隔離:通過Shadow DOM實現組件樣式的隔離,避免樣式沖突。
    • 性能優化:由于組件的獨立性,可以實現對特定組件的緩存和懶加載,提高頁面性能。
  2. 挑戰

    • 瀏覽器兼容性:雖然Web Components已經在現代瀏覽器中得到了較好的支持,但在一些老舊瀏覽器中可能仍然存在問題。
    • 學習成本:Web Components涉及到多個技術點,需要較高的技術水平和學習成本。
    • 性能問題:在某些情況下,Web Components可能會增加網頁的加載時間和渲染時間,需要進行優化和測試。

五、未來發展

隨著Web Components的不斷發展,W3C正在推進Web Components的標準化工作。未來,它將成為Web開發的一個標準特性,得到更廣泛的支持和應用。同時,越來越多的組件庫和工具鏈會涌現出來,為Web Components的開發和使用提供更多的支持和便利。

綜上所述,Web Components是一種強大的技術,它允許開發者以統一的方式封裝自定義的UI組件,并在任何網頁上使用。通過充分利用其組件化、跨平臺、隔離性和封裝性等特性,開發者可以構建出高效、可維護和可擴展的Web應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62509.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62509.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu22.04深度學習環境安裝【Anaconda+Pycharm】

anaconda可以提供多個獨立的虛擬環境&#xff0c;方便我們學習深度學習&#xff08;比如復現論文&#xff09;&#xff1b; Pycharm編輯器可以高效的編寫python代碼&#xff0c;也是一個很不錯的工具。 下面就記錄下Ubuntu22.04的安裝流程&#xff1a; 1.Anaconda安裝 下載Ana…

Transformer圖解

前言 transformer是目前NLP甚至是整個深度學習領域不能不提到的框架&#xff0c;同時大部分LLM也是使用其進行訓練生成模型&#xff0c;所以transformer幾乎是目前每一個機器人開發者或者人工智能開發者不能越過的一個框架。接下來本文將從頂層往下去一步步掀開transformer的面…

網絡安全在數字時代保護庫存數據中的作用

如今&#xff0c;通過軟件管理庫存已成為一種標準做法。企業使用數字工具來跟蹤庫存水平、管理供應鏈和規劃財務。 然而&#xff0c;技術的便利性也帶來了網絡威脅的風險。黑客將庫存數據視為有價值的目標。保護這些數據不僅重要&#xff0c;而且必不可少。 了解網絡安全及其…

種子流和花粉流怎么理解它們之間的大小關系

種子流和花粉流是植物繁殖和遺傳多樣性研究中的兩個重要概念&#xff0c;它們分別描述了種子和花粉在空間上的傳播過程。理解它們之間的大小關系&#xff0c;即傳播距離和對遺傳結構的影響&#xff0c;對于生態學和保護生物學具有重要意義。 種子流&#xff08;Seed Dispersal&…

唇形同步視頻生成工具:Wav2Lip

一、模型介紹 今天介紹一個唇形同步的工具-Wav2Lip&#xff1b;Wav2Lip是一種用于生成唇形同步&#xff08;lip-sync&#xff09;視頻的深度學習算法&#xff0c;它能夠根據輸入的音頻流自動為給定的人臉視頻添加準確的口型動作。 &#xff08;Paper&#xff09; Wav2Lip模型…

C編程求助問題:實驗報告類型如何畫出流程圖并編寫程序?

求助問題&#xff1a;請問一下怎么做 是實驗報告類型的 畫出流程圖并編寫程序&#xff1a; (1) 從鍵盤上任意輸入5個字母&#xff0c;按ASCII從小到大的順序依次排列輸出。 (2) 輸入某個字母&#xff0c;查找題(1)數組中是否存在&#xff0c;若存在則輸出該字母在數組中的位置。…

C—指針初階(2)

如果看完閣下滿意的話&#xff0c;能否一鍵三連呢&#xff0c;我的動力就是大家的支持與肯定&#xff0c;沖&#xff01; 二級指針 我們先看概念以及作用&#xff1a;用來存放一級指針的地址的指針 先看例子&#xff0c;我們逐一分析 我們先分析上面那個“1” 標注那里&#x…

Gradle-學習

本來沒有想了解Gradle&#xff0c;但是在想看SpringBoot源碼的時候發現&#xff0c;在SpringBoot2.2.8版本之后&#xff0c;不再使用maven進行構建&#xff0c;而是使用Gradle。想著把SpringBoot源碼導入idea學習下源碼&#xff0c;但是來來回回折騰了好幾回&#xff0c;都是報…

PE文件結構:NT頭部

NT 頭部&#xff08;NT Header&#xff09;是 PE 文件格式的核心部分之一&#xff0c;它包含了有關程序如何加載、執行以及一些重要的文件屬性。NT 頭部常被認為是 PE 頭部 的核心或“真正的”PE 頭部&#xff0c;因為操作系統加載 PE 文件時&#xff0c;首先會查找 DOS 頭部的…

Oracle EBS FA 如何打開關閉的資產會計期間?

用戶“運行折舊”,誤勾選為“關閉期間”,還有一部分資產還需要操作報廢和調整,希望后臺打開關閉的資產會計期 系統環境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.9 解決方案 由官方提供SQL腳本代碼如下: /*rollback120.sql - for Release 12.X only(based on r…

算法基礎學習Day6(動態窗口)

文章目錄 1.題目2.題目解答1.最大連續1的個數題目及題目解析算法學習思路一:暴力解法思路二:滑動窗口 代碼提交 2.將x減到0的最小操作數題目及題目解析算法學習滑動窗口解決問題 代碼提交 1.題目 1004. 最大連續1的個數 III - 力扣&#xff08;LeetCode&#xff09;1658. 將 x…

基于springboot+vue的公交線路查詢系統(全套)

一、系統架構 前端&#xff1a;vue | element-ui | html 后端&#xff1a;springboot | mybatis-plus 環境&#xff1a;jdk1.8 | mysql | maven | nodejs 二、代碼及數據庫 三、功能介紹 01. web端-首頁1 02. web端-首頁2 03. web端-注冊 04. web端-登錄 …

ASP.NET Core8.0學習筆記(二十五)——EF Core Include導航數據加載之預加載與過濾

一、導航屬性數據加載 1.在EF Core中可以使用導航屬性來加載相關實體。 2.加載實體的三種方式&#xff1a; (1)預先加載&#xff1a;直接在查詢主體時就把對應的依賴實體查出來&#xff08;作為初始查詢的一部分&#xff09; (2)顯式加載&#xff1a;使用代碼指示稍后顯式的從…

Linux 基礎環境的開發工具以及使用(下)

1. make / Makefile 自動化構建的工具 1&#xff09;引入 在我們進行一些大型的工程的時候&#xff0c;代碼量是極其大&#xff0c;當我們代碼在進行一系列的編譯的時候&#xff0c;難免會出現一些錯誤&#xff0c;當我們對錯誤進行一系列的更改之后&#xff0c;難道我們需要…

沃豐科技智能客服在跨境電商獨立站中的核心角色

隨著全球化進程的加速和互聯網技術的不斷發展&#xff0c;跨境電商行業蓬勃興起&#xff0c;為消費者提供了更廣闊、更便捷的購物選擇。在這樣一個競爭激烈的市場環境中&#xff0c;優質的客戶服務成為了企業脫穎而出的關鍵。沃豐科技智能客服憑借其先進的技術和人性化的設計理…

uniapp 彈出軟鍵盤后打開二級頁面,解決其UI布局變動

軟鍵盤彈出&#xff0c;此時點擊某按鈕打開二級頁面&#xff0c;position:fixed 位于底部的按鈕不見了&#xff08;通過加高其區域&#xff0c;發現被下移動了&#xff09;&#xff0c;什么原因不清楚? 但是發現是軟鍵盤彈出導致&#xff0c;問題解決通過隱藏鍵盤再打開二級頁…

Centos7下搭建Prometheus+Grafana監控

Prometheus 監控 Prometheus 監控系統的架構包括以下組件&#xff1a; Prometheus Server&#xff1a; Prometheus 服務器是監控系統的核心組件&#xff0c;負責收集、存儲和處理指標數據。它定期從各種數據源&#xff08;如 Exporter、Agent 等&#xff09;拉取指標數據&…

MyBatis-Plus(為簡化開發而生)

一、MyBatis-Plus概述 官網&#xff1a; baomidou.com MyBatis-Plus&#xff08;簡稱 MP&#xff09; 在 MyBatis 的基礎上只做增強不做改變&#xff0c;為簡化開發、提高效率而生。 &#xff08;1&#xff09;單表操作 不需要編寫sql語句&#xff0c;封裝方法&#xff0c;…

深入解析 C++11 的 `std::atomic`:誤區、性能與實際應用

在現代 C 開發中&#xff0c;std::atomic 是處理多線程同步時的重要工具之一。它通過提供原子操作保證了線程安全&#xff0c;但在實際使用時卻隱藏著許多不為人知的陷阱和性能影響。本篇文章將帶你深入理解 std::atomic 的使用方式、潛在問題&#xff0c;以及如何正確應用于多…

芋道源碼,芋道sql,yudao,yudao-vue-pro拒絕割韭菜

芋道的開發指南實際上只需要小小的操作就可以觀看啦 為了避免被割韭菜 我們可以使用插件去進行解鎖文檔 項目地址 otomayss/free-yd (github.com)[這里是圖片002]https://github.com/otomayss/free-yd