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

  • 如何调整招商银行卡每日限额(如何调整招商银行账单日和还款日)

    如何调整招商银行卡每日限额(如何调整招商银行账单日和还款日)

  • 钉钉连麦怎么关闭摄像头(钉钉连麦怎么关闭)

    钉钉连麦怎么关闭摄像头(钉钉连麦怎么关闭)

  • 小米手机wifi打开自动关闭(小米手机wifi打不开修一下多少钱)

    小米手机wifi打开自动关闭(小米手机wifi打不开修一下多少钱)

  • ipadqq群视频怎么开(ipadqq群视频怎么全屏)

    ipadqq群视频怎么开(ipadqq群视频怎么全屏)

  • 快手和快手极速版账号通用吗(快手和快手极速版是一个平台吗)

    快手和快手极速版账号通用吗(快手和快手极速版是一个平台吗)

  • 苹果动态效果开还是关(苹果动态效果开了没反应)

    苹果动态效果开还是关(苹果动态效果开了没反应)

  • oppor17长度多少厘米(oppor17手机长宽多少)

    oppor17长度多少厘米(oppor17手机长宽多少)

  • 微信收款音响s1和s2有什么区别(微信收款音响S1和F1的区别)

    微信收款音响s1和s2有什么区别(微信收款音响S1和F1的区别)

  • ipadair3怎么连接u盘(ipadair3怎么连接一代手写笔)

    ipadair3怎么连接u盘(ipadair3怎么连接一代手写笔)

  • 新买的苹果手机有贴膜吗(新买的苹果手机怎么充电对电池好)

    新买的苹果手机有贴膜吗(新买的苹果手机怎么充电对电池好)

  • 华为畅享10是屏幕指纹嘛(华为畅享10屏幕材质)

    华为畅享10是屏幕指纹嘛(华为畅享10屏幕材质)

  • ipad能插内存卡吗(ipad能插内存卡卡吗)

    ipad能插内存卡吗(ipad能插内存卡卡吗)

  • vivo水滴屏怎么隐藏(vivo的水滴屏)

    vivo水滴屏怎么隐藏(vivo的水滴屏)

  • 做系统如何4k对齐

    做系统如何4k对齐

  • 华为p30能拍月亮吗(华为p30por拍月亮)

    华为p30能拍月亮吗(华为p30por拍月亮)

  • 快手头条审核需要多久(头条审核太严格)

    快手头条审核需要多久(头条审核太严格)

  • 魅族手机如何使用小爱同学(魅族手机如何使用OTG功能)

    魅族手机如何使用小爱同学(魅族手机如何使用OTG功能)

  • 手机桌面天气怎么恢复(手机桌面天气怎样添加城市)

    手机桌面天气怎么恢复(手机桌面天气怎样添加城市)

  • 我的趣步为啥一直显示0(我的趣步为啥一闪一闪的)

    我的趣步为啥一直显示0(我的趣步为啥一闪一闪的)

  • qq和tim的区别(qq和tim的区别哪个占空间大)

    qq和tim的区别(qq和tim的区别哪个占空间大)

  • 2013061是小米几(2013063是小米几)

    2013061是小米几(2013063是小米几)

  • 蓝牙配对后怎么传软件(蓝牙配对后怎么导入通讯录)

    蓝牙配对后怎么传软件(蓝牙配对后怎么导入通讯录)

  • rcapi.exe - rcapi是什么进程 有什么用

    rcapi.exe - rcapi是什么进程 有什么用

  • 前端打包后生成的dist 或 build目录,如何在本地启动服务运行(前端打包后生成文件)

    前端打包后生成的dist 或 build目录,如何在本地启动服务运行(前端打包后生成文件)

  • 增值税发票阅读器干什么用的
  • 企业缴纳增值税会计科目怎么做
  • 未填开发票怎么作废
  • 税控技术维护费每年都能抵扣吗
  • 公司名称变更发票还能认证吗
  • 空调属于固定资产类别的什么
  • 核定征收企业股权转让的税收
  • 在企业所得税中增值税可以扣除吗
  • 个人处置打包债权取得的收入
  • 营业外支出企业所得税怎么填
  • 不动产抵扣进项税
  • 项目规划设计费用取费标准
  • 直接减免的增值税属于财政性资金吗
  • 房屋租赁合同印花税计税依据
  • 贴现票据种类
  • 差错更正要调去年的吗
  • 个人给公司开票税率
  • 个体户增值税怎么算
  • 从农民手中购买农产品税率
  • 叉车车船税每年都要交吗
  • 农村合作社开的鸡蛋免税票可以抵进项税吗?
  • 可转换公司债券转股会计分录
  • 电商平台收取的手续费
  • windows defender隔离区
  • 企业买断政策
  • 网络公司的财务主要做什么
  • 微信提现手续费最新规定
  • 工地包工工程款一般怎么结
  • PHP:Memcached::isPristine()的用法_Memcached类
  • thinkphp i方法
  • 硬盘跳线设置
  • windows 11 build 21996.1 dev
  • 发票已认证当月未申报怎么办
  • php数据导出到excel
  • 内置天线手机
  • 如何修改家里的wifi密码
  • 图像融合名词解释
  • php文档系统
  • 付临时工工资需要什么材料
  • 所得税在什么情况下免税
  • 织梦网站停止使用了还侵权吗
  • 虚开普票的立案标准
  • 进项的加计抵减怎么算
  • sqlserver数据库和mysql区别
  • 当月进项发票忘认证又开了销项税额怎么办
  • 承包费会计处理
  • 红字冲销怎么做账
  • 职工旅游费用会计处理
  • 多计提的工资怎么调账
  • 增值税免抵退税和免退税的区别有什么?
  • 公司购买防疫物资的申请
  • 扣非净利润占比多少合理
  • 赠送客户样品记什么费用
  • 公交卡充值发票怎么开
  • 小微企业减免附加税税率
  • 生产型企业入库管理办法
  • 教育费附加如何做分录
  • mysql的日志
  • win8系统中断怎么解决
  • windows7用户
  • 为什么windows手机失败了
  • 深入理解linux内核架构
  • Winxp安装光盘修复
  • mac使用命令
  • mac的mail登不上
  • linux系统chmod用法
  • win8.1应用商店无法连接
  • xp电脑繁体系统改简体
  • xp系统自动锁定
  • Win10打开浏览器就未响应
  • win7系统安装不了软件怎么办
  • document.location.hash
  • 谈谈Jquery ajax中success和complete有哪些不同点
  • 介绍一个简单的实验
  • 能用javascript 最终
  • 手机安卓版本升级
  • javascript编程技术
  • js弹出对话框的命令
  • 什么是"五证合一"登记制度?办理"五证合一"程序和方案
  • 税收助力双创
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设