一、前言
最近项目踩了个坑,项目不是我搭建,但是我是负责版本升级,webpack打 output的代码部分没有重构,因此发布到线上的时候,发现html资源更新了但是js、css资源没有更新,之前同事是让运维强制刷新,这种方法不可取。
二、问题分析
是因为我们线上服务是走cdn的,客户端访问页面的时候,拿到的资源是cdn缓存资源,所以一直没有更新,cdn没有缓存是因为我们打包输出的文件名一直都没有改动,例如这样:
index.js
index.css
需要替换为:(xxx为hash变量,保证与上个版本生成的hash不一致即可)
index.xxx.js
index.xxx.css
html更新了(比如我们可感知的html title更新)是因为单页面应用,html不走cdn加速,可以直接访问到最新资源。
三、解决方案
1、打包文件名加hash。(推荐)
2、静态资源文件名绑定版本号相关。(变量)
3、cdn节点强制刷新。(不建议,较为麻烦)