解决 Vite 打包产生的 hash 缓存失效问题

1,432 阅读1分钟

解决 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",