前端项目发布后,如何使正在使用的用户更新为最新的版本?

1.背景

  • 每次项目上线后,异常监控总是零零散散报一些资源加载或者解析失败的告警
    在这里插入图片描述
  • 仔细对比chunk的hash值会发现已经是上一版本的js文件
  • 为什么会出现这个问题呢?也不难想到,项目是单页应用,页面使用懒加载分多个chunk打包,首次只加载首页需要的js文件。如果在项目发布前,用户已经在程序中,并且还有未访问的页面,此时我们重新发布上线了,老的文件已经被覆盖,用户再访问未访问过的页面时就会找不到资源,导致白屏。
  • 如果用户在发布前已经进入过其他页面,被缓存在本地,这样虽然不会导致白屏了,但是也无法看到最新的效果。
  • 在测试环境模拟一下,点击一个未访问过的页面时,确实白屏了,报错信息也吻合
    在这里插入图片描述

2.解决思路

  • 导致这些问题的根本原因就是,用户和程序都无法感知项目已上线,无法做到立即刷新,重新加载,那我们就想办法在项目上线后通知页面进行刷新。

2.1运行中的项目,如何感知到项目更新了

  • 最容易想到的就是有一个存储版本号的地方,我们去轮询是否和上一次请求到的版本一致,如果不一致去做一些刷新的操作
  • 既然是前端的项目,最好还是我们自己去维护这个数据,所以我选择在每次打包的时候生成一个存储当前时间戳的json文件,存在dist目录下一起放到我们前端服务器上。
  • 写一个最最简单的webpack插件帮我们实现生成json文件的功能
const pluginName = 'GenerateTimeJsonWebpackPlugin';
const fs = require('fs');
const path = require('path');

class GenerateTimeJsonWebpackPlugin {
   
  apply(compiler) {
   
    compiler.hooks.run.tap(pluginName, (compilation) => 
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木林_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值