在 Vite 中自定义构建输出需配置 build.rollupOptions.output,通过 entryFileNames、chunkFileNames、assetFileNames 控制 JS 和资源文件命名与目录,outDir 指定根目录,emptyOutDir 控制清空策略。

在 Vite 中自定义构建输出的文件命名规则与目录,主要通过 vite.config.ts(或 .js)中的 build.rollupOptions.output 配置项实现,尤其是 entryFileNames、chunkFileNames、assetFileNames 和 dir 这几个关键字段。
控制 JS 文件名:entryFileNames 与 chunkFileNames
JS 输出文件分为三类:入口文件(如 main.js)、异步拆分的 chunk(如路由懒加载生成的 index-xxx.js)、以及公共 chunk(如 vendor-xxx.js)。它们分别由以下选项控制:
-
entryFileNames:匹配入口模块(input中定义的),默认为"assets/[name]-[hash].js"。可改为"js/[name].[hash:8].js",让所有入口 JS 放入js/子目录,并缩短 hash 长度。 -
chunkFileNames:匹配非入口的代码分割块,默认同上。若想把 vendor 单独归类,可用函数动态判断:chunkFileNames: (chunkInfo) => chunkInfo.name === 'vendor' ? 'js/vendor.[hash:8].js' : 'js/chunk-[hash:8].js'
控制资源文件名:assetFileNames
CSS、字体、图片等静态资源由 assetFileNames 决定。它支持字符串模板和函数两种写法:
- 字符串示例:
"assets/[name].[hash:8][extname]"→ 输出assets/logo.a1b2c3d4.png - 函数示例(按类型分目录):
assetFileNames: ({ name, type }) => {<br> if (type === 'asset' && name.endsWith('.css')) return 'css/[name].[hash:8][extname]';<br> if (type === 'asset' && /\.(png|jpe?g|gif|svg)$/.test(name)) return 'img/[name].[hash:8][extname]';<br> return 'assets/[name].[hash:8][extname]';<br>}
指定输出根目录与清空策略
整个构建产物的根目录由 build.outDir 控制(默认 "dist"),它必须是相对于项目根路径的相对路径或绝对路径:
立即学习“Java免费学习笔记(深入)”;
-
build: { outDir: 'public/build' }→ 输出到public/build/ - 如需保留已有文件(默认每次构建会清空
outDir),可设emptyOutDir: false,但注意旧文件可能残留,一般不建议关闭
注意事项与常见问题
- 所有 hash 占位符(如
[hash]、[name]、[extname])仅在build.rollupOptions.output的子选项中生效,不能用在outDir中 - Vite 5+ 默认启用
build.sourcemap: false,若开启 sourcemap,其文件名也受assetFileNames影响(可通过sourceMapFileName单独配置) - 使用函数方式时,确保返回值是合法路径字符串,且不含
../等越界路径,否则 Rollup 会报错


















