主应用 vue2项目搭建
第一步、创建vue2的项目与正常创建无异,在这里不做过多描述;
第二部、将创建好的vue2项目作为主应用,在根目录先安装qiankung
yarn add qiankun # 或者 npm i qiankun -S
第三步、修改src目录下面的main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
import { registerMicroApps, start } from 'qiankun';
registerMicroApps([
{
name: 'vue2',
entry: '//localhost:7000',
container: '#container',
activeRule: '/app-vue2',
},
{
name: 'vue3',
entry: '//localhost:7001',
container: '#container',
activeRule: '/app-vue3',
},
]);
start();
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
第四步、在src目录下面的App.vue,提供微应用展示的DOM
<template>
<div id="app">
<nav>
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link> |
<router-link to="/app-vue2">app-vue2</router-link> |
<router-link to="/app-vue3">app-vue3</router-link>
</nav>
<router-view/>
<div id="container"></div>
</div>
</template>
到此为止主应用配置完成
然后开始搭建微应用,在主应用与src同级创建一个examples文件夹用来存放微应用 如图所示

在新创建的vue项目的src文件中创建名为public-path.js 的js文件,如图所示:

public-path.js文件代码如下:
if (window.__POWERED_BY_QIANKUN__) {
// eslint-disable-next-line no-undef
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
入口文件 main.js 文件代码修改如下:
import './public-path';
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router';
import routes from './router'
import store from './store'
Vue.config.productionTip = false
let router = null;
let instance = null;
function render(props = {}) {
const { container } = props;
router = new VueRouter({
base: window.__POWERED_BY_QIANKUN__ ? '/app-vue2' : '/',
mode: 'history',
routes: routes.options.routes,
});
instance = new Vue({
router,
store,
render: (h) => h(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() {
instance.$destroy();
instance.$el.innerHTML = '';
instance = null;
router = null;
}
打包配置文件(vue.config.js)代码修改成:
const { name } = require('./package');
module.exports = {
devServer: {
port: 7000,
headers: {
'Access-Control-Allow-Origin': '*',
},
},
configureWebpack: {
output: {
library: `${name}-[name]`,
libraryTarget: 'umd',
chunkLoadingGlobal: `webpackJsonp_${name}`,
},
},
};
原文链接:blog.csdn.net/qq\_5894683…