Vue项目中Disk Cache如何控制?文件更新后依然加载旧版本
大家好,我在Vue项目中配置了nginx的expires头想优化Disk Cache,但文件更新后浏览器依然加载旧版本,这是为什么呢?
我按照教程在nginx.conf里设置了:
location ~* .(css|js|jpg)$ {
expires 30d;
add_header Cache-Control "public";
}
但修改了main.js后,开发者工具显示200 (from disk cache)。尝试过清除浏览器缓存、关闭服务器重启,但问题依旧。有没有更好的控制Disk Cache策略的方法?
另外发现服务端响应头里的ETag和Last-Modified都没变化,是不是应该配合使用其他Cache-Control指令?
contenthash或chunkhash自动生成带哈希的文件名,这样文件一改,URL 就变了,浏览器自然会重新拉新文件。比如在
vue.config.js里加:nginx 里直接配:
location ~* .(js|css)$ {
expires 1y;
add_header Cache-Control "public, max-age=31536000, immutable";
}
这样改完打包后文件名带 hash,浏览器就不会傻乎乎地用旧缓存了,比折腾 ETag 和 Last-Modified 省事多了。
main.[hash].js,这样每次文件更新都会生成新名字,浏览器就会重新加载。在vue.config.js里加这段:
另外,你的Nginx配置可以改成这样,强制使用immutable策略:
我之前也遇到过这个问题,加上hash和immutable就解决了,推荐试试。