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

第七阶段:企业级项目实战核心能力(121天)Vue微前端实战:基于qiankun整合多Vue项目(主应用+子应用通信+样式隔离)

好的,我们来详细说明基于qiankun的 Vue 微前端实战方案,涵盖主应用搭建、子应用接入、主-子应用通信和样式隔离。


1.主应用搭建

核心功能:注册、加载和管理子应用。

1.1 安装依赖
npm install qiankun -S
1.2 主应用入口 (main.js)
import { registerMicroApps, start } from 'qiankun'; // 注册子应用 registerMicroApps([ { name: 'vue-sub-app', // 子应用名称(唯一标识) entry: '//localhost:7101', // 子应用入口(开发环境地址或线上URL) container: '#subapp-container', // 挂载容器(主应用中的DOM ID) activeRule: '/sub-app', // 激活规则(路由前缀) }, ]); // 启动 qiankun start();
1.3 主应用路由配置 (router.js)
import VueRouter from 'vue-router'; const routes = [ { path: '/', component: () => import('@/views/Home.vue'), }, // 预留子应用路由(无需具体配置,qiankun 会自动接管) { path: '/sub-app*', name: 'SubApp' }, ]; const router = new VueRouter({ mode: 'history', routes });
1.4 主应用挂载容器 (App.vue)
<template> <div id="app"> <router-view /> <!-- 子应用挂载点 --> <div id="subapp-container"></div> </div> </template>

2.子应用接入

核心要求:暴露生命周期钩子,支持独立运行和嵌入主应用。

2.1 修改入口文件 (main.js)
import Vue from 'vue'; import App from './App.vue'; import router from './router'; let instance = null; function render(props = {}) { const { container } = props; instance = new Vue({ router, render: h => h(App), }).$mount(container ? container.querySelector('#app') : '#app'); } // 独立运行时直接渲染 if (!window.__POWERED_BY_QIANKUN__) { render(); } // 暴露生命周期钩子 export async function bootstrap() {} export async function mount(props) { render(props); } export async function unmount() { instance.$destroy(); }
2.2 修改打包配置 (vue.config.js)
const { name } = require('./package.json'); module.exports = { devServer: { port: 7101, // 与主应用注册的entry端口一致 headers: { 'Access-Control-Allow-Origin': '*', // 允许跨域 }, }, configureWebpack: { output: { library: `${name}-[name]`, libraryTarget: 'umd', // 将子应用暴露为UMD模块 jsonpFunction: `webpackJsonp_${name}`, }, }, };

3.主-子应用通信

方案:使用qiankun提供的initGlobalState实现状态共享。

3.1 主应用初始化全局状态 (main.js)
import { initGlobalState } from 'qiankun'; // 初始化状态 const actions = initGlobalState({ user: { name: 'Admin' } }); // 监听子应用状态变更 actions.onGlobalStateChange((state, prevState) => { console.log('[主应用] 全局状态变更:', state, prevState); });
3.2 子应用获取/更新全局状态 (任意组件.vue)
export default { mounted() { // 获取通信方法 const actions = window.__POWERED_BY_QIANKUN__ ? window.__QIANKUN_MAIN_APP__.getGlobalState() : null; // 监听主应用状态变更 actions?.onGlobalStateChange((state) => { console.log('[子应用] 收到全局状态:', state); }); // 更新全局状态 actions?.setGlobalState({ user: { name: 'SubAppUser' } }); }, };

4.样式隔离

方案qiankun的沙箱机制 + CSS 模块化。

4.1 启用qiankun样式沙箱
// 主应用启动时开启严格样式隔离 start({ sandbox: { strictStyleIsolation: true } });
4.2 子应用使用 Scoped CSS
<template> <div class="subapp-content">子应用内容</div> </template> <style scoped> .subapp-content { color: red; /* 样式仅作用于当前组件 */ } </style>
4.3 避免全局样式污染
  • 子应用避免使用*选择器或直接修改body样式。
  • 使用 CSS Modules 或 BEM 命名规范。

5.部署注意事项

  1. 子应用静态资源路径
    vue.config.js中设置publicPath为动态路径:
    module.exports = { publicPath: process.env.NODE_ENV === 'production' ? `//your-cdn.com/${name}/` : '/', };
  2. 跨域支持
    子应用服务器需配置Access-Control-Allow-Origin: *
  3. 路由冲突
    主应用和子应用避免使用相同的路由路径。

总结

通过以上步骤,可实现:

  • 主应用动态加载子应用
  • 通信机制共享全局状态
  • 样式隔离避免冲突
  • ✅ 子应用独立运行嵌入主应用

完整代码示例可参考 qiankun 官方示例。

http://www.gsyq.cn/news/1451399.html

相关文章:

  • 45 美元一次性付费,Transmit 文件传输应用凭啥这么值?
  • Claude Code 100个真实案例 - 用AI做BIM建筑信息模型查看器(Three.js 3D展示)
  • Translumo:打破语言壁垒的Windows实时屏幕翻译神器
  • 游戏开发者的向量实战手册:从Unity中的角色移动到Shader编程,向量到底怎么用?
  • 保姆级教程:用Canmv IDE给K210开发板烧录.bin和.kmodel文件(附串口连接避坑指南)
  • Python自动化获取雅虎/Stooq行情+蒙特卡洛模拟投资组合收益分布
  • 高中生科研实习:如何平衡热情与技能,在前沿科技项目中脱颖而出
  • Claude Code官方文档精华梳理(一)——定位、快速开始、核心概念、最佳实践(单个使用)
  • LitCAD:免费开源CAD软件终极指南,10分钟学会专业绘图
  • 让AI画个军棋棋盘,结果折腾了一整天
  • 保姆级教程:在Nvidia Jetson Orin(Ubuntu 20.04)上配置NoMachine远程桌面,含ARM64版deb包下载
  • 告别软件模拟!STM32F103硬件I2C驱动OLED屏实战(附标准库源码)
  • 手机端AI编程:KimiClaw和马维斯到底哪家强
  • 告别卡顿!用ArcGIS Pro 3的批处理功能高效转换超大OSGB模型为SLPK
  • 2026年质量好的门墙柜/定制门墙柜系统优质公司推荐 - 品牌宣传支持者
  • 深入Synopsys DesignWare PCIe IP:iATU地址匹配与BAR匹配实战配置详解(附避坑点)
  • 2026年知名的苏州薄膜ALD/ALD技术/ALD工艺开发公司对比推荐 - 品牌宣传支持者
  • AI模型注册平台选型难题:3类典型失败案例+4步标准化整合落地法
  • 智能驾驶NOA全解析:从技术原理到产业未来
  • 2026年5月观澜权威人流手术医院探寻
  • 2026年比较好的ALD设备/苏州光伏ALD稳定供货厂家推荐 - 行业平台推荐
  • 工业质检实战:用YOLOv8+DCNv4搞定NEU-DET钢材缺陷检测,mAP提升3个点
  • 保姆级教程:手把手教你用Canmv IDE给K210开发板烧录.bin和.kmodel文件到Flash
  • 黑马点评笔记千年后的大总结
  • 2026年质量好的农业机械力传感器/航空航天力传感器/苏州机器人力传感器/自动化设备力传感器优质厂家汇总推荐 - 行业平台推荐
  • 深入解析JetBrains Maple Mono字体合成架构与实现原理
  • 山东大学项目实训个人纪实(6)——降低唇形同步延迟及性能需求
  • ECG情绪识别避坑指南:WESAD和DREAMER数据集实战中的5个常见问题与解决
  • 深度解析:YouTube 自动标注 AI 生成内容背后的技术博弈与架构演进
  • 决策树特征选择实战:用信息增益帮你挑出‘好’特征(以鸢尾花数据集为例)