每次项目发布新版的时候,前端打包后的文件放在服务器上,浏览器读取的代码没有及时更新,导致有时会有缓存的问题。
前端解决办法:
在html页面加meta标签1
2<meta http-equiv="pragram" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
找到项目中名为webpack.prod.conf.js的文件,用js来获取当时的时间,根据时间戳来划分版本号。然后在js和css文件名上加上版本号,每次上传到服务器的名字不一样,服务器就会识别出来,加载最新上传的这一版本了。(分别更改相应的代码片段,加上时间戳即可)1
2
3
4
5
6
7
8
9
10
11
12const Version = new Date().getTime();
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name][chunkhash].' + Version + '.js'),
chunkFilename: utils.assetsPath('js/[id][chunkhash].' + Version + '.js')
},
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].' + Version + '.css')
}),
然后执行npm run build,再去打包后的dist文件夹下去看打包后的js和css文件名已经加上了时间戳的后缀了
但是index.html在服务器端有时还是会有缓存的,需要在服务器端配置下nginx,让index.html文件也不缓存
1 | location = /index.html { |
no-cache, no-store可以只设置其中一个
no-cache浏览器会缓存,但刷新页面或者重新打开时,会请求服务器,服务器可以响应304,如果文件有改动就会响应200
no-store浏览器不缓存,刷新页面需要重新下载页面