使用 Vue3 + Webpack 和 Vue3 + Vite 實現微前端架構(基于 Qiankun)

在現代前端開發中,微前端架構逐漸成為一種流行的解決方案,尤其是在大型項目中。通過微前端,我們可以將一個復雜的單體應用拆分為多個獨立的小型應用,每個子應用可以獨立開發、部署和運行,同時共享主應用的基礎設施。本文將詳細介紹如何使用 Vue3 + Webpack 作為主項目,Vue3 + Vite 作為子項目,并通過 Qiankun 實現微前端架構。


主項目配置(Vue3 + Webpack)

主項目是整個微前端架構的核心,它負責加載和管理子應用。以下是主項目的配置步驟:

1. 安裝依賴

首先,確保安裝了 qiankun,這是微前端的核心庫:

npm install qiankun --save

2. 配置主應用注冊子應用

在主項目的 main.js 文件中,引入并配置 registerMicroAppsstart 方法:

import { registerMicroApps, start } from 'qiankun';registerMicroApps([{name: 'application', // 子應用名稱entry: 'http://部署地址.com/sub-app', // 子應用入口地址container: '#sub-app-container', // 子應用掛載的 DOM 容器activeRule: '#/sub-app', // 激活規則,這里直接使用哈希路徑props: {/* 可以傳遞給子應用的參數 */},},
]);// 啟動微前端
start();

3. 路由配置

為了讓主應用能夠正確加載子應用,需要在主應用的路由配置中添加一條通配符規則:

{path: '/sub-app/:page*', // 使用通配符 * 匹配所有子路由name: 'sub-app',component: () => import('@/views/subapp.vue'), // 子應用容器組件meta: { name: '子應用' },
}

這里的 subapp.vue 是一個簡單的容器組件,用于掛載子應用的內容:

<template><div id="sub-app-container"></div>
</template>

子項目配置(Vue3 + Vite)

子項目是一個獨立的 Vue3 應用,使用 Vite 構建工具進行開發和打包。以下是子項目的配置步驟:

1. 安裝依賴

確保安裝了以下依賴:

npm install vite-plugin-qiankun --save-dev

2. 配置 vite.config.js

在子項目的 vite.config.js 文件中,配置 vite-plugin-qiankun 插件:

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import qiankun from "vite-plugin-qiankun";export default defineConfig({plugins: [vue(),qiankun("application", {useDevMode: true, // 開發模式下啟用}),],resolve: {alias: {"@": "/src",},},server: {port: 7001, // 開發服務器端口headers: {"Access-Control-Allow-Origin": "*", // 允許跨域},},build: {assetsDir: 'static', // 靜態資源目錄rollupOptions: {output: {chunkFileNames: 'static/js/[name]-[hash].js',entryFileNames: 'static/js/[name]-[hash].js',assetFileNames: 'static/[ext]/[name]-[hash].[ext]',},},},base: '/sub-app/', // 部署時的基礎路徑
});

3. 路由配置

子應用的路由需要根據是否運行在微前端環境中動態調整基礎路徑:

import { createRouter, createWebHashHistory } from 'vue-router';
import { qiankunWindow } from 'vite-plugin-qiankun/dist/helper';const routes = [{path: '/sub-app/abort',name: 'abort',component: () => import('@/views/abort.vue'),},{path: '/sub-app/home',name: 'home',component: () => import('@/views/home.vue'),},
];const base = qiankunWindow.__POWERED_BY_QIANKUN__ ? '/sub-app' : '/';
const router = createRouter({history: createWebHashHistory(base),routes,
});export default router;

4. 主入口文件 main.ts

在子項目的 main.ts 中,處理微前端環境下的掛載邏輯:

import { createApp } from "vue";
import router from "./router";
import App from "./App.vue";
import { renderWithQiankun, qiankunWindow } from "vite-plugin-qiankun/dist/helper";
import ElementPlus from "element-plus";
import locale from "element-plus/es/locale/lang/zh-cn";
import "element-plus/dist/index.css";
import * as ElementPlusIconsVue from "@element-plus/icons-vue";let app;function render(props = {}) {const { container } = props;app = createApp(App);app.use(router);app.use(ElementPlus, { locale });for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component);}app.mount(container ? container.querySelector("#app") : "#app");
}const initQianKun = () => {renderWithQiankun({mount(props) {console.log("vite 應用掛載", props);render(props);},bootstrap() {console.log("vite-vue3 初始化");},unmount() {console.log("vite-vue3 卸載");app.unmount();},});
};qiankunWindow.__POWERED_BY_QIANKUN__ ? initQianKun() : render({});

Nginx 配置

為了將子應用的靜態資源部署到主應用的服務器上,我們需要在主項目的 Nginx 配置中添加子應用的路徑規則:

location /sub-app/ {root /path/to/main-project; # 主項目的根目錄index /sub-app/index.html;
}

在主項目的根目錄下創建一個 sub-app 文件夾,將子應用打包后的文件放入其中。


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

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

相關文章

【c++】【STL】list詳解

目錄 list的作用list的接口構造函數賦值運算符重載迭代器相關sizeemptyfrontbackassignpush_frontpop_frontpush_backpop_backinserteraseswapresizeclearspliceremoveremove_ifuniquemergesortreverse關系運算符重載&#xff08;非成員函數&#xff09; list的模擬實現結點類迭…

Redis持久化:

什么是Redis持久化&#xff1a; Redis 持久化是指將 Redis 內存中的數據保存到硬盤等持久化存儲介質中&#xff0c;以便在 Redis 服務器重啟或出現故障時能夠恢復數據&#xff0c;保證數據的可靠性和持續性。Redis 提供了兩種主要的持久化方式&#xff1a;RDB&#xff08;Redi…

VBA 64位API聲明語句第009講

跟我學VBA&#xff0c;我這里專注VBA, 授人以漁。我98年開始&#xff0c;從源碼接觸VBA已經20余年了&#xff0c;隨著年齡的增長&#xff0c;越來越覺得有必要把這項技能傳遞給需要這項技術的職場人員。希望職場和數據打交道的朋友&#xff0c;都來學習VBA,利用VBA,起碼可以提高…

在pycharm profession 2020.3將.py程序使用pyinstaller打包成exe

一、安裝pyinstaller 在pycharm的項目的Terminal中運行pip3 install pyinstaller即可。 安裝后在Terminal中輸入pip3 list看一下是否成功 二、務必在在項目的Terminal中輸入命令打包&#xff0c;命令如下&#xff1a; python3 -m PyInstaller --noconsole --onefile xxx.py …

Unity SpriteRenderer(精靈渲染器)

&#x1f3c6; 個人愚見&#xff0c;沒事寫寫筆記 &#x1f3c6;《博客內容》&#xff1a;Unity3D開發內容 &#x1f3c6;&#x1f389;歡迎 &#x1f44d;點贊?評論?收藏 &#x1f50e;SpriteRenderer:精靈渲染器 &#x1f4a1;Sprite Renderer是精靈渲染器&#xff0c;所有…

2.LED燈的控制和按鍵檢測

目錄 STM32F103的GPIO口 GPIO口的作用 GPIO口的工作模式 input輸入檢測 -- 向內檢測 output控制輸出 -- 向外輸出 寄存器 寄存器地址的確定 配置GPIO口的工作模式 時鐘的開啟和關閉 軟件編程驅動 LED 燈 硬件 軟件 軟件編程驅動 KEY 按鍵 硬件 軟件 按鍵消抖 代碼 STM32F…

Flink 的狀態機制

在實時流處理領域&#xff0c;狀態管理是構建復雜業務邏輯的核心能力。Apache Flink 通過統一的狀態抽象和高效的容錯機制&#xff0c;為開發者提供了從毫秒級窗口聚合到 TB 級歷史數據關聯的全場景支持。本文將深入剖析 Flink 狀態機制的底層原理&#xff0c;結合實際案例展示…

【查看.ipynp 文件】

目錄 如何打開 .ipynb 文件&#xff1f; 如果確實是 .ipynp 文件&#xff1a; .ipynp 并不是常見的 Jupyter Notebook 文件格式。通常&#xff0c;Jupyter Notebook 文件的擴展名是 .ipynb&#xff08;即 Interactive Python Notebook&#xff09;。如果你遇到的是 .ipynb 文…

Runnable組件重試機制降低程序錯誤率

一、LangChain 重試機制深度解析 當構建生產級AI應用時&#xff0c;with_retry() 機制可有效提升系統容錯性&#xff0c;典型應用場景包括&#xff1a; API調用頻率限制時的自動恢復模型服務臨時不可用的故障轉移網絡波動導致的瞬時異常處理 參數詳解與配置策略 1. 參數配置…

k8s筆記——kubebuilder工作流程

kubebuilder工作流程 Kubebuilder 工作流程詳解 Kubebuilder 是 Kubernetes 官方推薦的 Operator 開發框架&#xff0c;用于構建基于 Custom Resource Definitions (CRD) 的控制器。以下是其核心工作流程的完整說明&#xff1a; 1. 初始化項目 # 創建項目目錄 mkdir my-opera…

Java框架“若依RuoYi”前后端分離部署

運行環境 Eclipse IDE for Enterprise Java and Web Developers 下載Eclipse解壓Eclipse到文件夾 Maven 下載Maven解壓Maven到文件夾配置環境變量MAVEN_HOME為Maven安裝位置配置環境變量path為%MAVEN_HOME%\bin Redis 下載Redis解壓Redis到文件夾配置環境變量path為Redis安裝位…

游戲引擎學習第249天:清理調試宏

歡迎大家&#xff0c;讓我們直接進入調試代碼的改進工作 接下來&#xff0c;我們來看一下上次停留的位置。如果我沒記錯的話&#xff0c;上一場直播的結尾我有提到一些我想做的事情&#xff0c;并且在代碼中留下了一個待辦事項。所以也許我們今天首先做的就是解決這個問題。但…

二極管反向恢復的定義和原理

二極管的反向恢復定義 二極管的反向恢復是指二極管從正向導通狀態切換到反向阻斷狀態時&#xff0c;電流從正向變為負向并最終回到零所需的時間。具體過程如下&#xff1a; 正向導通&#xff1a;當二極管正向偏置時&#xff0c;電流可以順利通過&#xff0c;此時二極管處于導…

音視頻開發技術總結報告

音視頻開發技術總結報告 一、音視頻開發基礎 1、音頻基礎 聲音原理 聲波特性&#xff1a;頻率、振幅、波長人耳聽覺范圍&#xff1a;20Hz-20kHz聲音三要素&#xff1a;音調、音量、音色 數字音頻基礎 采樣率&#xff1a;常見44.1kHz、48kHz、96kHz量化位數&#xff1a;8bit、…

中間件和組件

文章目錄 1. 前言2. 中間件介紹3. 組件介紹4. 區別對比5. 簡單類比6. 總結 中間件和組件 1. 前言 中間件和組件是軟件開發中兩個重要的概念&#xff0c;但它們的定位和作用完全不同。中間件解決的事通信、跨系統、安全等問題&#xff0c;組件是解決具體業務模塊&#xff0c;提高…

AI超級智能體教程(五)---自定義advisor擴展+結構化json輸出

文章目錄 1.自定義攔截器1.2自定義Advisor1.2打斷點調試過程1.3Re-reading Advisor自定義實現 2.戀愛報告開發--json結構化輸出2.1原理介紹2.1代碼實現2.3編寫測試用例2.4結構化輸出效果 1.自定義攔截器 1.2自定義Advisor spring里面的這個默認的是SimpleloggerAdvisor&#…

02_使用 AES 算法實現文件加密上傳至阿里云、解密下載

02_使用 AES 算法實現文件加密上傳至阿里云、解密下載 一、文件上傳下載接口 controller 層 RestController RequestMapping("/api/common/file") Api(tags "公共文件上傳") AllArgsConstructor Slf4j public class FileV2Controller {private final Os…

力扣:24兩兩交換鏈表的節點

目錄 1.題目描述&#xff1a; 2.算法思路&#xff1a; 3.代碼展示&#xff1a; 1.題目描述&#xff1a; 給你一個鏈表&#xff0c;兩兩交換其中相鄰的節點&#xff0c;并返回交換后鏈表的頭節點。你必須在不修改節點內部的值的情況下完成本題&#xff08;即&#xff0c;只能…

smss源代碼分析之smss!SmpLoadSubSystemsForMuSession函數分析加載csrss.exe

第一部分&#xff1a; Next SmpSubSystemsToLoad.Flink; while ( Next ! &SmpSubSystemsToLoad ) { p CONTAINING_RECORD( Next, SMP_REGISTRY_VALUE, Entry )…

MIT6.S081-lab8前置

MIT6.S081-lab8前置 注&#xff1a;本部分除了文件系統還包含了調度的內容。 調度 調度涉及到保存寄存器&#xff0c;恢復寄存器&#xff0c;就這一點而言&#xff0c;和我們的 trap 很像&#xff0c;但是實際上&#xff0c;我們實現并不是復用了 trap 的邏輯&#xff0c;我…