一、qiankunjs的核心思想
随着单页面spa应用的不断升级和流行,很多大型应用变得越来越难以维护,因此衍生出了很多的微前端技术,当然qiankunjs也是其中之一,其核心思想也就是把多个单页面子应用通过全局的window方式在主应用中进行js注册。
这样说你可能更能理解一点,我的主应用和子应用是两个项目,子应用是主应用的一部分,我的主应用在a.com,我的子应用b.com是另外一个单独的项目,但是我通过配置,在访问a.com的时候会去加载注入b.com打包的js文件
二、在vue3中如何使用qiankunjs
1 配置应用
新建一个文件夹qiankun 文件夹下新建main 与 qiankun-a文件夹 分别存放主应用与子应用
qiankun目录下是自己封装的一个自动安装器与启动器,主要内容在main与qiankun-a问价夹下
2. 配置main
在main.js引入子项目
3. 使用的地方插入子应用入口
4. 子应用vite配置
import { fileURLToPath, URL } from "node:url"; import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import Components from 'unplugin-vue-components/vite' import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers' // 乾坤 import qiankun from "vite-plugin-qiankun"; // https://vitejs.dev/config/ export default ({ mode }) => { console.log('子应用判断环境地址--------->', mode) return defineConfig({ base: mode === 'development' ? 'http://localhost:8081/' : '/flow-graph/', server: { port: 8081, cors: true, origin: "http://localhost:8081", headers: { "Access-Control-Allow-Origin": "*", }, }, resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)), "@img": fileURLToPath(new URL("./src/assets/imgs", import.meta.url)), }, }, plugins: [ vue(), qiankun("flow", { useDevMode: true, }), // antDesign 按需加载 Components({ resolvers: [AntDesignVueResolver()] }) ] }) }
- 子应用main.ts配置
import { createApp } from "vue" import App from "./App.vue" import router from "./router" import { renderWithQiankun, qiankunWindow } from "vite-plugin-qiankun/dist/helper" import "normalize.css"; import "./styles/main.scss"; import ElementPlus from "element-plus"; import "element-plus/theme-chalk/src/index.scss"; import * as ElementPlusIconsVue from "@element-plus/icons-vue"; import { store } from "@/stores"; import { useGetMicro } from '@/hooks/useGetParams' // const useGetMicro = useGetMicro() // 处理接收到的父容器传递过来的值 const storeChange = async (props: { [x: string]: any }): Promise<void> => { props.onGlobalStateChange && // props.onGlobalStateChange()方法就是用来监听主应用传值,value就是我们在主应用中action.js中初始化的对象值,每当主应用中调用setGlobalState()方法改变值的时候,在这里都可以监听到最新的值 (await props.onGlobalStateChange(async (value: any) => { useGetMicro().setAsyncParams(value) }, true)) } let app: any; if (!qiankunWindow.__POWERED_BY_QIANKUN__) { createApp(App).use(router).mount("#app"); } else { renderWithQiankun({ mount(props) { // 传递的值可以获取到了 storeChange(props) app = createApp(App) for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component); } app.use(ElementPlus); app.use(router) app.use(store) app.mount( props.container ? props.container.querySelector("#app") : document.getElementById("app") ); }, bootstrap() { console.log("--bootstrap"); }, update(props) { console.log("--update", props); }, unmount() { console.log("--unmount"); app?.unmount(); }, }); }
- 回到qiankun文件夹下正常 yarn serve 启动就可以啦
三、qiankun.js微前端后端管理系统模板介绍
本人自己搭建了一个简单的无内容后端管理系统,主应用Vue3.0 + vite + pinia 子应用 Vue3.2 + ts + vite + pinia
在这里插入图片描述
git clone 地址
https://gitee.com/zypzzz/vue3-qiankun-template
clone到本地后先运行yarn or npm i 安装启动器依赖
接着运行yarn install-all 安装所有子内容的依赖
成功后就可以运行yarn serve启动项目啦。
开发环境首次加载子应用稍微有点慢,请耐心等待