标题前言:
h5项目和pc端项目上线时,有时只有细微的改变,但是部署完后,再次访问却是没变化
或者存在请求超时
问题。必须手动清除缓存才行。
原因:
浏览器缓存会导致加载旧的资源文件。
解决方案1
在访问链接中添加版本标识,使得每次访问的链接不一样,链接不一样可表现为 参数不一样
就可以
解决方案2
在1的基础上,对打包的css文件和js 文件,添加时间戳作为版本号,是的每次打包的文件名都不一样。
脚手架 配置使用 vue.config.js
vue.config.js(相当于之前的webpack.config.js) 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。
/src/vue.config.js
const path = require('path')
let filePath = ''
let Timestamp = ''
//编译环境判断,判断是否H5环境
if (process.env.UNI_PLATFORM === 'h5') {
filePath = 'static/js/'; //打包文件存放文件夹路径
Timestamp = '.' + new Date().getTime();//时间戳
// 给模板文件的css环境变量添加上时间戳
process.env.VUE_APP_INDEX_CSS_HASH = process.env.VUE_APP_INDEX_CSS_HASH+`${Timestamp}`
}
const productionConfig = (config) => {
/**此处代码省略**/
}
module.exports = {
chainWebpack: (config) => {
const isProduction = process.env.NODE_ENV === 'production'
if (isProduction) {
// 发行或运行时启用了压缩时会生效
config.optimization.minimizer('terser').tap((args) => {
const compress = args[0].terserOptions.compress
// 非 App 平台移除 console 代码(包含所有 console 方法,如 log,debug,info...)
// compress.drop_console = true
compress.pure_funcs = [
'__f__', // App 平台 vue 移除日志代码
// 'console.debug' // 可移除指定的 console 方法
]
return args
})
}
},
configureWebpack: (config) => {
/**此处代码省略**/
// 给js文件都添加上时间戳
config.output.filename=`${filePath}[name].[contenthash:8]${Timestamp}.js`,
config.output.chunkFilename=`${filePath}[name].[contenthash:8]${Timestamp}.js`
},
}
以上代码 对css文件和js 文件的文件名添加上了时间戳后缀,
- 对于js 文件可直接用config.output.filename和config.output.chunkFilename这个两个参数设置,
- 对于css 文件,要使打包文件和模板文件的引入都同时加入时间戳,这里采用对环境变量
VUE_APP_INDEX_CSS_HASH
进行修改,此方法是基于css文件是复制出来的,也可探索其它方案来打包设置css文件的添加时间戳和模板文件正确的引入
模板文件可自定义设置,在uniapp的src中manifest.json,可配置自定义模板,参考官方文档。