vue-vben-admin 接入 qiankun 微前端:3 个关键机制决定落地成败

发布时间:2026/9/2 14:35:51

vue-vben-admin 接入 qiankun 微前端:3 个关键机制决定落地成败
vue-vben-admin 接入 qiankun 微前端3 个关键机制决定落地成败【免费下载链接】vue-vben-adminA modern vue admin panel built with Vue3, Shadcn UI, Vite, TypeScript, and Monorepo. Its fast!项目地址: https://gitcode.com/GitHub_Trending/vu/vue-vben-adminvue-vben-admin 是基于 Vue3 Vite TypeScript 的 Monorepo 中后台模板其apps/目录下并列着 web-antd、web-ele 等 5 个可独立运行的应用。本文围绕一个真实场景展开把旧版 Ant Design 页面和新版 Element 页面装进同一个壳应用讲清 qiankun 微前端在 vben 工程里的接入路径、两个最容易踩坑的机制生命周期调度与沙箱样式隔离以及什么情况下其实不该上微前端。场景旧 AntD 页面和新 Element 页面共用一个壳假设公司现状是核心业务跑在 Ant Design Vue 上新模块团队选了 Element Plus两边都不愿意重写成对方的技术栈。vue-vben-admin 的 Monorepo 结构天然适合这个局面——apps/web-antd和apps/web-ele本来就各自是一个完整壳应用共享packages/下的布局、权限、请求等能力。要做的就是选其中一个当主应用壳另一个通过 qiankun 注册为微应用按路由前缀激活。 需要注意的是vben 仓库本身并没有内置 qiankun以下所有改造都是基于现有工程结构的增量接入不需要动packages/里的共享层。接入方式选型直接用 HTML 入口别折腾 UMD 构建qiankun 支持 HTML 入口和 JSUMD入口两种加载方式。我的建议很明确开发和生产都用 HTML 入口entry直接指向微应用的部署地址即可微应用保持现有的 Vite 构建产物形态不变import { registerMicroApps, start } from qiankun; registerMicroApps([ { name: web-ele, entry: http://localhost:5555, container: #subapp-container, activeRule: /subapp/ele, props: { token: accessStore.accessToken }, }, ]); start({ sandbox: { experimentalStyleIsolation: true } });UMD 入口要求重写微应用的构建链路library 模式、externals、全局变量命名收益却只有少解析一个 HTML对 vben 这种带 i18n、动态路由的应用来说重写成本远高于收益。唯一必须做的是让微应用的 Vite 开发服务器返回 CORS 头否则主应用拉取入口 HTML 会被浏览器拦截// apps/web-ele/vite.config.ts vite: { server: { headers: { Access-Control-Allow-Origin: * }, }, },生命周期改造vben 的 bootstrap 链只有一个挂载点但也只有一处要改 这是接入里最舒服的部分。vben 每个应用的入口apps/web-ele/src/main.ts只做两件事initPreferences初始化偏好然后import(./bootstrap)执行全部挂载逻辑——i18n、Pinia、组件适配器、路由守卫最终createApp(App)并app.mount(#app)。也就是说整个应用的生命周期收敛在bootstrap.ts一个函数里把它包成 qiankun 的 mount/unmount 即可// apps/web-ele/src/main.ts简化 let app: App | null null; export async function mount(props: any {}) { const { container, token } props; if (token) useAccessStore().$patch({ accessToken: token }); const { bootstrap } await import(./bootstrap); app await bootstrap(namespace, container); // 需小改 bootstrap } export async function unmount() { app?.unmount(); app null; } if (!window.__POWERED_BY_QIANKUN__) { initApplication(); // 独立运行时行为不变 }配套改两处细节一是bootstrap.ts目前不返回 app 实例加一个return app才能支持卸载二是它内部写死了mount(#app)改成container?.querySelector(#app) || #app以兼容壳应用注入的容器。这里藏着一个权限相关的坑vben 的路由守卫apps/web-ele/src/router/guard.ts在拿不到accessToken时会强制跳登录页。微应用模式下列表页第一次渲染时如果 token 还没从 props 写入 store用户会被瞬间甩到登录页再弹回来。所以 mount 里的 token 注入必须发生在路由初始化之前别放在onMounted之类的回调里。qiankun 沙箱模式下样式冲突的两种解法两个应用各自引入了组件库的全局样式和 Tailwind 产物混在同一份 document 里必然冲突AntD 的.ant-*和 Element 的.el-*类名不撞但 reset 样式、Tailwind preflight、CSS 变量会互相覆盖。qiankun 沙箱给两条路方案一strictStyleIsolationShadow DOM 封装。隔离最彻底但对 vben 不适用——它的 Modal、抽屉、tippy 提示都是 portal 到document.body的Shadow DOM 会把它们全部吃掉表现为弹窗不显示或飞出去。方案二experimentalStyleIsolation自动加属性选择器前缀 主题变量收敛。这是我在 vben 场景下的推荐解法开启前缀隔离解决基础样式串扰同时利用 vben 的 preferences 体系让两个应用共享同一套设计变量两个应用都走packages/core/preferences初始化弹窗类 portal 组件不受影响。代价是前缀会给选择器加长度、且对运行时动态插入的样式不生效需要配合组件库的样式懒加载策略规避。落地时真正踩到的三个坑 ⚠️路由 base 与 activeRule 不一致。微应用内部的 vue-router 默认 base 是/而它在壳里挂在/subapp/ele下子路由点击后地址栏变化会脱离激活前缀页面白屏。解法是把微应用的 router base 显式配置为 activeRule 路径两边严格一致。双份 Vue 运行时。主应用和微应用各自打包一份 Vue同一页面存在两个 reactivity 系统内存和性能都有实打实的开销在含 20 路由的管理台页面下可观测到明显多出的运行时体积。缓解方式是用 pnpm workspace 的 catalog 机制见pnpm-workspace.yaml把主、微应用的 Vue 版本钉死一致至少保证行为不分裂。调试链路变长。微应用报错发生在 qiankun 的 proxy sandbox 里错误堆栈指向的是包装后的代码位置直接打断点很痛苦。实用做法是保留window.__POWERED_BY_QIANKUN__判断本地单独起微应用复现配合主应用侧的错误监控面板兜底。适用边界先回答是否真的需要微前端给出我的判断标准。如果你的所有团队都愿意接受 vben 的 Monorepo 协作方式那其实不需要 qiankunapps/下多开一个应用、packages/里沉淀共享业务独立部署的能力已经由 pnpm workspace Turborepo 提供团队各改各的 app 目录即可。Micro-frontend 的价值在于独立部署 异构技术栈 存量系统无法重写三者至少占两条——只有换组件库不算那用 vben 的多 app 结构就够老系统跑的是 React、Vue2 或原生模板且发布节奏被主干阻塞才值得引入 qiankun 这套运行时开销。落到本文场景旧 AntD 页面是存量重写不了的新 Element 模块需要独立迭代节奏两条线都成立接入是划算的。改动的范围也很收敛——main.ts加生命周期导出、bootstrap.ts返回实例、vite 加 CORS 头、沙箱开实验性样式隔离共享层一行不动。微前端不是架构升级是把拆分这个组织决策翻译成了工程结构想清楚这一点再动手。【免费下载链接】vue-vben-adminA modern vue admin panel built with Vue3, Shadcn UI, Vite, TypeScript, and Monorepo. Its fast!项目地址: https://gitcode.com/GitHub_Trending/vu/vue-vben-admin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Claude模型提示注入防御实测:从原理到工程实践的安全加固指南

Claude模型提示注入防御实测:从原理到工程实践的安全加固指南

2026/9/2 14:35:51

这次我们来看一个关于大模型安全的重要进展:Anthropic 宣布其 Claude 模型已基本解决提示注入攻击。对于任何在开发中集成或使用大语言模型(LLM)的工程师来说,这都不是一个遥远的概念,而是直接影响应用安全性和稳定性的…

PNP三极管引脚自动识别电路设计:从原理到硬件实现

PNP三极管引脚自动识别电路设计:从原理到硬件实现

2026/9/2 14:35:51

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

从游戏云到生产力容器:9950X云服务在AI开发与高性能计算中的价值重估

从游戏云到生产力容器:9950X云服务在AI开发与高性能计算中的价值重估

2026/9/2 14:35:51

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026年7月枣庄市新房价格深度分析报告

2026年7月枣庄市新房价格深度分析报告

2026/9/2 15:55:54

一、报告背景与数据说明本报告基于2026年7月枣庄市新房实际成交案例,结合各区域在售楼盘的真实签约数据,对当前市场价格水平、成交结构及未来走势进行深度分析。数据来源涵盖枣庄市五区一市(市中区、薛城区、峄城区、台儿庄区、山亭区、滕州市…

03 - 频率即壁垒:大模型时代创业者的“人事合一”与意识跃迁

03 - 频率即壁垒:大模型时代创业者的“人事合一”与意识跃迁

2026/9/2 15:55:54

如果AI的频率无限接近400,而你还在200以下挣扎,那么无论你多么努力,你终将成为AI的“牛马”。唯一的出路,不是跑得更快,而是跃迁到AI到不了的维度。创业者的集体困境2026年,大模型已全面渗透商业世界。融资…

04 - 认知跃迁与理念觉醒:大模型时代创业者的“张一鸣时刻”

04 - 认知跃迁与理念觉醒:大模型时代创业者的“张一鸣时刻”

2026/9/2 15:55:54

十年前,张一鸣用“逻辑”碾压了马云的“经验”;今天,AI正在用“算法”碾压张一鸣的“逻辑”。谁将成为下一个时代的颠覆者?答案藏在0.4%的人才能看见的那个维度里。一个价值万亿美元的问题2026年,字节跳动旗下TikTok占…

基于STM32的串级PID控制实现快速稳定循迹小车

基于STM32的串级PID控制实现快速稳定循迹小车

2026/9/2 15:55:54

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

MOS 管中的 VGS(th) 是什么、有什么作用、怎么测

MOS 管中的 VGS(th) 是什么、有什么作用、怎么测

2026/9/2 15:55:54

面向对象:硬件测试工程师新手、软硬件测试工程师、刚开始阅读 MOSFET Datasheet 的同学。 1. 先给结论 VGS(th) 的全称是 Gate-Source Threshold Voltage,中文通常叫 栅源阈值电压 或 开启阈值电压。 它表示:当 MOS 管的栅极和源极之间电压 VGS 增加到某个值时,MOS 管刚…

小语文稿深度体验:本地离线免费免登录,Markdown写作回归纯粹

小语文稿深度体验:本地离线免费免登录,Markdown写作回归纯粹

2026/9/2 15:45:54

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

2026/9/2 0:04:59

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

2026/9/2 0:04:59

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

2026/9/2 0:04:59

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…