以下是关于阿里微前端框架 qiankun 的详细介绍,包含安装、使用步骤及在多个 Vue 项目中的应用指南:
qiankun 是阿里巴巴开源的一款基于 Single-SPA 的微前端框架,支持将多个独立的前端应用(不同技术栈)整合为一个完整的应用。核心特性:
在主项目(基座应用)中安装 qiankun
:
npm install qiankun --save
# 或
yarn add qiankun
在主应用的入口文件(如 main.js
)中注册子应用:
import { registerMicroApps, start } from 'qiankun';
// 注册子应用
registerMicroApps([
{
name: 'vue-sub-app', // 子应用唯一标识
entry: '//localhost:7101', // 子应用入口(开发环境可配本地服务,生产环境配静态资源地址)
container: '#subapp-container', // 子应用挂载节点
activeRule: '/vue-sub-app', // 路由匹配规则
},
// 可注册多个子应用
]);
// 启动 qiankun
start();
确保主应用路由模式为 history
:
const router = new VueRouter({
mode: 'history',
routes: [
// 主应用路由...
],
});
在子应用入口文件(如 main.js
)中导出 bootstrap
, mount
, unmount
:
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() {
console.log('子应用启动');
}
export async function mount(props) {
console.log('子应用挂载');
render(props);
}
export async function unmount() {
console.log('子应用卸载');
instance.$destroy();
instance.$el.innerHTML = '';
instance = null;
}
修改子应用的 Webpack 配置,允许作为 UMD 格式被 qiankun 加载:
const { defineConfig } = require('@vue/cli-service');
module.exports = defineConfig({
transpileDependencies: true,
devServer: {
port: 7101, // 与主应用注册的端口一致
headers: {
'Access-Control-Allow-Origin': '*', // 允许跨域
},
},
configureWebpack: {
output: {
library: 'vue-sub-app', // 子应用名称(与主应用注册的 name 一致)
libraryTarget: 'umd', // 打包为 UMD 格式
chunkLoadingGlobal: 'webpackJsonp_vue-sub-app', // 避免全局变量冲突
},
},
});
/vue-app1
)/vue-app2
)registerMicroApps([
{
name: 'vue-app1',
entry: '//localhost:7101',
container: '#subapp-container',
activeRule: '/vue-app1',
},
{
name: 'vue-app2',
entry: '//localhost:7102',
container: '#subapp-container',
activeRule: '/vue-app2',
},
]);
确保子应用可通过自身端口独立运行(通过 npm run serve
),同时通过主应用路由访问。
跨域问题
Access-Control-Allow-Origin: *
(开发环境可通过 devServer.headers
设置)。路由冲突
activeRule
前缀(如 /vue-app1/home
)。静态资源路径
子应用需设置 publicPath
,确保资源正确加载:
// vue.config.js
module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? '/vue-app1/' : '/',
};
全局状态管理
使用 qiankun
提供的通信 API:
// 主应用初始化状态
import { initGlobalState } from 'qiankun';
const actions = initGlobalState({ user: 'admin' });
// 子应用监听状态变化
export function mount(props) {
props.onGlobalStateChange((state, prev) => {
console.log('全局状态变更:', state);
});
}
通过 qiankun 可将多个 Vue 项目整合为统一应用,实现技术栈无关性和独立部署。重点关注 路由配置、生命周期管理、通信机制 和 环境隔离。实际项目中可根据需求扩展加载策略、性能优化等功能。