Vite 中 Rollup 配置通过 build.rollupOptions 在 vite.config.ts/js 中统一管理,而非独立 rollup.config.js;其核心用于定制输入、输出(如 entryFileNames、chunkFileNames、assetFileNames)、外部依赖及插件,仅在 vite build 时生效。

在 Vite 中,Rollup 的配置不是直接通过 rollup.config.js 文件管理的,而是集成在 vite.config.ts(或 .js)中,通过 build.rollupOptions 对象进行定制。Vite 默认使用 Rollup 作为底层打包器,因此你可以完全控制 Rollup 的输入、输出、插件、外部依赖等行为。
配置 build.rollupOptions 控制打包行为
这是最常用的方式,用于覆盖或扩展 Rollup 的构建选项。它等价于原生 Rollup 的 output 和 input 配置,但需嵌套在 Vite 的 build 选项下:
-
修改输出路径与文件名:用
output.dir和output.entryFileNames等指定生成位置和命名规则 -
自定义 chunk 分割:通过
output.chunkFileNames和output.assetFileNames区分 JS、CSS、字体等资源 -
设置外部依赖(external):防止某些包被打包进产物,比如把
vue或lodash排除,由 CDN 或宿主环境提供 -
添加 Rollup 插件:在
plugins数组中传入 Rollup 插件(注意:部分插件需兼容 Vite 的构建阶段)
示例(vite.config.ts):
import { defineConfig } from 'vite'
export default defineConfig({
build: {
rollupOptions: {
external: ['vue', 'axios'],
output: {
dir: 'dist/my-app',
entryFileNames: 'js/[name].[hash].js',
chunkFileNames: 'js/chunk.[hash].js',
assetFileNames: 'assets/[name].[hash].[ext]'
}
}
}
})
区分开发与生产环境的 Rollup 配置
Vite 的 build.rollupOptions 仅在生产构建时生效(vite build),开发服务器(vite)不走 Rollup 流程,所以无需担心影响 HMR。如需按模式差异化配置,可用 mode 判断:
立即学习“Java免费学习笔记(深入)”;
import { defineConfig } from 'vite'
export default defineConfig(({ mode }) => ({
build: {
rollupOptions: {
...(mode === 'production' && {
output: {
sourcemap: false
}
})
}
}
}))
注入自定义 Rollup 插件
如果需要在打包阶段执行特定逻辑(如替换全局变量、压缩 SVG、分析依赖图),可往 rollupOptions.plugins 添加插件。注意插件生命周期是否适配 Vite 的构建流程(例如避免在 generateBundle 中修改未完成的 chunk):
- 推荐优先使用 Vite 官方插件(如
@vitejs/plugin-legacy),它们已做兼容处理 - 第三方 Rollup 插件(如
rollup-plugin-visualizer)通常也可直接使用,但建议检查其文档是否支持 Vite - 避免在插件中调用
this.emitFile等可能破坏 Vite 构建缓存的操作
注意与 Vite 特性协同的边界
某些 Vite 原生功能(如 CSS 拆分、HTML 注入、预构建依赖)会接管 Rollup 的部分职责。直接在 rollupOptions 中覆盖相关行为可能导致冲突:
- 不要手动配置
output.format(Vite 已固定为es或iife,取决于目标环境) - 避免修改
input字段(Vite 自动推导入口,除非你明确使用build.rollupOptions.input指定多入口) - CSS 相关输出(如
style文件名)应通过build.cssCodeSplit和build.rollupOptions.output.assetFileNames联合控制


















