位置: IT常识 - 正文

前端部署发布项目后,如何通知用户刷新页面、清除缓存(前端部署发布项目有哪些)

编辑:rootadmin
前端部署发布项目后,如何通知用户刷新页面、清除缓存

推荐整理分享前端部署发布项目后,如何通知用户刷新页面、清除缓存(前端部署发布项目有哪些),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端项目如何部署到服务器,前端项目部署与发布,前端项目部署与发布,前端部署发布项目是什么,前端 部署,前端部署发布项目怎么做,前端项目部署与发布,前端部署发布项目怎么做,内容如对您有帮助,希望把文章链接给更多的朋友!

以下只是一些思路,有更好的实现方式可以留言一起交流学习

方式一:纯前端 在每次发布前端时,使用webpack构建命令生成一个json文件,json中写个随机生成的一个字符串(比如时间戳),每次打包程序都会自动更新这个json文件。 在项目中,通过定时任务或者在切换页面路由时,请求json文件。使用本地保存的上一次生成的字符串和json文件中的字符串进行比较,如果两个字符串不一样,则说明前端重新部署了,提醒用户进行更新或进行强制刷新的操作。

方式二:前后端配合 在每个请求的header里面加上发版版本号,和保留在客户端的上一次版本号进行比较,如果不一致则强制刷新,刷新后保存当前版本号。(或者单独写一个返回版本号的接口)

下面重点说一下纯前端如何做:

①webpack构建 生成一个json文件,在项目目录下新建plugin文件夹,新建version-webpack-plugin.js如下

/** 自定义的插件: 生成版本号json文件 */const fs = require("fs");class VersionPlugin { apply(compiler) { // emit 是异步 hook,使用 tapAsync 触及它,还可以使用 tapPromise/tap(同步) compiler.hooks.emit.tap("Version Plugin", (compilation) => { const outputPath = compiler.path || compilation.options.output.path; const versionFile = outputPath + "/version.json"; const timestamp = Date.now(); // 时间戳作为版本号 const content = `{"version": "${timestamp}"}`; /** 如果路径存在则返回 true,否则返回 false。 */ if (!fs.existsSync(outputPath)) { // 同步地创建目录。 返回 undefined 或创建的第一个目录路径(如果 recursive 为 true)。 这是 fs.mkdir() 的同步版本。 fs.mkdirSync(outputPath, { recursive: true }); } // 生成json文件 fs.writeFileSync(versionFile, content, { encoding: "utf8", flag: "w", }); }); }}module.exports = { VersionPlugin };

②在vue.config.js中使用者个 plugin

前端部署发布项目后,如何通知用户刷新页面、清除缓存(前端部署发布项目有哪些)

const { VersionPlugin } = require('./plugin/version-webpack-plugin.js');

③在每次执行webpack构建命令,都会在dist目录下生成一个version.json文件,里面有一个字段叫 version,值是构建时的时间戳,每次构建都会生成一个新的时间戳。

④发起ajax请求,请求version.json文件获取version时间戳,和本地保存的上一次的时间戳做比较,如果不一样,则进行对应的操作。

import axios from 'axios'import {MessageBox} from 'element-ui'export function reloadVersion() { axios.get(window.location.origin + '/plm/version.json?v=' + Date.now()).then(rsp => { let localVersion = localStorage.getItem('localVersion') let onlineVersion = rsp.data.version if(onlineVersion){ if(localVersion!==onlineVersion){ // 弹框提示更新 MessageBox.confirm('有版本更新,是否刷新确保获取最新数据?', '版本更新', { confirmButtonText: '更新', cancelButtonText: '取消', type: 'warning' }).then(() => { // 发版版本号和本地版本号不一致,保存最新的版本号到本地,并刷新页面获取最新的页面 localStorage.setItem('localVersion',onlineVersion) window.location.reload(); }) } } })}

⑤请求发起的时机,可以使用定时器或者在切换页面的时候进行校验版本。根据自己的实际情况选择合适的调用时机。 

(二)通过监听网页端的报错,进行相应的处理。

如果是覆盖式的更新,有可能发版前就已经删除了上一个版本的dist文件,会造成缓存的页面依然调用已经被删除的文件,所以会白屏报错。报错就有可能不会执行到上面发起请求获取版本号的操作。所以如果监听到如下的几种报错,可以进行刷新页面的操作,

在index.html根目录文件中加入如下代码。为了防止页面一直刷新,所以加了一个超过次数就不再继续刷新的逻辑

<script> // 错误监听 window.addEventListener('error', (e) => { console.log('globalError'+e) // 类似manifest.js和app.js等静态资源报错 if(e.target.outerHTML.indexOf('js/manifest.') != -1 || e.target.outerHTML.indexOf('js/app.') != -1|| e.target.outerHTML.indexOf('js/chunk-') != -1){ var errorTime = sessionStorage.getItem('mainAppErrorTime') if(errorTime&&errorTime>0){ errorTime++ } else{ errorTime = 1 } var timer = setTimeout(function() { // 错误次数存在缓存,刷新超过3次不会继续刷新。退出页面重进后,次数重置 sessionStorage.setItem('mainAppErrorTime', errorTime) window.location.reload() }, 1000); if(errorTime&&errorTime>=3){ clearTimeout(timer) // 清空定时器 } } }, true); </script>
本文链接地址:https://www.jiuchutong.com/zhishi/297304.html 转载请保留说明!

上一篇:如何使用ssh密钥的方式实现无密码scp传输文件(ssh怎么带密码)

下一篇:vue-nginx刷新404问题

  • 所谓的品牌到底是什么?(所谓的品牌到底指什么)

    所谓的品牌到底是什么?(所谓的品牌到底指什么)

  • 小红书怎么绑手机账号(小红书上怎样绑定手机)

    小红书怎么绑手机账号(小红书上怎样绑定手机)

  • 苹果13mini怎么返回(iphone13如何设置返回键)

    苹果13mini怎么返回(iphone13如何设置返回键)

  • 儿童新冠疫苗接种记录在哪里查询(儿童新冠疫苗接种2022年新规)

    儿童新冠疫苗接种记录在哪里查询(儿童新冠疫苗接种2022年新规)

  • 闲鱼怎么微信支付(闲鱼上怎么微信支付)

    闲鱼怎么微信支付(闲鱼上怎么微信支付)

  • 手机为什么连不上wifi(手机为什么连不上热点)

    手机为什么连不上wifi(手机为什么连不上热点)

  • 如何学习摄影(手机摄影怎么学)

    如何学习摄影(手机摄影怎么学)

  • 光能充电电子秤没电了(光能充电电子秤是什么意思)

    光能充电电子秤没电了(光能充电电子秤是什么意思)

  • sandisksecureaccess是什么软件

    sandisksecureaccess是什么软件

  • 钉钉可以隐藏好友吗(钉钉隐藏好玩小游戏链接)

    钉钉可以隐藏好友吗(钉钉隐藏好玩小游戏链接)

  • 芒果tv签到21天为什么没有会员(芒果tv签到21天领不了会员)

    芒果tv签到21天为什么没有会员(芒果tv签到21天领不了会员)

  • 一加7pro支持pd快充吗(一加7 pro支持多少快充)

    一加7pro支持pd快充吗(一加7 pro支持多少快充)

  • 打印机副本是什么意思(打印机副本处于错误状态是什么原因)

    打印机副本是什么意思(打印机副本处于错误状态是什么原因)

  • ipad充电要多久(苹果14第一次充电要充多久)

    ipad充电要多久(苹果14第一次充电要充多久)

  • 3840x2160分辨率清楚吗(3840x1440分辨率)

    3840x2160分辨率清楚吗(3840x1440分辨率)

  • 苹果6声音小怎么修复(苹果6声音小怎么调大声)

    苹果6声音小怎么修复(苹果6声音小怎么调大声)

  • 如何把pdf转换为cad(如何把pdf转换为jpg)

    如何把pdf转换为cad(如何把pdf转换为jpg)

  • 苹果手机5怎么录屏教程(苹果手机5怎么下载软件)

    苹果手机5怎么录屏教程(苹果手机5怎么下载软件)

  • 手机微博定时发送怎么设置(手机微博定时发送)

    手机微博定时发送怎么设置(手机微博定时发送)

  • qq标签为什么会变(为什么qq标签会莫名其妙的变)

    qq标签为什么会变(为什么qq标签会莫名其妙的变)

  • 火山号昵称重复怎么改(火山昵称后面的数字是什么意思)

    火山号昵称重复怎么改(火山昵称后面的数字是什么意思)

  • reno电池容量(oppo reno电池容量多少)

    reno电池容量(oppo reno电池容量多少)

  • qq群三好学生头衔别人看得到吗(qq头衔三好学生)

    qq群三好学生头衔别人看得到吗(qq头衔三好学生)

  • 天猫精灵怎么打电话(天猫精灵怎么打电话给手机通讯录的人)

    天猫精灵怎么打电话(天猫精灵怎么打电话给手机通讯录的人)

  • 卡鲁拉国家公园里的小湖,爱沙尼亚 (© Sven Zacek/Minden Pictures)(卡拉公路)

    卡鲁拉国家公园里的小湖,爱沙尼亚 (© Sven Zacek/Minden Pictures)(卡拉公路)

  • 实收资本印花税按次还是按年
  • 一般纳税人公账转法人私账
  • 进出口环节税
  • 合同取得成本属于
  • 个体工商户增值税怎么计算
  • 小规模纳税人税率有几种
  • 进口设备消费税税率是多少
  • 项目转包是什么意思
  • 资产负债表应交税费期末余额是什么意思
  • 建筑业异地施工如何纳税
  • 所得税汇算清缴分录怎么做
  • 小规模纳税人小微企业免税销售额
  • 非正常户发票管理
  • 货物保管不善交来的罚款账务处理?
  • 购电子承兑汇票差额计入什么科目?
  • 设备维修费怎么入账
  • 利润表中所得税费用为负数是什么意思
  • 税务未抄报
  • 小规模纳税人可以自己开专票吗
  • 减免税费期末如何结转
  • 公允价值变动损益是什么意思
  • 醋开票属于什么类
  • 未认证进项税额转出
  • 采购材料差旅费怎么入账
  • 税务大厅申报社保需要资料
  • xp系统怎么取消用户登录
  • 评估报告怎么算合法
  • 关于幼儿园会没课程的会刊
  • 隐藏分区怎么打开
  • 以前年度损益调整借贷方向
  • os x yosemite dp5下载地址 os x 10.10 dp5更新内容
  • 合同预付款怎么做账
  • 字体文件夹在哪
  • vue3.0项目
  • 董事费属于什么费用
  • 没进项可以开专票吗
  • 双分录怎么做
  • 基于深度学习的图像超分辨率——综述
  • 消费积分如何做账
  • 现金溢余和短缺的会计分录
  • 电力系统培训计划
  • 异地提供建筑服务预缴
  • 服务业加计扣除比例
  • 支付招聘网站费用怎么入账
  • 预提的管理费用,汇算清缴怎么做
  • 直接人工不包括哪些
  • 织梦标签教程
  • 什么情况下核定应纳税额
  • 银行承兑汇票进行贴现理财
  • sqlyog配置
  • 以前年度多缴纳房产税,可以递延次年度使用么
  • 公司自主研发新能源汽车
  • 按公允价值入账的有哪些
  • 私立医院怎么做不被骗的事情
  • 核定征收方式的小型微利企业可以享受
  • 销售商品结转成本的记账凭证
  • 商业企业库存商品
  • centos如何挂载fc存储
  • 加载dll错误是什么意思
  • 如何在mac上保存文件
  • Win7 64位系统没有超级终端软件的解决方法
  • 太极越狱助手
  • csinsmnt.exe进程的作用介绍 csinsmnt是什么进程
  • PQV2ISECURITY.EXE - PQV2ISECURITY是什么进程 有什么用
  • w10系统如何安装
  • win7自动关闭显示器
  • Lesson01_05 HTML中的超链接
  • jquery和css的区别
  • unity3d inspector
  • 自定义标签的开发的3个步骤?
  • 用js实现导航栏的下拉列表
  • windows and android
  • 如何用python编写脚本
  • offset function
  • js prototype constructor
  • androidday3
  • jquery封装原理
  • 海南省地方税务局公告2017年第2号
  • 广东省地税局网上办税
  • 90平房子税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设