qiankun 使用方法及基座子应用搭建实践

qiankun-微前端初体验 这里写自定义目录标题1、微前端2、什么是微前端2.1技术栈无关2.2独立开发、独立部署2.3增量升级2.4独立运行时3、初步简单使用介绍3.1 首先创建基座项目,即顶层项目,用来包裹各个微项目。3.2 首先创建vue微项目,可独立运行,可加载在父级项目。3.3 首先创建react微项目,可独立运行,可加载在父级项目。4、启动3个项目测试下 1、微前端 qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun 孵化自蚂蚁金融 阅读详情

1、介绍

Qiankun 是一个基于single-spa 的微前端实现库,旨在帮助大家能更简单,无痛的构建一个 生产可用微前端架构系统。 孵化自蚂蚁金融科技基于微前端架构的云产品统一接入平台,经过一批线上应用的充分检验及 打磨后,将其微前端内核抽离出来并开源。目前 qiankun 已在蚂蚁内部服务了超过 200+ 线 上应用,在易用性及完备性上,是值得信赖的。

2、核心设计理念

微前端的核心目标是将巨石应用拆解成若干可自治的松耦合微应用,而qiankun 的诸多设计均 是秉持这一原则。如:html entry, 沙箱,应用间通信等。确保微应用真正具备独立开发,独 立运行的能力;使得微应用的接入像使用iframe一样简单。

2.1 技术特性

技术栈无关,可支持多种技术框架;

独立开发,独立部署,独立运行;

基于single-spa 封装,提供了更加开箱即用的API;

HTML Entry 接入方式: import-html-entry 去加载对应html 文件;

样式隔离,JS 沙箱:确保微应用之间样式互相不干扰,确保微应用之间 全局变量/事件不冲 突;

资源预加载:在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度;

3、qiankun实战

3.1 架构搭建

qiankun 是基于基座模式的,所以它必然有一个基座应用(主应用),来管理各个子应用的加 载和卸载。我们以一个基于Vue的管理系统为例,来看如何搭建一个微前端项目。

3.2 基座搭建

  • qiankun安装:npm i qiankun -S
  • 搭建好一个常规的Vue应用,并编写好以上三个区域对应的组件,此时的根组件结构 大概如下
<template>
<div class="container">
<div class="app-header">
<prime-header></prime-header>
</div>
<div class="app-menu">
<prime-menu></prime-menu>
</div>
<div class="app-content">
<div id="container"></div>
</div>
<div class="help-taggle">
<prime-help></prime-menu>
</div>
</div>
</template>
  • 创建一个文件registerMicroApps,来定义各个子应用的入口:
// 导入注入应用,初始化数据的方法
import { registerMicroApps, initGlobalState } from "qiankun";
// 定义注入子应用的数组
export const registerList = [
    {
    name: "vue-child-app",
    //package.json 中的名字,唯一不可重复,qiankun 基于此变量进行缓存
    entry: "http://XXXX", // 子应用服务地址
    container: "#container", // 注入主应用的Id
    activeRule: "/portal/****", // 触发子应用路由
    },
]
// 导出注入子应用的方法,哪里使用,哪里调用
export function registerMicroAppsData() {
// 定义全局数据
const state = {
    changeMainData: true,
    userInfo: localStorage.getItem("**"),
};
// 初始化全局数据
const actions = initGlobalState(state);
// 全局数据发生改变时触发的方法
actions.onGlobalStateChange((state, prev) => {
// state: 变更后的状态; prev 变更前的状态
// console.log("主应用22" + state, prev);
});
// 设置初始化数据
actions.setGlobalState(state);
actions.offGlobalStateChange();
// 注入子应用
registerMicroApps(registerList);
}
  • 创建子应用入口文件并启用qiankun
import { start } from "qiankun";
if (!window.qiankunStarted) {
    window.qiankunStarted = true;
    // 启动qiankun,并开启预加载
    start({ prefetch: true });
}
  • 路由配置history模式
const router = new VueRouter({
    mode: 'history',
    routes
});
  • 路由注入
  • {
        path: "/portal/", // 子应用路由前面统一标识
        component: Layout,
        hidden: true,
        children: [
        {
        path: "*", // paasPortal下所有的路径都适用
        //导入子应用的入口文件
        component: () => import("@/views/PortalContainer.vue"),
        name: "portal",
        title: "portal",
        meta: { title: "portal", icon: "", affix: false },
        // affix 属性与tagView 标签功能相关,true一直固定,false 可以关闭
            },
        ],
    },

    3.3 基座搭建完成

基座应用已经搭建好了。以history模式为例,根据 qiankun 和 single-spa 的实现原理, 当我们点击菜单的时候,我们可能会通过以下两种方式修改地址栏的地址:

window.history.pushState({}, '', '/portal/***');
window.location.href = '/portal/***';

这两种方式都会触发 hashChange 事件,而 qiankun 借助 single-spa 所绑定的监听事件,会侦 测到地址变化,从而执行 single-spa 的 reroute 函数;随后 qiankun 通过 import-html-entry 提供的能力,去下载 /portal/***对应的html文件,并从中解析出所依赖的脚本和 样式文件。 qiankun 会将其封装在一个沙箱中,执行这些脚本并添加样式表,从而渲染出子应 用。经过这些步骤,应用 /portal/*** 就会像一个原生的组件一样被渲染到基座应 用的占位节点内。 当点击其他菜单时,同样会触发 hashChange 事件, single-spa 会重新执行 reroute ,卸载原 子应用,加载新的子应用。

 3.4 子应用搭建

  • 我们希望子应用可以像原生组件一样直接渲染到基座应用的 content 内容区域,那么按照 single-spa 应用入口协议,我们必须在子应用main.js内暴露出三个必要的生命周期钩子函 数:
let instance = null;
// 在 src 目录新增 public-path.js :
function render(props = {}) {
    const { container } = props;
    router = new VueRouter({
    base: window.__POWERED_BY_QIANKUN__ ? "/portal/***/" : "/",
    mode: "history",
    routes
});
instance = new Vue({
    router,
    store,
    render: (h) => h(App)
}).$mount(container ? container.querySelector("#app") : "#app");
}
// 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,
// 不会再重复触发 bootstrap
export async function bootstrap() {
console.log("[vue] vue app bootstraped");
}
// 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法
export async function mount(props) {
    console.log("[vue] props from main framework", props);
    console.log("通过主应用props传过来的值", props.text123);
    // 监听数据 写在vue原型链上,方便全局调用
    Vue.prototype.$onGlobalStateChange = props.onGlobalStateChange;
    Vue.prototype.$setGlobalState = props.setGlobalState;
    Vue.prototype.$onGlobalStateChange((state, prev) => {
    console.log("通过主应用initGlobalState传过来的值", state, prev);
});
// 设置数据,需要更改全局数据中的一个方法才能触发onGlobalStateChange方法
Vue.prototype.$setGlobalState({
    changeMainData: true;// 此属性为在全局设置的一个无效属性,可拿到全局数据
});
Vue.prototype.$text123 = props.text123;
Vue.prototype.$adminToken = props.adminToken;
    render(props);
}
export async function unmount() {
    // 实例销毁,与路由同时设置为空
    instance.$destroy();
    instance.$el.innerHTML = "";
    instance = null;
    router = null;
}
  • 在 src 目录新增 public-path.js :
if (window.__POWERED_BY_QIANKUN__) {
    __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
  • 打包配置修改( vue.config.js ):
// umd格式的应用会向外暴露指定的生命周期钩子函数,便于single-spa解析。
//jsonpFunction配置是webpack打包之后保存在window中的key,
// 只需保证各个子应用不一致即可。
const { name } = require('./package');
module.exports = {
    devServer: {
    headers: {
    'Access-Control-Allow-Origin': '*', // 跨域配置
    },
},
configureWebpack: {
    output: {
    library: `${name}-[name]`,
    libraryTarget: 'umd', // 把微应用打包成 umd 库格式
    jsonpFunction: `webpackJsonp_${name}`,
},
},
};
  • 路由配置
router = new VueRouter({
    // 路由前面统一添加path和基座中注入子应用的activeRule 相对应
    base: window.__POWERED_BY_QIANKUN__ ? "/portal/***/" : "/",
    mode: "history",
    routes
});
  • 完成以上配置后,分别启动基座应用和子应用。当访问基座应用并点击概况菜单时,地址栏的 url会发生变化, qiankun 就会自动去子应用所在的服务下载html文件,并解析出脚本和样式 进行渲染,于是这个子应用就会展示在图中的 content 内容区域了。 qiankun 搭建完成。

4、总结

4.1 常见问题(详情如上述)

  • 全局传值问题
  • 注入应用名称问题
  • 路由触发规则

4.1 参考官网

vue微前端qiankun框架学习到项目实战,基座登录动态菜单及权限控制 技术无关,独立开发,独立部署,增量升级,独立运行,微前端的核心目标是将巨石应用拆解成若干可以自治的松耦合微应用。 阅读详情

相关推荐

[qiankun]微前端实现方案

微前端的实现方案-qiankun 2018年 Single-SPA诞生了, single-spa是一个用于前端微服务化的JavaScript前端解决方案 (本身没有处理样式隔离、js执行隔离) 实现了路由劫持和应用加载; 2019年 qiankun基于Single-SPA, 提供了更加开箱即用的 API (single-spa + sandbox + import-html-entry),它 做到了技术栈无关,并且不推荐抽取公共方法,工具等,它推荐的是每个微服务是独立的,并且不相互影响的,并且接入简单

前端 2300

基于qiankun框架的微前端实战使用

最近公司要整合目前所有的前端项目,希望放到同一个项目里面进行管理,但是项目使用的技术栈大体不相同,有原生js的,有用jq的也有用Vue的,整合的话要么重构,统一技术栈,不过这是不现实的,成本高,时间长,要么使用iframe,但是iframe也有很多缺点,通信不方便,刷新页面会导致路由丢失,这都是很不好的体验,于是我想起了最近很火的微前端概念,打算用微前端的技术来整合已有项目。 什么是微前端?微前端就是将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。微前端的核心在于拆,拆完后...

qq_37947438的博客 4957

qiankun搭建主应用与子应用

{/* 基座内容区 */})){/* 加载子应用内容区域 */}

weixin_43845137的博客 2504

qiankun多重应用嵌套

有空补充

qq_36595054的博客 5375

基于qiankun搭建angular为基座vue为子应用的微前端项目

使用angular作为基座,vue作为子应用进行搭建微前端应用,使用其他框架也是类似操作

恍若c的博客 804

vue3+qiankun+vite搭建微前端服务

因业务需要搭建一套微前端服务, 阅读文档时发现qiankun与vite无法一起使用,需要引入额外插件才可以一起使用,在这里记录下 qiankun基座配置 1.修改index.html中div的id,并在main.js中修改挂在函数 //index.html <div id="qiankunBaseApp"></div> //main.js createApp(App) .mount('#qiankunBaseApp') 2.main.js启动qiankun import { r

LD喂!的博客 4897

qiankun微前端初探

长期维护文档:qiankun微前端实践 一:脚手架均为umijs 参考 官方文档:@umijs/plugin-qiankun ant design pro 如何使用 qiankun 做微前端(上 说明 下述应用脚手架均为umijs 子应用 1. 下载qiankun插件 yarn add -D @umijs/plugin-qiankun 2. 配置 // config/config.ts export default { // ...... 其他配置 qiankun: {

天空影 701

giankun+vue微前端实战配置流程详解,包含基座配置、子应用配置、参数传递

【代码】giankun+vue微前端实战配置流程详解,包含基座配置、子应用配置、参数传递。

weixin_42247693的博客 6324

微前端qiankun从搭建到部署的实践

最近负责的新项目用到了qiankun,写篇文章分享下实战中遇到的一些问题和思考。 示例代码: github.com/fengxianqi/…。 在线demo:qiankun.fengxianqi.com/ 单独访问在线子应用: subapp/sub-vue subapp/sub-react 为什么要用qiankun 项目有个功能需求是需要内嵌公司内部的一个现有工具,该工具是独立部署的且是用React写的,而我们的项目主要技术选型是vue,因此需要考虑嵌入页面的方案。主要有两条路: iframe方案 q

1万+

微前端qiankun从搭建到部署的实践总结

最近负责的新项目用到了qiankun,写篇文章分享下实战中遇到的一些问题和思考。 示例代码: https://github.com/fengxianqi/qiankun-example。 在线demo:http://qiankun.fengxianqi.com/ 单独访问在线子应用: subapp/sub-vue subapp/sub-react 为什么要用qiankun 项目有个功能需求是需要内嵌公司内部的一个现有工具,该工具是独立部署的且是用React写的,而我们的项目主要技

wangweiruning的博客 1584

ITK-snap医学图像标注方法(超级详细)——保姆级

医学3D图像标注方法,非常详细,保姆级

jialiyk的博客 3万+

知识篇:(六)微前端架构解析:使用 qiankun 实现灵活的子应用管理

将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。微前端的核心在于拆,拆完后在合!

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 2592

泰山派RK3576开发板部署Qwen3-VL-4B多模态模型实战指南:从模型转换到板端推理全流程

本文提供了在泰山派RK3576开发板上部署阿里Qwen3-VL-4B多模态模型的完整实战指南。详细介绍了从环境准备、模型转换(包括视觉模型转换为.rknn格式和语言模型转换为.rkllm格式)、交叉编译到板端推理的全流程,重点讲解了如何利用RK3576的NPU进行硬件加速,实现高效的边缘AI应用。

weixin_30356433的博客 259

vue qiankun 主应用访问子应用 不显示也不报错

业务背景:原内管平台中子系统越来越多,项目越来越大,打包发布需要十几分钟,本地运行npm run dev都非常容易因为内存不够导致崩溃(虚拟桌面内存就8G),业务打算将渠道管理平台中的一个子系统独立出来,用qiankun改成微前端架构。 介绍 - qiankunhttps://qiankun.umijs.org/zh/guide 遇到的问题:从主应用访问子应用时,控制台不报错,但是页面显示空白。 之前在测试demo中成功搭建过一次,由于过了两周印象不是很深刻,打算再重新搭建一次demo,主应用和子应用

风间琉璃c 1万+

【STM32-DSP库的使用】基于Keil5 + STM32CubeMX + CMSIS-DSP 手动添加、库添加方式

CMSIS-DSP库在工程中应用遇到的所有问题进行归纳终结

洋洋的博客 1万+

从CT扫描到3D模型:手把手教你用NII文件在3D Slicer中重建脊柱(附Verse数据集实战)

本文详细介绍了如何利用NII文件在3D Slicer中从CT扫描数据重建脊柱3D模型的全流程,包括环境配置、数据获取、方向校准、结构分割和模型优化等关键步骤。通过Verse数据集实战演示,帮助医学从业者快速掌握医学图像处理技术,提升临床诊疗与教学效率。

weixin_42651281的博客 203

微前端qiankun从搭建到部署的实践 (转载)

最近负责的新项目用到了qiankun,写篇文章分享下实战中遇到的一些问题和思考。 示例代码: github.com/fengxianqi/…。 在线demo:qiankun.fengxianqi.com/ 单独访问在线子应用: subapp/sub-vuesubapp/sub-react 为什么要用qiankun 项目有个功能需求是需要内嵌公司内部的一个现有工具,该工具是独立部署的且是用React写的,而我们的项目主要技术选型是vue,因此需要考虑嵌入页...

全栈小菜鸟 1747

Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云?

本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。

postgres8guard的博客 722

qiankun微前端项目搭建 Angular基座+Angular子应用 基座、子应用配置全流程 基座子应用通信简例

csdeskweb拆分流程 csdeskweb-base 基座 npm i qiankun -S 在app.component.ts中 import { registerMicroApps, start } from 'qiankun'; registerMicroApps([ { name: 'reactApp', entry: '//localhost:3000', container: '#container', activeRule: '/app-react',

qq_36996785的博客 3812

YOLOv11改进 | 特殊场景改进篇 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的改进机制是2024.3月份最新改进,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2014

0.嵌入式控制器EC实战 Embedded Controller开发概述

文章目录前言1.嵌入式控制器EC概述2.EC芯片框图(IT8502为例)3.General Purpose I/O Port (GPIO)4.SMBus(System Management Bus,系统管理总线)5.PWM、TACH6.KBC(KeyBoard Controller)7.PS/28.ADC(模数转换)总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 1.嵌入式控制器EC概述 嵌入式控制器EC是挂在CPU的L

qq_30135687的博客 1万+

qiankun微前端构建笔记:react主应用,vue2/vue3/react子应用

对于任何微应用框架来说,都是由基座(即父应用)和子应用组合构成的,下面开始搭建基座。父应用可以采用不同的技术框架,比如react、vue2、vue3。先确保开发环境安装好了Nodejs,然后执行以下命令。如果要创建react父应用: vue父应用: Umi父应用: 这里用react举例,运行上面第一个指令,直到出现下面的成功提示:成功之后,在父工程里添加qiankun,用npm或yarn都行。 3 在基座里注册子应用 3.1 子应用的注册 注册子应用需要使用 qiankun 提供的方法 registerMi

baist_5的博客 1651

Android 14.0 系统开机屏幕设置默认横屏显示

在14.0的系统ROM产品定制化开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了

安卓兼职framework和app工程师的博客 2151

阿里微前端qiankun框架基本介绍与应用配置,包含基座与子应用间通信

阿里微前端qiankun框架基本介绍与应用配置,包含基座与子应用间通信

m0_73761441的博客 1684

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

以vue.js为基座,搭建前端微应用(实现简单的通过基座访问子应用)

在同级目录中创建两个或多个vue项目,区分开哪个是基座,哪些是子应用;我这里只创建一个子应用,大家可以根据自己的掌握情况,后续创建多个子应用;3.把父级应用跑起来,通过父级应用的 localhost:xxxx/app1,进行访问,验证是否可以加载子应用内容,内容变换代表,搭建成功。打开qiankun官网,结合我整理的教程与官网对照着学习,因为官网教程不够详细,下面我会手把手教大家如果搭建一个前端微应用~注:环境不要装错,如果想不起来怎么新建vue项目,就去vue.js官网查看。注:注释掉的内容后面。

m0_56751787的博客 822

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: Promise.all 使用方法
下一篇: js 数组操作方法(不改变原数组与改变原数组方法)
椰子小姐姐
博客等级 码龄14年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值