Vitejs & Rollup打包时自动为JS文件名追加2的问题
问题原因与解决方案
问题根源
你遇到的app.min2.js命名问题,本质是Rollup的文件命名冲突处理机制在起作用:
- 你设置了
emptyOutDir: false,意味着打包时不会清空输出目录./app - 上一次打包生成的
app.min.js还留在目录里,Rollup为了避免覆盖现有文件,自动给新生成的文件加了序号2 - 当你用
[hash]时,每次打包生成的文件名带唯一哈希,不会和旧文件重名,所以不会触发序号后缀
解决办法
方法1:允许清空输出目录(最简单)
如果./app目录里的文件都是打包生成的,没有需要手动保留的内容,直接把build.emptyOutDir改成true:
build: { manifest: false, emptyOutDir: true, // 改为true // ...其他原有配置 }
这样每次打包前会自动清空outDir,旧的app.min.js被删除,新文件就会正常命名为app.min.js。
方法2:打包前手动清理旧文件
如果不能清空整个./app目录(比如有手动添加的静态文件),可以在打包前单独删除旧的JS输出文件:
- 安装
rimraf工具:npm install rimraf --save-dev - 修改
package.json的build脚本:
"scripts": { "build": "rimraf ./app/js/app.min.js && vite build" }
这样每次打包前会先删掉旧的app.min.js,避免重名冲突。
方法3:调整输出文件名规则(可选)
如果不想清空目录也不想手动删文件,可给文件名加固定标识避免冲突,但这种方法会积累旧文件,仅作备选:
rollupOptions: { output: { entryFileNames: 'js/[name].min.build.js', // ...其他原有配置 } }
内容的提问来源于stack exchange,提问作者I am Dan Gavin
相关产品推荐
相关产品推荐

