页面修改不生效,刷新一下就好了

4,288 阅读1分钟

问题

vue项目打包发测后,访问项目链接,功能未生效,刷新后才生效。

排查过程

1. 查看两次访问,获取到的文件是否相同。

查看network,两次访问请求如下,可见两次获取到的app.js不是同一个文件。开始认为是浏览器缓存问题,查看如下资料知悉跟浏览器缓存无关。

2. 查看app.js文件是否加了hash。

在build/webpack.prod.conf.js中看到js文件加了chunkhash,css文件加了contenthash,js、css缓存没问题。(webpack三种hash区别

3. 最后,排查index.html文件是否缓存。

看到html文件中app.js文件还是引入的旧的hash文件。

解决方案

最终发现是由于服务器缓存导致,因为index.html被缓存了,导致浏览器不去加载最新的js,解决方法是在服务器配置不让缓存index.html(浏览器缓存),nginx 配置如下:

location / {
    # disable cache html
    add_header Cache-Control "no-store";
    
    root   /mnt/xx/demo-project;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
}