【微前端记录】微前端qiankun初体验

[复制链接]
发表于 2026-1-26 01:34:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
闲的没事学习了一下微前端架构,为以后项目复杂化后做预备,作个简单条记,记录一下根本使用方法和自己踩的一点小坑




  • 先粘贴一段百度的微前端先容吧
  1. 微前端是一种前端架构模式,旨在将大型前端应用程序拆分为多个独立、可独立部署的小型应用程序。这种架构模式借鉴了微服务的思想,解决了单体前端应用在扩展性、维护性和团队协作方面的诸多问题。
  2. 核心理念
  3. 独立性:
  4. 每个子应用都是独立的,可以独立开发、测试、部署和发布。
  5. 子应用之间的耦合度低,彼此独立运行。
  6. 技术无关:
  7. 不同的子应用可以使用不同的技术栈。例如,一个子应用可以使用 React,另一个可以使用 Vue 或 Angular。
  8. 这允许团队选择最适合他们的技术,而不必受限于主应用的技术选择。
  9. 团队自治:
  10. 每个团队可以独立负责一个或多个子应用,这样可以提高开发效率和灵活性。
  11. 团队可以根据自己的节奏进行开发和发布,而不必等待其他团队的进度。
  12. 渐进迁移:
  13. 可以逐步将单体应用拆分成微前端,而不需要一次性重写整个应用。
  14. 这减少了重构的风险和成本。
复制代码

闲话少说,接纳qiankun来实现微前端架构,先贴一段qiankun的先容
  1. qiankun 是一个基于 single-spa 的微前端框架,旨在更简单地实现和管理微前端架构。它提供了一套完整的解决方案,用于将多个独立的前端应用程序组合成一个整体,同时支持独立开发、独立部署和独立运行。
  2. 核心特点
  3. 简单易用:
  4. qiankun 提供了简单的 API,使得微前端的实现变得更加容易。
  5. 开发者可以快速上手,无需深入了解 single-spa 的复杂细节。
  6. 技术栈无关:
  7. 支持多种前端框架,如 React、Vue、Angular 等。
  8. 不同的子应用可以使用不同的技术栈,互不干扰。
  9. 独立部署:
  10. 每个子应用可以独立部署,主应用只需加载相应的 URL。
  11. 子应用的更新不会影响其他应用,发布过程更加灵活。
  12. 应用隔离:
  13. 通过沙箱机制实现子应用之间的隔离,避免相互影响。
  14. 支持样式隔离和 JavaScript 隔离,确保各自独立运行。
  15. 通信机制:
  16. 提供了主应用和子应用之间的通信机制,方便数据共享和事件传递。
  17. 支持全局状态管理和事件总线。
  18. qiankun 的工作原理
  19. qiankun 的核心工作原理是基于 single-spa 进行扩展和封装。它通过注册和启动子应用,实现子应用的加载、渲染和卸载。其主要步骤如下:
  20. 注册子应用:
  21. 通过 registerMicroApps 方法注册子应用,定义子应用的名称、入口、挂载容器和激活规则。
  22. 启动 qiankun:
  23. 调用 start 方法启动 qiankun,开始监听路由变化,根据激活规则加载和卸载子应用。
  24. 子应用生命周期管理:
  25. 子应用需要实现 bootstrap、mount 和 unmount 方法,用于初始化、挂载和卸载子应用。
复制代码

个人初体验的根本基座和微应用都是vue3+vite+ts
主应用的设置


  • 安装qiankun依靠
  • yarn add qiankun
  • 在一个喜好的位置创建一个id为myapp的盒子用来展示微应用
修改入口文件
  1. // 导入Vue的createApp函数,用于创建Vue应用
  2. import { createApp } from "vue";
  3. // 导入自定义的CSS样式文件,用于应用全局样式
  4. import "./style.css";
  5. // 导入App组件,作为Vue应用的根组件
  6. import App from "./App.vue";
  7. // 导入qiankun的registerMicroApps和start函数,用于注册和启动微前端应用
  8. import { registerMicroApps, start } from "qiankun";
  9. // 注册微前端应用
  10. // 这里注册了一个名为"vue app"的微应用,其入口URL为http://localhost:7100
  11. // 指定应用的容器为页面中的id为"myapp"的元素,并且当访问根路径("/")时,该应用将被激活
  12. registerMicroApps([
  13.   {
  14.     name: "vue app",
  15.     entry: "//localhost:7100",
  16.     container: "#myapp",
  17.     activeRule: "/",
  18.   }
  19. ]);
  20. // 启动qiankun,开始微前端应用的运行
  21. start();
  22. // 创建并挂载Vue应用
  23. // 这里使用createApp函数创建一个Vue应用,并将App组件作为根组件挂载到页面中的id为"app"的元素上
  24. createApp(App).mount("#app");
复制代码

微应用设置


  • 微应用使用vite构建,这里只说vite的设置
  • 安装 vite-plugin-qiankun
  • yarn add vite-plugin-qiankun
  • 接下来设置微应用的vite.config.ts
  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import qiankun from 'vite-plugin-qiankun'
  4. // 导出Vite配置,用于设置项目的基本配置
  5. export default defineConfig({
  6.   // 设置静态资源的公共基础路径
  7.   base: '/',
  8.   // 配置Vite的开发服务器
  9.   server: {
  10.     // 设置服务器端口
  11.     port: 7100,
  12.     // 启用跨域资源共享
  13.     cors: true,
  14.     // 设置CORS的来源
  15.     origin: 'http://localhost:7100',
  16.   },
  17.   // 使用的插件列表
  18.   plugins: [
  19.     // 使用Vue插件,这是Vite的Vue支持所必需的
  20.     vue(),
  21.     // 使用qiankun插件,用于微前端应用的开发
  22.     qiankun('myapp', {
  23.       // 开发模式下使用特殊配置,便于开发调试
  24.       useDevMode: true
  25.     })
  26.   ],
  27. })
复制代码

  • 设置微应用的main.ts
  1. import { createApp } from "vue";
  2. import "./style.css";
  3. import App from "./App.vue";
  4. import {
  5.   renderWithQiankun,
  6.   qiankunWindow,
  7. } from "vite-plugin-qiankun/dist/helper";
  8. let app: any;
  9. // 判断当前环境是否是 qiankun 微前端环境
  10. if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  11.   // 如果不是微前端环境,直接挂载应用
  12.   createApp(App).mount("#app");
  13. } else {
  14.   // 如果是微前端环境,使用 renderWithQiankun 进行应用的挂载
  15.   renderWithQiankun({
  16.     // 挂载应用
  17.     mount(props) {
  18.       app = createApp(App);
  19.       // 根据 props 提供的容器选择器挂载应用
  20.       app.mount(props.container?.querySelector("#app"));
  21.     },
  22.     // 初始化操作
  23.     bootstrap() {
  24.       console.log("bootstrap");
  25.     },
  26.     // 卸载应用
  27.     unmount() {
  28.       app.unmount();
  29.     },
  30.     // 更新应用
  31.     update() {
  32.       console.log("update");
  33.     },
  34.   });
  35. }
复制代码

小tips
也算是初体验踩的一点小坑吧,主应用和微应用都要同时启动才气正常访问到微应用
(我本以为启动主应用会主动启动依靠的微应用呢)
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表