位置: 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问题

  • OPPO Ace2搭载的是什么处理器(oppo ace 2好吗)

    OPPO Ace2搭载的是什么处理器(oppo ace 2好吗)

  • p30pro需要贴膜吗(华为p30pro手机需不需要贴膜)

    p30pro需要贴膜吗(华为p30pro手机需不需要贴膜)

  • iphone x面容设置一直将让移低一点(iphonex面容设置时提示无法识别)

    iphone x面容设置一直将让移低一点(iphonex面容设置时提示无法识别)

  • 微信没有违规为什么被限制登录(微信没有违规为什么微信里的钱被冻结)

    微信没有违规为什么被限制登录(微信没有违规为什么微信里的钱被冻结)

  • 电话响铃几声自动挂断(电话响几声后自动接听)

    电话响铃几声自动挂断(电话响几声后自动接听)

  • 怎样删除快手私信聊天记录(怎样删除快手私密作品)

    怎样删除快手私信聊天记录(怎样删除快手私密作品)

  • 华为手表压力检测是干什么(华为手表压力检测准吗)

    华为手表压力检测是干什么(华为手表压力检测准吗)

  • lp67防水什么意思(防水是什么意思)

    lp67防水什么意思(防水是什么意思)

  • qq情侣关系能有几个(qq情侣关系能有多少个)

    qq情侣关系能有几个(qq情侣关系能有多少个)

  • qq群怎么还有红色头衔(qq群有红包也不提示了)

    qq群怎么还有红色头衔(qq群有红包也不提示了)

  • 闲鱼发货要自己包装吗(闲鱼发货要自己包装贴单号吗)

    闲鱼发货要自己包装吗(闲鱼发货要自己包装贴单号吗)

  • 腾讯会议录屏的视频在哪里可以找到(腾讯会议录屏的时候能切换界面吗)

    腾讯会议录屏的视频在哪里可以找到(腾讯会议录屏的时候能切换界面吗)

  • 蓝牙和优联区别(蓝牙鼠标和优联鼠标)

    蓝牙和优联区别(蓝牙鼠标和优联鼠标)

  • 华为nova5z能用40w快充吗(华为nova5z能用typec耳机吗)

    华为nova5z能用40w快充吗(华为nova5z能用typec耳机吗)

  • 无线路由器需要宽带吗(无线路由器需要升级吗)

    无线路由器需要宽带吗(无线路由器需要升级吗)

  • 京东如何删除商品评价(京东商家如何删除订单)

    京东如何删除商品评价(京东商家如何删除订单)

  • 小米4lte是什么版本(小米4lte多少钱)

    小米4lte是什么版本(小米4lte多少钱)

  • 淘宝问大家为啥不显示(为什么淘宝上问大家总也看不到)

    淘宝问大家为啥不显示(为什么淘宝上问大家总也看不到)

  • 微信发朋友圈必须发视频吗(微信一键转发朋友圈)

    微信发朋友圈必须发视频吗(微信一键转发朋友圈)

  • 怎么给ps加字体(怎么给ps添加字体)

    怎么给ps加字体(怎么给ps添加字体)

  • p30怎么把上滑震动取消(华为p30上滑设置)

    p30怎么把上滑震动取消(华为p30上滑设置)

  • 苹果充值记录怎么查询(苹果充值记录怎么删除购买记录)

    苹果充值记录怎么查询(苹果充值记录怎么删除购买记录)

  • 手机纳米镀膜能揭掉吗(手机纳米镀膜能管多久)

    手机纳米镀膜能揭掉吗(手机纳米镀膜能管多久)

  • oppoa7上市时间(oppoa7上市时间及价格)

    oppoa7上市时间(oppoa7上市时间及价格)

  • 杜布罗夫尼克老城,克罗地亚 (© Jeremy Woodhouse/Getty Images)(杜布罗夫尼克老城去机场)

    杜布罗夫尼克老城,克罗地亚 (© Jeremy Woodhouse/Getty Images)(杜布罗夫尼克老城去机场)

  • java中transient是什么(java transactional)

    java中transient是什么(java transactional)

  • 房地产增值税税率是多少
  • 税务师考试科目搭配
  • 税务证需要多少费用
  • 公司期权激励如何兑现
  • 营业外收入做销项税调整
  • 非限定性净资产借贷方向
  • 小规模发票冲红怎么申报
  • 小微企业条件2018
  • 销售收入的暂估入账是否结转利润
  • 报关单位的信用管理制度
  • 资产负债表其他流动资产包括什么
  • 应收账款转入呆账如何做帐
  • 个体工商户转让流程
  • 累计折旧的计提分录怎么写
  • 居民企业分红免征企业所得税分录
  • 职工福利费用于职工食堂食材补助办法
  • 银行票据都有哪些
  • 本月开了红字发票可以退税吗
  • 公司银行贷款能贷多少
  • 交易性金融资产属于什么科目
  • 增值税专票开错了可以作废吗
  • autoreg.exe
  • yii实现使用CUploadedFile上传文件的方法
  • 企业重组税收政策汇编
  • 职工工资扣税比例
  • 施工企业会计核算特点有哪些
  • php如何创建文件
  • php时间转换成时间戳
  • 如何成功安装暗区突围
  • 【第三趴】uni-app页面搭建与路由配置(了解工程目录结构、学会搭建页面、配置路由并成功运行)
  • 土地出让金返还比例是多少
  • vue3的unplugin-auto-import自动引入
  • vue关闭路由
  • 利用Linux Find命令查找文件方法记录 快速查找文件位置
  • php gdb
  • 企业对外投资资产的成本可以税前扣除吗
  • ps调整边缘在哪里快捷键
  • 事业结余对应政府会计哪个科目
  • 信息技术服务所得税税负率多少
  • 给销售人员的返点怎么做账
  • 公司的实收资本是什么意思
  • 非房地产企业转让建筑物,计提土地增值税时应借记
  • 应收账款属于供应商还是客户
  • 购买的固定资产退回账务处理
  • sqlserver2012备份
  • sqlserver去掉字符串内的指定字符
  • 可供出售交易性金融资产申报表怎么填
  • 上个月计提多了,这个月怎么办?
  • 固定资产清理的含义
  • 企业汇总纳税的原则
  • 城建税退税分录怎么做
  • 农村土地征用补偿价格
  • 业务招待费税前扣除标准2020
  • 事业单位整体转让
  • 贴现利息高好还是低好
  • 产品生产完工入库
  • 咨询费开发票应该选哪一项?
  • 年末出现打一数字
  • 单价合同如何计算印花税
  • 电脑出windows
  • linux ubuntu教程
  • MAC OS X 10.8通知中心无法访问、停止更新怎么重启
  • win10周年更新版是什么意思
  • linux管理器
  • window10关闭
  • win8没有开始菜单 点键盘开始菜单黑屏
  • cocos2dx如何通过Image获取指定点颜色值
  • python kmeans sklearn
  • Python实现Mysql数据库连接池实例详解
  • js 字符编码
  • 使用权资产
  • Unity的WWW类的用法整理
  • node通过express搭建自己的服务器
  • python制作简单图形
  • js中的常用方法
  • jquery树形菜单
  • jquery去重复数组
  • android原生框架
  • jquery 获取屏幕高度
  • 什么是从价计征,从量计征
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设