问题
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;
}