当前位置: 首页 > article >正文

通过socket设置版本更新提示

1.项目使用的是git所以使用git仓库的短哈希作为版本更新标识,将该字符写入public文件,此处需要注意后端访问静态资源的路径。

在vue.config.js文件中写入

function excuteVersion() {
    const fs = require('fs')
    const { execSync } = require('child_process')
// 获取当前Git仓库的短提交哈希,将其存储在cmtId变量中
    const cmtId = execSync('git rev-parse --short HEAD').toString().trim()
// 将cmtId写⼊到public⽬录下的v.txt⽂件中
    const versionFile = path.join(process.cwd(), 'public/static/market', 'version.txt')
    fs.writeFileSync(versionFile, cmtId)
}

excuteVersion()

写入后 监听后端socket的版本更新消息通知
创建一个ts文件监听消息

export function wsListenVersion() {
    const wsStore = useWsStore();

    wsStore.on(WS_EVENT.VERSION_UPDATE,(data)=>{
        wsLogger(WS_STATUS.RECEIVED, WS_EVENT.VERSION_UPDATE, data);
        if (data.code === HTTP_CODE.SUCCESS) {
            showUpdateModal(data.data.new)
        }
    })
}

设置通知的样式

export function showUpdateModal(newCommitId: string) {
    const key = `open${newCommitId}`;
    notification.open({
        message: "页面已经发生了更新",
        description:
            "检测到当前页面内容已经发生了更新,请刷新页面后使用!",
        btn: () =>
            h(
                Button,
                {
                    type: "primary",
                    size: "small",
                    onClick: () => {
                        window.location.reload();
                        notification.close(key);
                    }
                },
                {default: () => "刷新"}
            ),
        key,
        placement: "bottomRight"
    });
}

在首页加载创建socket连接成功后监听该通知

onMounted(()=>{
// 登录后初始化socket连接
	initWs()
})

function initWs(): Promise<void> {
  return new Promise<void>(resolve => {
    wsStore
        .connect()
        .then(() => {
		  wsListenVersion();
          resolve();
        })
        .catch(reason => console.log("[ERROR][WS]", reason));
  });
}

以上通过学习参考该文章

https://blog.csdn.net/Ljq1041054607/article/details/140955141


http://www.kler.cn/a/407927.html

相关文章:

  • mybatis-plus方法无效且字段映射失败错误排查
  • Web3与智能合约:区块链技术下的数字信任体系
  • Spring Security @PreAuthorize注解
  • VIT中的cls token是怎么起作用的
  • 51c大模型~合集76
  • vue 目录结构
  • 鸿蒙HarmonyOS学习笔记(1)
  • 工程师 - 智能家居方案介绍
  • 符号有向图(Signed Directed Graph, SDG)的前世今生
  • 基于YOLOv8深度学习的扰乱公共秩序打架异常行为检测系统研究与实现(PyQt5界面+数据集+训练代码)
  • Android开发实战班 -应用架构 之依赖注入(Hilt)
  • PHP8解析php技术10个新特性
  • 蓝桥杯嵌入式再学习(2)基础框架的构建
  • 首次公开用系统审查与评估大语言模型安全性的数据集
  • Go语言链接Redis数据库
  • 小鹏汽车大数据面试题及参考答案
  • C# 中的异步流:高效处理序列数据
  • kvm-dmesg:从宿主机窥探虚拟机内核dmesg日志
  • TCP vs UDP:如何选择适合的网络传输协议?
  • python sqlalchemy 操作数据库
  • uniapp发布android上架应用商店权限
  • 淘宝商品评论爬虫:Java版“窃听风云”
  • 【Unity How】Unity中如何实现物体的匀速往返移动
  • 开源动态表单form-create-designer 扩展个性化配置的最佳实践教程
  • 【Linux】内核驱动模块
  • 拥塞控制算法的 Utility-Function