当前位置: 首页 > 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.jsqmd.com/news/939986/

相关文章:

  • 45 美元一次性付费,Transmit 文件传输应用凭啥这么值?
  • 别再死记硬背了!用SystemVerilog断言(SVA)优雅实现边沿检测与验证
  • 2026年热门的厚铜高多层线路板/盲埋孔高多层线路板口碑好的厂家推荐 - 品牌宣传支持者
  • Translumo:打破语言壁垒的Windows实时屏幕翻译神器
  • 一键部署私人 LLM:Ollama + Docker 极简指南
  • Claude Code 100个真实案例 - 用AI做BIM建筑信息模型查看器(Three.js 3D展示)
  • 出海缅甸做生意,汇总市面层出不穷的外贸诈骗类型
  • 2026年知名的高多层线路板/高阶多层线路板/阻抗控制高多层线路板推荐厂家精选 - 行业平台推荐
  • 游戏开发者的向量实战手册:从Unity中的角色移动到Shader编程,向量到底怎么用?
  • 个人开发者避坑指南:选免签支付平台,除了费率还要看这三点(风控、部署、生态)
  • 2026年知名的工业供水原水净化/无锡工业供水系统设备公司哪家好 - 行业平台推荐
  • 量子玻色采样加速蒙特卡洛积分的原理与应用
  • 登登 AI 数字人中小企业直播实战评测
  • Python自动化获取雅虎/Stooq行情+蒙特卡洛模拟投资组合收益分布
  • 保姆级教程:用Canmv IDE给K210开发板烧录.bin和.kmodel文件(附串口连接避坑指南)
  • 一套开源代码的能碳治理实践:MyEMS 数据建模引擎的架构设计思路
  • 高中生科研实习:如何平衡热情与技能,在前沿科技项目中脱颖而出
  • 2026年评价高的无锡工业供水浓水零排/工业供水除盐处理/工业供水原水净化主流厂家对比评测 - 品牌宣传支持者
  • TransUNet实战复盘:我是如何用个人小数据集(非公开数据集)成功训练医学分割模型的?
  • 保姆级教程:用CST时域求解器快速获取S参数,从端口激励设置到结果查看全流程
  • Qt5.9.2本地运行百度地图瓦片:离线渲染+Qt与JS实时双向通信
  • Windows Server 2022下,手把手配置华为OceanStor存储的iSCSI连接(含MPIO多路径避坑指南)
  • 2026年知名的MIM金属注射成型零件/中山MIM粉末冶金用户口碑推荐厂家 - 行业平台推荐
  • 【效率飞跃】CC Switch 重大更新!3步搞定 Codex 接入 DeepSeek-V4-Pro
  • Claude Code官方文档精华梳理(一)——定位、快速开始、核心概念、最佳实践(单个使用)
  • 一份可落地、轻量、结合AI辅助的测试工作规范
  • Vivado硬件管理器隐藏技巧:用Bus Plot Viewer把ILA数据画成专业图表(附对比线图/点图实战)
  • LitCAD:免费开源CAD软件终极指南,10分钟学会专业绘图
  • Claude Code 100个真实案例 - 用AI搭建农业物联网监测平台(土壤+气象+作物)
  • 2026年靠谱的中山MIM金属粉末/MIM异形金属件/MIM零件/中山MIM结构件厂家精选合集 - 品牌宣传支持者