You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte应用Rollup每次构建未修改文件哈希都变化如何配置实现长期缓存

Rollup + Svelte 静态资源哈希稳定化配置方案

核心问题原因

默认Rollup配置下哈希计算未绑定单文件内容,加上Svelte编译、压缩插件的不稳定输出,会导致无修改构建时所有文件哈希刷新,无法实现长效缓存。

具体配置调整

1. 替换哈希占位符为内容哈希

不要使用全局构建哈希[hash],改用仅与单文件内容绑定的[contenthash]作为文件名哈希位:

// rollup.config.js 输出配置
export default {
  // 其他全局配置保持不变
  output: {
    entryFileNames: 'static/[name].[contenthash].js',
    chunkFileNames: 'static/[name].[contenthash].js',
    assetFileNames: 'static/[name].[contenthash][extname]',
    // 若使用sourcemap,保持与文件哈希规则一致
    sourcemap: true,
  }
}

2. 固定Svelte编译输出

关闭Svelte开发模式的动态调试标记注入,单独提取CSS避免样式变动影响JS哈希:

import svelte from 'rollup-plugin-svelte';

export default {
  plugins: [
    svelte({
      compilerOptions: {
        // 生产环境强制关闭dev模式
        dev: process.env.NODE_ENV !== 'production',
        // 固定编译目标,不要动态切换
        generate: 'dom',
      },
      // 提取CSS到独立文件,避免样式内容内嵌到JS中
      emitCss: true,
    }),
    // 其他插件保持原有顺序
  ]
}

3. 配置压缩插件输出确定性

开启压缩插件的确定性输出开关,禁止注入动态内容(如构建时间、随机标记等):

import { terser } from 'rollup-plugin-terser';

export default {
  plugins: [
    // 其他插件放在terser之前
    terser({
      // 开启确定性压缩,相同输入永远得到相同输出
      deterministic: true,
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
      format: {
        // 移除所有注释,避免动态注释导致哈希变动
        comments: false,
      }
    })
  ]
}

4. 固定代码分割规则(按需配置)

如果开启了代码分割,手动固定chunk分组规则,避免Rollup自动分片时因模块加载顺序变动导致chunk内容变更:

export default {
  output: {
    // 其他output配置
    manualChunks: (moduleId) => {
      // 第三方依赖单独打包为vendor chunk
      if (moduleId.includes('node_modules')) {
        return 'vendor';
      }
      // 公共组件单独打包为common chunk
      if (moduleId.includes('src/components/')) {
        return 'common';
      }
    }
  }
}

验证方法

连续执行两次生产构建命令rollup -c --environment NODE_ENV:production,对比两次构建的产物文件名,未修改文件的哈希值应完全一致。

内容的提问来源于stack exchange,提问作者prokawsar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:09:04