vue-vben-admin微前端集成:qiankun微前端架构适配
引言
在大型Web应用开发中,随着业务的不断扩展,单一的前端应用往往会变得臃肿不堪,难以维护。微前端架构应运而生,它将一个庞大的前端应用拆分成多个小型应用,每个小型应用可以独立开发、测试、部署和运行,从而提高开发效率和系统的可维护性。qiankun是一款基于single-spa的微前端框架,它提供了更加完善的微前端解决方案,包括应用的加载、卸载、通信等功能。本文将详细介绍如何在vue-vben-admin项目中集成qiankun微前端架构,实现应用的模块化拆分和灵活部署。
qiankun微前端架构概述
qiankun微前端架构的核心思想是将一个大型应用拆分成多个微应用(Micro App),每个微应用都是一个独立的前端应用,可以使用不同的技术栈(如Vue、React、Angular等)进行开发。这些微应用共享一个主应用(Main App)提供的基础设施,如路由、状态管理、样式等。主应用负责微应用的注册、加载、卸载和通信,微应用则专注于自身的业务逻辑实现。
qiankun微前端架构的主要特点包括:
- 技术栈无关:主应用和微应用可以使用不同的技术栈,提高了技术选型的灵活性。
- 独立开发、测试和部署:每个微应用可以独立进行开发、测试和部署,不影响其他微应用的运行。
- 应用隔离:微应用之间通过沙箱机制进行隔离,避免了样式和JavaScript的冲突。
- 通信机制:提供了基于全局状态和自定义事件的通信方式,方便微应用之间的数据交互。
vue-vben-admin项目结构分析
vue-vben-admin是一个基于Vue.js和Element UI的后台管理系统,其项目结构如下所示:
- apps:包含多个应用,如backend-mock、web-antd、web-ele、web-naive等。
- docs:项目文档。
- internal:内部工具和配置。
- packages:项目的核心包,如core、constants、effects、icons、locales、preferences、stores、styles、types、utils等。
- playground:测试和演示环境。
- scripts:构建和部署脚本。
从项目结构可以看出,vue-vben-admin已经具备了一定的模块化设计,这为集成qiankun微前端架构奠定了基础。我们可以将现有的应用拆分成多个微应用,如将web-antd、web-ele、web-naive等作为独立的微应用,由一个主应用进行统一管理。
qiankun微前端集成步骤
1. 安装qiankun
首先,需要在主应用和微应用中安装qiankun依赖。在vue-vben-admin项目的根目录下执行以下命令:
npm install qiankun --save
2. 主应用配置
主应用需要负责微应用的注册、加载和管理。在vue-vben-admin项目中,我们可以在主应用的入口文件中进行qiankun的配置。以下是一个简单的主应用配置示例:
import { registerMicroApps, start } from 'qiankun';
// 注册微应用
registerMicroApps([
{
name: 'web-antd', // 微应用名称
entry: '//localhost:3001', // 微应用入口地址
container: '#micro-app-container', // 微应用容器
activeRule: '/web-antd', // 微应用激活规则
props: {
// 传递给微应用的参数
token: 'xxx',
},
},
{
name: 'web-ele',
entry: '//localhost:3002',
container: '#micro-app-container',
activeRule: '/web-ele',
},
{
name: 'web-naive',
entry: '//localhost:3003',
container: '#micro-app-container',
activeRule: '/web-naive',
},
]);
// 启动qiankun
start();
在上述代码中,我们首先通过registerMicroApps方法注册了三个微应用,分别是web-antd、web-ele和web-naive。每个微应用都需要指定名称、入口地址、容器和激活规则。然后,通过start方法启动qiankun,开始监听路由变化,加载和卸载微应用。
3. 微应用配置
微应用需要进行一些适配qiankun的配置,以便能够被主应用正确加载和运行。以下是一个微应用的配置示例(以web-antd为例):
在web-antd应用的src/main.ts文件中,添加以下代码:
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
let app: any = null;
// 渲染微应用
function render(props: any = {}) {
const { container } = props;
app = createApp(App);
app.use(router).use(store).mount(container ? container.querySelector('#app') : '#app');
}
// 独立运行时,直接渲染
if (!window.__POWERED_BY_QIANKUN__) {
render();
}
// 微应用生命周期钩子
export async function bootstrap() {
console.log('web-antd bootstrap');
}
export async function mount(props: any) {
console.log('web-antd mount', props);
render(props);
}
export async function unmount() {
console.log('web-antd unmount');
app.unmount();
app._container.innerHTML = '';
app = null;
}
在上述代码中,我们定义了微应用的渲染函数render,它会根据是否在qiankun环境中运行来决定如何挂载应用。当微应用独立运行时,直接调用render函数进行渲染;当微应用被qiankun加载时,会通过mount生命周期钩子函数来调用render函数,并传入主应用传递的参数。同时,我们还定义了bootstrap和unmount生命周期钩子函数,分别在微应用启动和卸载时执行。
此外,还需要修改微应用的打包配置,以确保微应用能够被qiankun正确识别和加载。在web-antd应用的vite.config.ts文件中,添加以下配置:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [vue()],
server: {
port: 3001,
headers: {
'Access-Control-Allow-Origin': '*',
},
},
build: {
library: {
name: 'web-antd',
formats: ['umd'],
entry: 'src/main.ts',
},
},
});
在上述配置中,我们设置了开发服务器的端口为3001,并添加了跨域头信息,以便主应用能够加载微应用的资源。在构建配置中,我们将微应用打包成umd格式的库,以便qiankun能够正确加载。
4. 应用间通信
在微前端架构中,应用间的通信是一个重要的问题。qiankun提供了多种通信方式,如基于props的通信、基于全局状态的通信等。以下是一个基于props的通信示例:
在主应用中注册微应用时,可以通过props参数传递数据给微应用:
registerMicroApps([
{
name: 'web-antd',
entry: '//localhost:3001',
container: '#micro-app-container',
activeRule: '/web-antd',
props: {
token: 'xxx',
userInfo: { name: '张三', age: 20 },
},
},
]);
在微应用的mount生命周期钩子函数中,可以获取到主应用传递的参数:
export async function mount(props: any) {
console.log('web-antd mount', props);
// 获取主应用传递的参数
const { token, userInfo } = props;
// 将参数存储到微应用的状态管理中
store.commit('setToken', token);
store.commit('setUserInfo', userInfo);
render(props);
}
除了基于props的通信方式,qiankun还提供了基于全局状态的通信方式,如通过initGlobalState方法创建全局状态,并在主应用和微应用中进行订阅和修改。
5. 样式隔离
为了避免微应用之间的样式冲突,qiankun提供了样式隔离机制。在主应用中启动qiankun时,可以通过sandbox配置项开启样式隔离:
start({
sandbox: {
strictStyleIsolation: true, // 严格的样式隔离
},
});
开启严格的样式隔离后,qiankun会为每个微应用的样式添加一个唯一的属性选择器,确保样式只在当前微应用中生效。
总结
通过本文的介绍,我们了解了如何在vue-vben-admin项目中集成qiankun微前端架构,实现应用的模块化拆分和灵活部署。首先,我们对qiankun微前端架构进行了概述,了解了其核心思想和主要特点。然后,分析了vue-vben-admin项目的结构,为集成qiankun奠定了基础。接着,详细介绍了qiankun微前端集成的步骤,包括安装qiankun、主应用配置、微应用配置、应用间通信和样式隔离等。最后,通过实际的代码示例,展示了如何在vue-vben-admin项目中实现qiankun微前端架构的适配。
微前端架构为大型Web应用的开发和维护提供了一种新的思路和解决方案,它可以提高开发效率、降低系统复杂度、增强系统的可扩展性和可维护性。在vue-vben-admin项目中集成qiankun微前端架构,可以充分发挥两者的优势,构建更加灵活、高效和稳定的Web应用。
参考资料
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00