位置: IT常识 - 正文

无界(wujie)微前端实现及三种通信方式介绍(微无界是什么软件)

编辑:rootadmin
无界(wujie)微前端实现及三种通信方式介绍 一、对比

推荐整理分享无界(wujie)微前端实现及三种通信方式介绍(微无界是什么软件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:无界啥意思,无界啥意思,微无界2.0,无界强吗,无界简介,无界简介,微无界是什么软件,无界是啥,内容如对您有帮助,希望把文章链接给更多的朋友!

之前介绍过前段时间比较流行的微前端框架qiankun,虽然实现了微前端的理念,但是也暴露出很多缺点,比如官网上讲到的四点:

基于路由匹配,无法同时激活多个子应用,也不支持子应用保活改造成本较大,从 webpack、代码、路由等等都要做一系列的适配css 沙箱无法绝对的隔离,js 沙箱在某些场景下执行性能下降严重无法支持 vite 等 ESM 脚本运行

而wujie利用iframe来实现js沙箱能力,有效的解决了上述问题:

组件方式来使用微前端

不用注册,不用改造路由,直接使用无界组件,化繁为简

一个页面可以同时激活多个子应用

子应用采用 iframe 的路由,不用关心路由占用的问题

天然 js 沙箱,不会污染主应用环境

不用修改主应用window任何属性,只在iframe内部进行修改

应用切换没有清理成本

由于不污染主应用,子应用销毁也无需做任何清理工作

二、实现

这里主应用使用了vue3+vite,子应用使用了vue2+webpack。

​ 

1.主应用下载依赖(package.json)

yarn add wujie-vue3

2.主应用注册依赖(main.js)

import WujieVue from "wujie-vue3";

app.use(WujieVue);

3. 主应用使用wujie组件(main.vue)

<WujieVue name="micro" url="http://localhost:8087" >

4. 子应用修改跨域(webpack.dev.conf.js)

无界(wujie)微前端实现及三种通信方式介绍(微无界是什么软件)

同qiankun。如果没有产生跨域,子应用甚至无需修改。

devServer: {

    headers: {

      "Access-Control-Allow-Origin": "*" // 开启应用间的跨域访问

    },

}

 这样便实现了wujie微前端的静态使用,那如何进行主子应用之间数据通信呢?

三、通信方式

先看一下主应用和子应用的代码。

主应用👇

<script setup>import { ElMessage } from 'element-plus';import { ref } from 'vue'import wujie from 'wujie-vue3'const input = ref('')const emitInput = () => wujie.bus.$emit('input', input.value)const propsMethod = () =>{ ElMessage.success('执行主应用方法成功') console.log(1111111, window.document.querySelector("iframe[name=micro]").contentWindow.globalMicroValue)}wujie.bus.$on('microEmit', (val) => input.value = val)window.globalMainValue = '我是主应用全局变量'</script><template> <div class="container"> <h1>main-vue3</h1> <el-input v-model="input" size="large" v-on:keyup.enter="emitInput"> <template #append> <el-button @click="emitInput" icon="Promotion"> </el-button> </template> </el-input> </div> <div class="container"> <h1>micro-vue2</h1> <WujieVue name="micro" url="http://localhost:8087" :props="{data:'propsdata',method:{propsMethod}}"> </WujieVue> </div></template>

 子应用👇

<template> <div class="container"> <h1>{{data===''?'hi':data}}</h1> <el-button @click="doPropsData">获取父应用通过props传递的值</el-button> <el-button @click="doPropsMethod">执行父应用通过props传递的方法</el-button> <el-button @click="microEmit">向父应用传值</el-button> </div></template><script>export default { data () { return { data: '' }; }, mounted () { window.$wujie.bus.$on('input', (val) => this.data = val) window.globalMicroValue = '我是子应用全局变量' console.log(2222222, window.parent.globalMainValue) }, // beforeDestroy () // { // window.$wujie.bus.$off('input') // }, methods: { doPropsMethod () { window.$wujie.props.method.propsMethod() }, doPropsData () { this.data = window.$wujie.props.data }, microEmit () { window.$wujie.bus.$emit('microEmit', 'micro data') } }};</script>

1.props

通过props的方式,主应用既可以向子应用传递主应用的参数,还可以传递主应用的方法。

主应用在WuJieVue组件中使用,有点类似于vue的props。具体代码如下:

<WujieVue name="micro" url="http://localhost:8087" :props="{data:'propsdata',method:{propsMethod}}"></WujieVue>

子应用则通过如下方式接收:

window.$wujie.props.datawindow.$wujie.props.method.propsMethod()

2.window

主应用和子应用都可以通过挂载在window上定义全局变量的方式相互使用。

主应用定义全局变量:

window.globalMainValue = '我是主应用全局变量'

子应用定义全局变量:

window.globalMicroValue = '我是子应用全局变量'

主应用使用子应用全局变量,其中name为WuJieVue中定义的子应用名称:

window.document.querySelector("iframe[name=micro]").contentWindow.globalMicroValue

子应用使用主应用全局变量:

window.parent.globalMainValue

3.eventBus

bus为wujie提供的一种去中心化的通信方式,即每个应用都是一个主体,主应用与子应用处于平等地位,主应用和子应用、子应用和子应用都可以通过这种方式方便的进行通信。包括监听、发送、取消监听三种。

// 主应用监听事件bus.$on("事件名字", function (arg1, arg2, ...) {});// 主应用发送事件bus.$emit("事件名字", arg1, arg2, ...);// 主应用取消事件监听bus.$off("事件名字", function (arg1, arg2, ...) {});// 子应用监听事件window.$wujie?.bus.$on("事件名字", function (arg1, arg2, ...) {});// 子应用发送事件window.$wujie?.bus.$emit("事件名字", arg1, arg2, ...);// 子应用取消事件监听window.$wujie?.bus.$off("事件名字", function (arg1, arg2, ...) {});

四、子应用独立运行

如果不想让子应用单独运行,可以改造一下子应用的main.js文件,通过全局变量window.__POWERED_BY_WUJIE__判断该子应用是否是由主应用通过wujie启动,如果是,就执行wujie子应用的生命周期函数,完成挂载和销毁,如果不是,就不做任何操作,即可避免子应用可以单独打开的情况。

import Vue from "vue";import App from "./App";import router from "./router";import store from "./store";import ElementUI from "element-ui";import "element-ui/lib/theme-chalk/index.css";Vue.use(ElementUI);// new Vue({// router,// store,// render: (h) => h(App),// }).$mount("#app");if (window.__POWERED_BY_WUJIE__) { let instance; window.__WUJIE_MOUNT = () => { instance = new Vue({ router, store, render: (h) => h(App) }).$mount("#app"); }; window.__WUJIE_UNMOUNT = () => { instance.$destroy(); };} else { // new Vue({ router, store, render: (h) => h(App) }).$mount("#app");}
本文链接地址:https://www.jiuchutong.com/zhishi/287995.html 转载请保留说明!

上一篇:Word下划线怎么打(word下划线怎么延长)

下一篇:answers.exe是什么进程 answers进程信息查询(wrme.exe是什么)

  • 安卓手机如何打开.pak文件(安卓手机如何打开zip文件)

    安卓手机如何打开.pak文件(安卓手机如何打开zip文件)

  • windows10安全中心怎么关闭(windows10安全中心打不开)

    windows10安全中心怎么关闭(windows10安全中心打不开)

  • 微信群怎么设置群主同意才能进群(微信群怎么设置不能互加好友)

    微信群怎么设置群主同意才能进群(微信群怎么设置不能互加好友)

  • 硬盘c7错误计数后果(硬盘c7错误计数修复)

    硬盘c7错误计数后果(硬盘c7错误计数修复)

  • flash的源文件格式是什么(flash的源文件扩展名)

    flash的源文件格式是什么(flash的源文件扩展名)

  • oppo闪充在哪里设置?(oppo手机闪充开关在哪打开)

    oppo闪充在哪里设置?(oppo手机闪充开关在哪打开)

  • applepencil一代和二代的区别(applepencil一代和二代笔尖有差别吗)

    applepencil一代和二代的区别(applepencil一代和二代笔尖有差别吗)

  • qq默契问答是自动邀请吗(qq默契问答是自己问吗)

    qq默契问答是自动邀请吗(qq默契问答是自己问吗)

  • 华为手写输入法方框不见了怎么办(华为手写输入法手写板怎么设置出来)

    华为手写输入法方框不见了怎么办(华为手写输入法手写板怎么设置出来)

  • 微信置顶聊天有什么用(微信置顶聊天有先后顺序吗)

    微信置顶聊天有什么用(微信置顶聊天有先后顺序吗)

  • 带负载能力强什么意思(什么叫带负载能力强)

    带负载能力强什么意思(什么叫带负载能力强)

  • 苹果11关机后闹钟会响吗(苹果11关机后闹钟不响)

    苹果11关机后闹钟会响吗(苹果11关机后闹钟不响)

  • 如何给文档加密码保护(如何给文档加密后发送文件)

    如何给文档加密码保护(如何给文档加密后发送文件)

  • 红米note7pro多少w快充(红米note7pro多少瓦快充)

    红米note7pro多少w快充(红米note7pro多少瓦快充)

  • excel文档主要功能包括(excel的主要功能和特点是什么)

    excel文档主要功能包括(excel的主要功能和特点是什么)

  • ipad耳机是专用的吗(ipad用的耳机是圆头还是扁头)

    ipad耳机是专用的吗(ipad用的耳机是圆头还是扁头)

  • ipad保修需要发票吗(ipad保修需要发票吗现在)

    ipad保修需要发票吗(ipad保修需要发票吗现在)

  • qq消息隐藏怎么设置(qq消息隐藏消息内容)

    qq消息隐藏怎么设置(qq消息隐藏消息内容)

  • word中如何添加目录(word中如何添加页码)

    word中如何添加目录(word中如何添加页码)

  • 手机怎么隐藏来电号码(手机来电怎么隐藏电话号码)

    手机怎么隐藏来电号码(手机来电怎么隐藏电话号码)

  • 小米9pro怎么隐藏刘海(小米9如何隐藏手机应用)

    小米9pro怎么隐藏刘海(小米9如何隐藏手机应用)

  • vivo手机熄屏时间设置(vivo灭屏显示在哪)

    vivo手机熄屏时间设置(vivo灭屏显示在哪)

  • 注销的qq号去哪里恢复(注销的qq号去哪里了)

    注销的qq号去哪里恢复(注销的qq号去哪里了)

  • 苹果6合6plus有什么区别(苹果6plus手机怎么样好吗)

    苹果6合6plus有什么区别(苹果6plus手机怎么样好吗)

  • windows无法安装到这个磁盘(windows无法安装请重新启动安装)

    windows无法安装到这个磁盘(windows无法安装请重新启动安装)

  • 抖音企业号怎样连接电话(抖音企业号怎样变成个人号)

    抖音企业号怎样连接电话(抖音企业号怎样变成个人号)

  • 尾插坏了什么症状(尾插坏了的症状)

    尾插坏了什么症状(尾插坏了的症状)

  • 鸟瞰博登湖上的迈瑙岛,德国 (© Amazing Aerial Agency/Offset by Shutterstock)(博登湖下载)

    鸟瞰博登湖上的迈瑙岛,德国 (© Amazing Aerial Agency/Offset by Shutterstock)(博登湖下载)

  • 销售收入不含税怎么计算增值税额
  • 进项税额转出意思是下月还得缴吗
  • 原材料暂估入库怎么做账
  • 联营企业子公司抵消比例
  • 小规模纳税人哪些发票可以抵税
  • 项目部电缆属于固定资产吗
  • 小规模纳税人企业所得税起征点
  • 公司土地转让另外公司
  • 固定资产发票未到怎么提折旧
  • 支付的票据承兑手续费计入财务费用
  • 开增值税票需要合同吗
  • 营改增后纳税人可以使用的发票种类
  • 增值税留底税怎么计算
  • 汇款退回重新汇到银行卡
  • 公司低价处理旧汽车涉税账务处理
  • 公司职员培训与管理
  • 短期投资是会计准则吗
  • 实收资本和资产的关系
  • 事业单位工程岗位职责
  • win11虚拟键盘怎么调出来
  • 净资产利润比率计算公式
  • Win11怎么打开网络适配器
  • mysql 数据源
  • 买车的收费项目详细清单
  • php设计模式及使用场景
  • 发票已到货未到会计处理
  • PHP:date_default_timezone_set()的用法_Date Time函数
  • php读取二进制文件
  • 无形资产入股后如何处理
  • javascriptjs
  • 委托开发软件的版权归委托人所有
  • 现金流量表本年累计金额怎么算
  • python动态参数应用
  • 什么叫境外所得
  • 财务报表如何看
  • 钢贸企业税收怎么算
  • 企业盈余公积的主要用途是
  • 货币基金分红交多少税
  • 企业的资产必须符合哪些条件
  • 办公用品普通发票税点多少
  • db2数据文件
  • 发票种类包括
  • 企业持有住房税费
  • 专项拨款会计分录
  • 营改增后建筑劳务分包开票一般几个点
  • 出差人员的住宿费计入什么科目
  • 坏账准备与应收账款的影响有哪些
  • 员工餐费标准怎么算
  • 固定资产已经超额融资了还能发放置换贷款吗
  • 考核员工的罚款计入什么
  • 失控发票进项税转出成本调整
  • 出口退税的会计处理
  • 发票红冲重新开具怎么做分录
  • 收到现金支票没有盖章
  • 印花税如何做账报税
  • mysql联合索引生效原则
  • MSSQL转MYSQL,gb2312转utf-8无乱码解决方法
  • win10 性能选项
  • win10如何设置快捷键
  • linux服务器怎么连接wifi
  • Solaris 10.0 cvs的安装方法
  • win10一年更新一次
  • WinXP创建一键静音快捷键(在喇叭消失的情况下实用)
  • linux如何列出所有用户
  • xshell如何使用
  • ubuntu 重启xorg
  • 关于linux中Squid代理服务器的10个实用面试问答
  • win7计划任务设置
  • 深入理解新发展理念,推进供给侧结构性改革心得体会
  • 脚本控制三行三列怎么写
  • js解析机制
  • ADB (Android Debug Bridge)常用命令
  • ubuntu libtorch
  • jquery代码实现鼠标点击
  • js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
  • android强制关机
  • python中tcp
  • 工商变更信息如何在网上打印?
  • 代账公司盈利水平如何
  • 从哪个国家进口牛肉
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设