解决 Vite 打包产生的 hash 缓存失效问题
背景:本人项目vite vue3 开发,部署时,本地打包,然后提交git仓库,部署项目。不管更新什么文件,每次打包时,总会有成百上千个文件更新,觉得好麻烦。
所以需要想办法解决。
比较了下,文件基本都是相同的,只是文件名的hash不同,rollup和webpack不同,还没很好的解决方案。
每次打包,大部分的文件内容是相同的,只是文件名的hash不同,这样就去掉hash吧
方案一
build: {
rollupOptions: {
output: {
chunkFileNames: `static/js/[name].js`,
entryFileNames: `static/js/[name].js`,
assetFileNames: `static/[ext]/[name].[ext]`
}
},
使用如上代码,在配合nginx 设置 Cache-Control: must-revalidate, max-age=0 不缓存文件即可。
这时候,打包出来的文件,不会大批量更新,提交代码时,看着心情也舒服了
方案二
测试环境不加hash,发布生产环境 加hash,稍稍有点麻烦,也不是不能用
export default defineConfig((config: ConfigEnv): UserConfig => {
// hash 打包的时候,打包的文件加上hash值(命令行参数)
const isHash = process.argv.includes("hash");
const hashPath = isHash ? '-[hash]' : ''
...
build: {
rollupOptions: {
input: {
main:
VITE_OUTPUT_DIR === 'front'
? resolve(__dirname, 'front.html')
: resolve(__dirname, 'index.html'),
},
output: {
chunkFileNames: `static/js/[name]${hashPath}.js`,
entryFileNames: `static/js/[name]${hashPath}.js`,
assetFileNames: `static/[ext]/[name]${hashPath}.[ext]`
}
},
需要配合命令行参数
"build:be_hash": "vite build -- hash",