qiankun.js基本用法

qiankunJS简介 --基于spa的微服务框架 本文参考qiankunJS官方文档:介绍 - qiankun qiankunJS简介 --基于spa的微服务框架 qiankun是一个基于single-spa的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统,孵化自蚂蚁金融科技基于微前端架构的云产品统一接入平台 qiankunJS优势 spa框架国内外都有很多,但是就国内而言,大部分开发团队都会选择qiankun,我认为有以下几个原因: 1.首先是稳定,作为阿里巴巴内部的一个B端系统解决方案,同时服务着阿里.. 阅读详情

Vue3+TS版qiankun子应用

1.1 文件夹src下增加public-path.ts文件;内容:

1.2 修改main.ts

1.2.1 修改src/main.ts文件引入public-path.js

1.2.2 修改src/main.ts的启动程序,并导出qiankun对象生命周期

  1. 接入统一门户,需在mount方法中增加 w.rmLoading && w.rmLoading(); 关闭移除loading;

1.2.3 文件夹src下增加 useCurrentInstance.ts 文件;内容:

1.2.4 修改src/App.vue文件(按项目实际代码参照下图调整);内容:

Vue2的qiankun子应用接入

1、src文件夹下增加文件

1)  public-path.js

设置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

const { name } = require("../package");

if (window.__POWERED_BY_QIANKUN__) {

  // eslint-disable-next-line no-undef

  let qiankunPath = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;

  // 子系统包名

  let childrenPackage = name;

  const isContain = new RegExp(childrenPackage, "gi");

  // 部署父子系统为同级目录需要校验,加载地址是否包含子系统包名[不包含需进行增加]

  if (!isContain.test(qiankunPath)) {

    // 生产环境才进行重新赋值

    if (process.env.NODE_ENV === "production") {

      const array = qiankunPath.split("/");

      let splitStr = "";

      if (array[array.length - 1] !== "/") {

        splitStr = "/";

      }

      qiankunPath = [qiankunPath, splitStr, `${childrenPackage}/`].join("");

    }

  }

  __webpack_public_path__ = qiankunPath;

}

2) 增加\common\config\index.js

设置

let tmpIp = "10.201.200.205:8080";

let htTmpIp = "10.201.200.205:9600";

// 开发环境

if (window.location.host == "10.201.210.81:8888") {

  tmpIp = "10.201.210.81:8088";

  htTmpIp = "10.201.210.205:9600";

}

// 测试环境

if (window.location.host == "10.201.220.63:9100") {

  tmpIp = "10.201.220.65:8080";

  htTmpIp = "10.201.220.65:9600";

}

// 验收环境

// if (window.location.hostname == '10.201.200.???') tmpIp = '10.201.200.205';

  

const config = {

  microName: "content", // 当前当微服务的名称

  key: "fh23r89rhe2ur87riwr3e2", // des秘钥

  modaltobody: false, // 统一弹窗模式

  toFatherIp: tmpIp,

  toFatherHtIp: htTmpIp,

  host: ""

};

  

export default config;

2、修改main.js配置

1) 引入文件:

设置

import "./public-path";


2) 修改new Vue启动配置

设置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

let instance = null;

function render(props = {}) {

  const { container } = props;

  instance = new Vue({

    router,

    store,

    render: (h) => h(App)

  }).$mount(container ? container.querySelector("#app") : "#app");

}

  

// 独立运行时

if (!window.__POWERED_BY_QIANKUN__) {

  render();

}

3) 增加暴露对外方法

设置

export async function bootstrap() {

  // console.log("[vue] vue app bootstraped");

}

export async function mount(props) {

  // console.log("[vue] props from main framework", props);

  const getStyle = window.getComputedStyle;

  // @ts-ignore

  window.getComputedStyle = (element, property) => {

    if (!element || element.nodeType === 9) return {};

    return getStyle(element, property);

  };

  // console.log(window.getComputedStyle);

  Vue.prototype.parentProps = props;

  render(props);

}

export async function unmount() {

  instance.$destroy();

  instance.$el.innerHTML = "";

  instance = null;

}

4) 增加 findAllrouter方法

设置

const findAllrouter = (a, tf) => {

  const _children = a.children;

  if (_children) {

    for (var index = 0; index <= _children.length - 1; index++) {

      const item = _children[index];

      const itemChildren = item.children;

      if (itemChildren) {

        if (tf.indexOf(item.path) != -1) {

          return true;

        }

        if (findAllrouter(item)) {

          return true;

        }

      } else {

        if (tf.indexOf(item.path) != -1) {

          return true;

        }

      }

    }

  }

};


5) 修改 router.beforeEach

设置

// 每次路由跳转前工作

router.beforeEach((to, from, next) => {

  let tf = to.fullPath;

  // 设置允许子应用切换路由的条件,

  // 1、必须当前即将打开的页面是当前子系统

  // 2、当前存在该路由的,不然就报错

  if (window.qiankunMicroName == config.microName) {

    // 只取name=home的数据

    let tmpArray = Array.from(router.options.routes).filter(item => {

      return item.name == "home";

    });

    let tmp = findAllrouter(tmpArray[0], tf);

    if (tmp) {

      next();

    }

  } else if (!window.qiankunMicroName) {

    next();

  }

});


3、修改App.vue

1) 在export default 前增加findAllrouter方法

设置

const findAllrouter = (a, tabId) => {

  if (a.children) {

    for (var index = 0; index <= a.children.length - 1; index++) {

      if (a.children[index].children) {

        if (a.children[index].componentName == tabId) {

          return a.children[index].name

        }

        if (findAllrouter(a.children[index])) {

          return a.children[index].name

        }

      } else {

        if (a.children[index].componentName == tabId) {

          return a.children[index].name

        }

      }

    }

  }

}

2)  在 methods 中增加 init 方法

设置

init() {

     if (window.__POWERED_BY_QIANKUN__) {

       this.parentProps.onGlobalStateChange((state) => {

         console.log('__POWERED_BY_QIANKUN__', state)

         // 目的是为了解决上次遗留的不保存组件,不然一直会有一个组件不能被保存状态;

         // this.CHANGE_EXCLUDECP()

         const stateName = 'micro-' + this.config.microName

         const mainPushInfo = state[stateName]

         console.log('mainPushInfo-----', mainPushInfo)

         // 用户登录信息/其他信息

         if (mainPushInfo.loginInfo) {

           this.SET_LOGININFO({

             resList: mainPushInfo.loginInfo.resList,

             token: mainPushInfo.loginInfo.token,

             userInfo: mainPushInfo.loginInfo.userInfo

           })

         }

         // 当前路由

         if (mainPushInfo.nowRouteInfo) {

           const nowRouteInfo = mainPushInfo.nowRouteInfo

           if (nowRouteInfo.params) {

             this.config.host = nowRouteInfo.params.host || ''

           }

         }

         // 需要关闭的菜单

         if (state[stateName].excludeCp) {

           const excludeCpArr = state[stateName].excludeCp.split('/')

           const tabId = excludeCpArr[excludeCpArr.length - 1]

           let tmpArr = Array.from(router.options.routes).filter((item) => {

             return item.name == 'home'

           })

           let tmp = findAllrouter(tmpArr[0], tabId)

           // this.CHANGE_EXCLUDECP([tmp])

         }

       }, true)

     }

   }

3)  在 mounted 执行 init

4、写缓存数据

设置

import config from "@/common/config";

  

// 设置store时的名字

const setStoreName = (name) => {

  if (window.__POWERED_BY_QIANKUN__) {

    return config.microName ? `${config.microName}-${name}` : name;

  } else {

    return name;

  }

};

  

 // window.sessionStorage.setItem(setStoreName(name), `content`);

浅谈乾坤JS隔离的三种机制(快照沙箱、两种代理沙箱) 从上面的代码可以看出,ProxySandbox不存在状态恢复的逻辑,因为所有的变化都是沙箱内部的变化,和window没有关系,window上的属性自始至终都没有受到过影响。支持多应用的代理沙箱则可以为每个微应用创建一个独立的沙箱环境,避免了多个应用之间的状态混乱问题。支持多应用的代理沙箱则可以支持多个微应用同时运行,因为它可以为每个微应用创建一个独立的沙箱环境,避免了多个应用之间的状态混乱问题。同时,支持多应用的代理沙箱也不需要遍历window上的所有属性,因为它只会代理微应用需要的属性,从而提高了性能。 阅读详情

相关推荐

qiankun原理解析

qiankun 是一个基于single-spa框架实现的一个微前端框架,single-spa虽然实现了路由劫持和应用加载,但是没有实现样式隔离和js隔离,并不是一个完善的微前端框架;

qq_42943914的博客 6422

qiankun.js应用

qiankun.js配置方法

tdjqqq的博客 5326

微前端-qiankun

借鉴了微服务的概念,将一个放大的巨石应用拆分多个独立灵活的小型应用,每个应用过都可以独立开发、独立运行、独立部署,还可以随意组合,降低耦合度,更灵活。:在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略。qiankun :产由阿里巴巴,基于single-spa,在它的基础上增加了很多功能。:微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新。:主框架不限制接入应用的技术栈,微应用具备完全自主权。

weixin_44922119的博客 2653

基于qiankun.js的微前端应用实战

qiankun.js介绍: qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。参考:: 介绍-qiankun优势 技术栈无关;独立开发、部署;增量升级;独立运行状态隔离 Why Not Iframe使用: 主应用:主应用里调用app注册微应用,并通过star启动 安装qiankun 在src目录新建qiankun文件夹,并在里面新建一个index.js用于编写注册微应用代码 initQiankun方法 接口解释: register

weixin_42254016的博客 2864

iStore增强插件 如何重塑家庭网络与存储体验

本文深入解析了iStore增强插件如何重塑家庭数字生活体验。它通过集成智能流控、一键式文件共享、媒体服务器及智能家居网关等功能,将复杂的网络配置、存储管理与设备协同简化为图形化操作,有效解决了家庭网络卡顿、数据割裂与使用门槛高等核心痛点,让普通用户也能轻松打造高效、稳定、安全的家庭数字中枢。

prometheus9mon的博客 646

基于Pixi.js的Live2D看板娘离线加载实战指南

本文详细介绍了基于Pixi.js实现Live2D看板娘离线加载的完整方案,涵盖环境搭建、模型加载、交互功能实现及常见问题解决。通过Pixi.js的硬件加速优势,开发者可在Web和Electron项目中无缝集成离线运行的Live2D模型,提升用户体验并避免网络依赖问题。

weixin_29001423的博客 343

微前端qiankun框架的底层实现原理

微前端qiankun框架的底层实现原理

wanghe1111_的博客 6130

Halcon实战:5分钟搞定金属表面划痕检测(附完整代码解析)

本文提供了一份基于Halcon的金属表面划痕检测实战指南。通过核心的动态阈值算法,快速从图像中提取局部对比度异常区域,并结合形态学后处理与特征筛选,精准识别划痕。文章详解了从代码搭建、参数优化到工业场景适配的全流程,帮助工程师在五分钟内构建稳定高效的机器视觉检测方案。

weixin_29084231的博客 495

微前端之qiankun

qiankun前言bugqiankun实战 前言 qiankun 框架是基于single-spa框架的,所以遵循的协议都一样,也是向外暴露三个钩子函数,但是qiankun 在single-spa的基础上进行了改进: 1,与技术栈无关 2,解决了single-spa的隔离问题,css隔离,js隔离 3,js沙箱机制 4,可以预加载子应用 5,主应用也无需构建请求,内部封装了fecth请求,只需要子应用配置跨域就行 bug 昨天晚上开始写,不断遇见bug,解决一个又会遇见另外一个,真好。今天早上才解决完成,主要

weixin_53011724的博客 1万+

别再手动量了!用Python+Open3D给BIM模型做‘CT扫描’,自动揪出施工误差(附完整代码)

本文介绍如何利用Python和Open3D技术实现BIM模型的毫米级施工误差自动检测。通过点云预处理、模型配准和偏差分析,系统能自动生成三维差异热力图和验收报告,显著提升施工质量检测效率。特别适合混凝土结构错位和钢结构安装偏差等常见问题的智能分析。

weixin_29284657的博客 243

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 937

qiankun微前端

问题分析:一般实在网络较慢的时候出现,意思就是还没有加载好没法显示。,并创建index.js文件。2、index.js文件内容。绑定子项目显示的位置,在。在两个项目同级目录执行。

记录工作 1886

9篇3章3节:FAERS数据库公共仪表板搜索功能操作与解析

FAERS(FDA不良事件报告系统)公共仪表板是一个强大的工具,用于查询和分析药物及生物制品的不良事件数据。通过该仪表板,用户可以按药品或不良反应进行搜索,查看报告数量、事件类型及时间分布,从而辅助药物安全性分析和科研研究。本文重点介绍仪表板的搜索功能,包括按产品和按不良反应查询的操作步骤、筛选与多维数据分析方法,以及关键概念的解释,帮助用户科学、理性地使用FAERS数据,提升用药决策的准确性和安全性。

MD Code 1585

基于qiankun.js微前端Vue项目源码

结合小编多年搬砖的经验,企业级的大规模集成平台普遍存在巨石项目难以维护的痛点。载最近的招聘面试中也会有面试官提及微前端的应用场景。小编拙见认为未来微前端将会成为一种趋势。目前为止,对于这种普遍的平台集成,第一种是打击熟悉的iframe,但是用过的人都知道,iframe的缺点,谁用谁知道哈。第二种的话就是基于阿里孵化的项目qiankun.js。这也是小编强力推荐的微前端解决方案。优缺点我就不再这里说了,各位可以移步qiankun.js的官网了解。小编基于Vue3+typescript+vite搭建了一个主应用

Javon_huang的博客 1194

【拼多多笔试题汇总】2024-03-24-拼多多春招笔试题

A 小镇上有个奇特的游戏。游戏开始时,A 先生准备了一排 nnn 个物品。K 小姐和卢小姐则轮流进行操作。首先,K 小姐可以选择移除至多 xxx 个物品。接着,卢小姐也可以选择移除剩余物品中的至多 yyy 个。游戏的目标是,K 小姐想尽量让剩余物品的价值之和最大化,而卢小姐则想将剩余物品的价值之和最小化。假设两人都采取最优策略,请问最后剩余物品的价值之和是多少?第一行包含五个正整数 n,m,k,x,yn, m, k, x, yn,m,k,x,y,分别表示物品的总数、K 小姐最多可移除的物品数、卢小姐最多可移

春秋招笔试突围 1万+

ubuntu 20.04 搭建多用户远程桌面共享及同时在线使用

摘要:本文介绍了在物理机上配置远程桌面访问的完整流程。通过setup_xrdp.sh脚本自动安装xrdp服务,修改配置文件并开放3389端口。同时提供了用户管理脚本:add_rdp_users.sh用于创建带sudo权限的远程用户,del_rdp_users.sh用于删除用户及主目录。还包含批量操作脚本add_rdp_all.sh和del_rdp_all.sh,支持一次性创建/删除多个用户(如dev1-dev5),所有用户密码统一设置为111111。完整方案实现了远程桌面环境的快速部署和用户集中管理。

621

vue项目落地(qiankun.js)微前端服务

什么是微前端? 网上抄的: 微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用还可以独立开发、独立部署。同时,它们也可以在共享组件的同时进行并行开发. 我的理解: 微服务就像是一个操作系统:在其中可以运行多个app。但每个app呢,又可以脱离操作系统独立运行。 为什么选择qiankun.js | qiankun.js优点 大白话: 就目前市面上没有比qiankun.js更好用的了。虽基于 single

zhanghaoran 4199

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

qiankun的简单使用

本文介绍了微前端框架qiankun的核心概念和使用方法。qiankun基于single-spa实现,具有技术栈无关、独立部署、增量升级等特点,适用于大型前端应用的拆分。文章详细讲解了主应用配置、子应用生命周期钩子、资源加载路径处理、通信机制等关键内容,并提供了代码示例。通过qiankun可以实现多个独立应用的集成,解决复杂系统中多应用协同工作的难题,同时保持各应用的独立开发和运行能力。

weixin_42400404的博客 1020

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vue项目落地(qiankun.js)微前端服务‘

什么是微前端? 网上抄的: 微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用还可以独立开发、独立部署。同时,它们也可以在共享组件的同时进行并行开发. 我的理解: 微服务就像是一个操作系统:在其中可以运行多个app。但每个app呢,又可以脱离操作系统独立运行。 为什么选择qiankun.js | qiankun.js优点 大白话: 就目前市面上没有比qiankun.js更好用的了。虽基于sing.

飞翔的熊blabla 1259

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

微前端qiankun集成

关于ant desgin of vue 微前端qiankun项目集成 qiankun介绍 qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 什么是微前端 微前端架构具备以下几个核心价值: 技术栈无关 主框架不限制接入应用的技术栈,子应用具备完全自主权 .独立开发、独立部署 子应用仓库独立,前后端可独立开发,部署完成后主...

tangguo_kuku的博客 3738

qiankun - 微前端

原理:将本地应用注册为qiankun子应用,通过qiankunWindow对象,获取qiankun主应用container,将本地应用app挂载到container中。qiankun:是一种微前端框架,基于Single-SPA,它允许开发者以应用级别嵌入多个子应用,这些子应用共享同一个浏览器环境,并可以相互通信。即作为qiankun子vite应用,如何接入qiankun主应用上。qiankun:提供应用间的共享和通信能力,允许子应用共享宿主应用的上下文,但这意味着隔离性没有iframe那么强。

csdn_girl的博客 1051

如何利用qiankun快速搭建一个微前端项目

前言 小伙伴们大家好。前一篇文章跟大家分享了一些关于微前端的知识点,包括什么是微前端,为什么要用微前端以及如何实现一个微前端,在文章的最后我们还提到了能够实现微前端的两个库:single-spa和qiankun。今天我们就一qiankun+vue为例来实现一个简单的微前端。 qiankun是什么 qiankun是基于single-spa封装的一个库,旨在帮助大家能够更简单。更无痛的构建一个生产可用的微前端架构系统。 qiankun的核心设计理念 简单 由于主应用微应用都能做到技术栈无关,qia

lixiaosenlin的专栏 2514

qiankun 微前端 Demo

上代码,不多说。 qiankun 需要一个基座项目,下面这个就是基座vue项目的main.js的配置。 import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.us

yin_you_yu的博客 1013
上一篇: el-upload 同名文件多次选择上传失败了,第一次触发请求,后面不触发请求了
下一篇: uni-app入门
jsPao
博客等级 码龄7年 549粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值