千家信息网

微前端qiankun项目实践案例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"微前端qiankun项目实践案例分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"微前端qiankun项目实践案例分析"吧!那什么是 q
千家信息网最后更新 2026年11月03日微前端qiankun项目实践案例分析

本篇内容主要讲解"微前端qiankun项目实践案例分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"微前端qiankun项目实践案例分析"吧!

那什么是 qiankun 呢

qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。

什么是微前端

微前端架构具备以下几个核心价值:

  • 技术栈无关

主框架不限制接入应用的技术栈,微应用具备完全自主权

  • 独立开发、独立部署

微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新

  • 增量升级

在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略

  • 独立运行时

每个微应用之间状态隔离,运行时状态不共享

摘自 qiankun官方文档

主应用配置

此次项目 主应用与 子应用均为 vue ,

下载 qiankun

npm install qiankun

在主应用中注册微应用

// 导入乾坤函数

import {   registerMicroApps,    setDefaultMountApp,    start  } from "qiankun";

封装 render 方法

此方法在main.js 中要初始调用一次, 主要用来挂载主应用 , 之后子应用分别依次调用 ,所以故作判断. 传入的参数分别为 子应用 的 HTML 和 加载状态 content 字段 我们用 vuex 存储 起来,方便使用

let app = null;  function render({ appContent, loading }) {    if (!app) {      app = new Vue({        router,        store,        render: h => h(App),      }).$mount('#app');    } else {      store.commit('microApp/changeCenter', appContent);      store.commit('microApp/changeLoading', loading);    }  }

微应用注册

下文中的apps 可以为获取后数据 , 注册微应用 本文案例比较简单,方便大家理解 ,

在注册自应用的参数 ** container 与 render** 踩坑比较多,下边会着重讲解.

function genActiveRule(routerPrefix) {    return location => location.pathname.startsWith(routerPrefix);  }  //传递给子应用的数据  let msg = {  ![](https://user-gold-cdn.xitu.io/2020/4/27/171bbc5de042ec98?w=1811&h=959&f=gif&s=4951066)    data:'修炼爱情的辛酸,学会放好以前的渴望'  } let apps = [    {      name: 'linjunjie',       entry: '//localhost:215',  // 改成自己子应用的端口号      container:'#subView', //节点 id   //  沙盒模式       // render:render,  // 普通模式         activeRule: genActiveRule('/star'),      props:msg    }  ]     //注册的子应用 参数为数组  registerMicroApps(apps,{    beforeLoad: [      app => {        console.log(app)        console.log('[LifeCycle] before load %c%s', 'color: green;', app.name);      },    ],    beforeMount: [      app => {        console.log('[LifeCycle] before mount %c%s', 'color: green;', app.name);      },    ],    afterUnmount: [      app => {        console.log('[LifeCycle] after unmount %c%s', 'color: green;', app.name);      },    ],  });  setDefaultMountApp('/star/linjunjie')  //开启沙盒模式  start({      sandbox :{strictStyleIsolation: true}  })

当微应用信息注册完之后,一旦浏览器的 url 发生变化,便会自动触发 qiankun 的匹配逻辑,所有 activeRule 规则匹配上的微应用就会被插入到指定的 container 中,同时依次调用微应用暴露出的生命周期钩子。

主应用为子应用准备的 展示元素

  

子应用配置

关于子应用的配置相对较简单 , 不需要额外下载qiankun 主要将生命钩子 导出即可

导出响应的生命钩子

导出 bootstrap、mount、unmount 三个生命周期钩子,以供主应用在适当的时机调用。注意,实例化路由时,判断当运行在qiankun环境时,路由要添加前缀,前缀与主应用注册子应用函数genActiveRule("/subdemo")内的参数一致

'star' 值需要与主应用的值对应 genActiveRule("/star") 中的值需要商定好 主应用与微应用都要使用

如果 new VueRouter 不在main.js 中 配置 ,请将此配置移动到 main.js 方便管理

import routes from './router' //将路由信息导出方便使用   let router = null;  let instance = null;  function render(props = {}) {    const { container } = props;    router = new VueRouter({      base: window.__POWERED_BY_QIANKUN__ ? '/star' : '/',        mode: 'history',      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) {   //props 包含主应用传递的参数  也包括为子应用 创建的节点信息    console.log(props)    render(props);  }  export async function unmount() {    instance.$destroy();    instance = null;    router = null;  }

配置微应用的打包工具

除了代码中暴露出相应的生命周期钩子之外,为了让主应用能正确识别微应用暴露出来的一些信息,微应用的打包工具需要在vue.config.js 中 增加如下配置:

const packageName = require('./package.json').name;  module.exports = {    output: {      library: `${packageName}-[name]`,      libraryTarget: 'umd',      jsonpFunction: `webpackJsonp_${packageName}`,    },  };

子应用判断

子应用中新建 publicPath.js 在main.js 引入

if (window.__POWERED_BY_QIANKUN__) {   //处理资源   __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;   }

处理 资源加载问题

配置 vue.config.js

module.exports = {    publicPath:`//localhost:${port}`,  }

vue.config.js 完整配置

const path = require('path');  const packageName = require('./package').name;  function resolve(dir) {    return path.join(__dirname, dir);  }  const port = 7101; // dev port  module.exports = {    publicPath:`//localhost:${port}`,    outputDir: 'dist',    assetsDir: 'static',    filenameHashing: true,    devServer: {      // host: '0.0.0.0',      hot: true,      historyApiFallback: true,//添加 重点      port,      overlay: {        warnings: false,       errors: true,      },      headers: {        'Access-Control-Allow-Origin': '*',      },   },    configureWebpack: {      resolve: {        alias: {          '@': resolve('src'),        },      },      output: {        library: `${packageName}-[name]`,        libraryTarget: 'umd',        jsonpFunction: `webpackJsonp_${packageName}`,      },    },  };

踩坑记录

当前页面为子应用时, 刷新页面404

以下方式均为主应用配置

  • 方式一 删除 mode 配置项

mode: 'history', //   将此配置代码删除
  • 方式二 配置404 页面

如果没有注释掉mode: 'history' 此参数 将404 页面重新导向 home首页

{      path: '*',      name: 'indexNotFound',      component: resolve => require(['@/components/home'], resolve),      children: HomeChild,  },

子应用 样式隔离 开始沙箱模式 遇到的问题

  • 主应用配置sandbox :{strictStyleIsolation: true}渲染模式由 render 模式 改为 containercontainer:'#subView', 此时 子应用的 挂载 dom 为

    谨记主 container :#+id

  • 子应用配置 上文有提到 主要代码 截取

instance = new Vue({     router,     store,     render: h => h(App),   }).$mount(container ? container.querySelector('#app') : '#app'); //重点

遇到的问题: 开启沙箱模式,如果是 采用 render 模式会报错 ,故选择container 模式

到此,相信大家对"微前端qiankun项目实践案例分析"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

应用 配置 模式 前端 参数 生命 钩子 独立 案例 项目 信息 页面 案例分析 分析 实践 代码 周期 技术 数据 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网公司装修 金诺互联网科技 深圳互联网科技公司 华宇互联网科技 广州凡科互联网科技 互联网金融 科技创新 互联网科技公司介绍 开启互联网科技时代小说 深圳国际航运科技和互联网 湖北码尼互联网科技有限公司电话 哈尔滨屹滨互联网科技有限公司 为客找房互联网科技公司怎么样 深圳无忧互联网科技 21世纪互联网科技成就 有人说阿里系是互联网科技企业 易企秀互联网科技是做什么的 西安有哪些互联网高科技企业 陕西九四连强互联网科技有限公司 北京天晋互联网科技有限公司 恒生科技指数 中概互联网 麻工互联网科技 科技与互联网发展 礼当家互联网科技 昭通互联网科技选哪家 荆州市昕露互联网络科技有限公司 互联网科技人工智能实验室 工业互联网展湾科技股份有限公司 半导体行业属于互联网高科技类吗 互联网科技创新创业项目 重庆科技产业互联网有哪些
0