Vue3 接入 qiankun 微前端
qiankun 官网:https://qiankun.umijs.org/zh
目前官网只有 Vue2 的接入介绍,本篇记录实战中 Vue3 的接入
vue 子应用代码改造
1. 新增 src/public-path.js
文件
js
if (window.__POWERED_BY_QIANKUN__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
2. 改造 src/main.js
js
import './public-path';
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import 'element-plus/theme-chalk/display.css'
import scui from './scui'
import i18n from './locales'
import router from './router'
import store from './store'
import App from './App.vue'
let app = createApp(App);
function render(props = {}) {
const { container } = props;
app.use(store);
app.use(router);
app.use(ElementPlus);
app.use(i18n);
app.use(scui);
//挂载app
app.mount(container ? container.querySelector('#app') : '#app');
}
// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {
render();
}
export async function bootstrap() {
console.log('[vue] vue app bootstraped');
}
export async function mount(props) {
console.log('[vue] props from main framework', props);
render(props);
}
export async function unmount() {
console.log('app unmount')
app.unmount()
app = null
}
3. 改造 vue.config.js
js
const { name } = require('./package');
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
devServer: {
headers: {
'Access-Control-Allow-Origin': '*',
},
},
configureWebpack: {
output: {
library: `${name}-[name]`,
libraryTarget: 'umd', // 把微应用打包成 umd 库格式
chunkLoadingGlobal: `webpackJsonp_${name}`,
},
},
4. 改造 src/router/index.js
js
import {createRouter, createWebHistory} from 'vue-router';
const router = createRouter({
history: createWebHistory(window.__POWERED_BY_QIANKUN__ ? '/risk/' : '/'),
routes: routes
})
qiankun 中添加子应用
在 registerMicroApps
中添加即可,可参考官网文档
js
import { registerMicroApps, start } from 'qiankun';
registerMicroApps([
{
name: 'vueApp',
entry: '//localhost:8080',
container: '#container',
activeRule: '/app-vue',
},
]);
关于鉴权
在 qiankun 中调用后端 api 时,也是会传送 token 或者 cookie 的。后端解析即可