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

Vite构建如何配置指定chunk生成不带hash的文件名

问题根因

当前配置仅对CSS生效,是因为Rollup对不同类型的构建产物使用独立的命名规则,你只配置了静态资源的命名规则:

  • assetFileNames:仅管控静态类产物,包括CSS、图片、字体、媒体文件等,JS产物完全不走这个规则
  • entryFileNames:管控input字段中手动声明的入口文件对应的JS产物
  • chunkFileNames:管控构建时自动拆分的异步加载chunk、公共依赖chunk等JS产物
修正方案

补充JS产物对应的两个命名规则,针对myapp入口单独配置无hash的命名逻辑即可:

build: {
  target: 'es2020',
  rollupOptions: {
    input: {
      main: fileURLToPath(new URL('./index.html', import.meta.url)),
      myapp: fileURLToPath(new URL('./src/my-app.ts', import.meta.url))
    },
    output: {
      // 静态资源(含CSS)命名规则
      assetFileNames: (assetInfo) => {
        if (assetInfo.name?.toLocaleLowerCase().includes('myapp')) {
          return 'assets/[name][extname]';            
        }
        return 'assets/[name]-[hash][extname]';
      },
      // 手动声明的入口JS命名规则
      entryFileNames: (chunkInfo) => {
        if (chunkInfo.name === 'myapp') {
          return 'assets/[name].js';
        }
        return 'assets/[name]-[hash].js';
      },
      // 自动拆分的JS chunk命名规则
      chunkFileNames: (chunkInfo) => {
        // 若需要myapp关联的异步chunk也不带hash,放开以下注释即可
        // if (chunkInfo.facadeModuleId?.includes('my-app.ts')) {
        //   return 'assets/[name].js';
        // }
        return 'assets/[name]-[hash].js';
      }
    },
  }
}
补充说明
  • 匹配入口JS时,chunkInfo.name和你在input里配置的键名完全对应,这里直接匹配myapp比模糊匹配更准确,不会误伤其他文件
  • 无hash的文件发布时要注意处理客户端缓存,避免用户加载到旧版本资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:22:00