首先创建一个主应用,这里使用vite + vue3创建
主应用部分:
npm create vite@latest my-vue-app -- --template vue
import { registerMicroApps, start } from "qiankun";
const app = [
{
name: "sub-umi",
entry: "//localhost:8000",
container: "#sub-app",
activeRule: "/sub-umi",
},
{
name: "sub-vue",
entry: "//localhost:8081",
container: "#sub-app",
activeRule: "/sub-vue",
},
];
registerMicroApps(app, {
beforeLoad: [async (app) => console.log("beforeLoad", app.name)],
beforeMount: [async (app) => console.log("beforeMount", app.name)],
beforeUnmount: [async (app) => console.log("beforeUnmount", app.name)],
});
start();
<template>
qiankun app vue
<div><a href="/">主应用首页</a></div>
<div><a href="/sub-umi">子应用UMI</a></div>
<div><a href="/sub-vue">子应用Vue2</a></div>
<!-- 子应用渲染区域 -->
<div id="sub-app"></div>
</template>
子应用一(umi4)
npx create-umi@latest
npm i @umijs/plugins
export default defineConfig({
base: "sub-umi",
plugins: ["@umijs/plugins/dist/qiankun"],
qiankun: {
slave: {},
},
});
到这就配置完成了!!!
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/884844320efd479d93a9875bbd439ddc.png)
子应用二(vue2 + vite)
npm i vite-plugin-qiankun
import qiankun from "vite-plugin-qiankun";
export default defineConfig({
plugins: [
qiankun("sub-vue", {
useDevMode: true,
}),
],
server: {
origin: "http://localhost:8081",
},
});
import {
renderWithQiankun,
qiankunWindow,
} from "vite-plugin-qiankun/dist/helper";
function render(app) {
new Vue({
router,
store,
render: (h) => h(App),
}).$mount(app);
}
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
render("#app");
} else {
renderWithQiankun({
mount(props) {
render(props.container.querySelector("#app"));
},
bootstrap() {
console.log("bootstrap");
},
update() {
console.log("update");
},
unmount() {
console.log("mount");
},
});
}
> 特别注意:因为主应用配置的子应用二地址为/sub-vue,所以在vue项目中要配置router根路径base: '/sub-vue'
> 注意:!!!如果主应用访问子应用时接口404,需要在主应用也配置接口代理,代理到对应的子应用启动端口
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
export default defineConfig({
plugins: [vue()],
server: {
proxy: {
"/api": {
target: "http://localhost:8081",
changeOrigin: true,
rewrite: (path) => path.replace(/^\
},
},
},
});