Vue3 + Qiankun 构建微前端架构
技术选型与初始化
Vue3 + Qiankun 适合构建微前端架构,主应用负责基座和路由管理,子应用独立开发部署。确保环境已安装 Node.js(≥14)和 Vue CLI(≥5.0)。
主应用配置
-
创建主应用
使用 Vue CLI 初始化项目:vue create main-app -
安装 Qiankun
npm install qiankun -S -
配置主应用入口
修改main.js,注册子应用并启动 Qiankun:import { createApp } from 'vue'; import { registerMicroApps, start } from 'qiankun'; import App from './App.vue'; const app = createApp(App); app.mount('#app'); registerMicroApps([ { name: 'sub-app', entry: '//localhost:7101', // 子应用地址 container: '#subapp-container', activeRule: '/sub-app', }, ]); start();
子应用配置
-
创建子应用
vue create sub-app -
配置子应用导出
修改main.js,导出生命周期钩子:import { createApp } from 'vue'; import App from './App.vue'; let instance = null; function render(props = {}) { const { container } = props; instance = createApp(App); instance.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.unmount(); } -
配置打包输出
修改vue.config.js,设置跨域和库格式:const { defineConfig } = require('@vue/cli-service'); module.exports = defineConfig({ devServer: { port: 7101, headers: { 'Access-Control-Allow-Origin': '*', }, }, configureWebpack: { output: { library: 'sub-app', libraryTarget: 'umd', }, }, });
路由配置
-
主应用路由
使用vue-router管理基座路由,确保路由与子应用activeRule匹配:import { createRouter, createWebHistory } from 'vue-router'; const router = createRouter({ history: createWebHistory(), routes: [{ path: '/sub-app', component: () => import('./views/SubApp.vue') }], }); -
子应用路由
子应用路由需兼容独立运行和嵌入模式:const router = createRouter({ history: createWebHistory(window.__POWERED_BY_QIANKUN__ ? '/sub-app/' : '/'), routes: [...], });
样式隔离
-
CSS 命名空间
为子应用根元素添加唯一类名,避免样式冲突:<template> <div class="sub-app-container"> <!-- 子应用内容 --> </div> </template> <style scoped> .sub-app-container { /* 子应用样式 */ } </style> -
动态加载样式
使用postcss插件自动添加前缀:// postcss.config.js module.exports = { plugins: { 'postcss-prefix-selector': { prefix: '.sub-app-container', transform(prefix, selector) { return `${prefix} ${selector}`; }, }, }, };
通信机制
-
主应用传递数据
通过props向子应用注入全局状态或方法:registerMicroApps([ { name: 'sub-app', entry: '//localhost:7101', container: '#subapp-container', activeRule: '/sub-app', props: { sharedState: { user: 'admin' } }, // 传递数据 }, ]); -
子应用接收数据
在子应用生命周期中获取props:export async function mount(props) { console.log(props.sharedState); // 接收主应用数据 render(props); }
部署与优化
-
独立部署
子应用打包后上传至 CDN 或静态服务器,主应用通过entry配置子应用地址。 -
资源预加载
在主应用中配置prefetch加速子应用加载:start({ prefetch: 'all' }); -
公共依赖共享
通过externals避免重复加载 Vue 等库:// vue.config.js module.exports = { configureWebpack: { externals: { vue: 'Vue', }, }, };
常见问题解决
-
跨域问题
确保子应用服务器配置Access-Control-Allow-Origin: *,或使用代理。 -
路由冲突
子应用路由需基于主应用路由前缀,避免路径重复。 -
生命周期未触发
检查子应用是否正确导出bootstrap、mount、unmount方法。
通过以上步骤,可快速搭建基于 Vue3 和 Qiankun 的微前端架构,实现主应用与子应用的解耦和独立开发。
更多推荐


所有评论(0)