server.portnumber默认值: 5173开发服务器监听的端口。如果该端口已被占用,Vite 会自动尝试下一个可用端口,除非设置了 `server.strictPort: true`。
server: {
port: 3000,
}Vite 配置速查,60+ 个 vite.config.ts 选项附默认值、示例和注意事项。
server.portnumber默认值: 5173开发服务器监听的端口。如果该端口已被占用,Vite 会自动尝试下一个可用端口,除非设置了 `server.strictPort: true`。
server: {
port: 3000,
}server.hoststring | boolean默认值: 'localhost'设为 `"0.0.0.0"` 或 `true` 可在所有网络接口上暴露开发服务器,包括局域网和公网地址。在同一网络的手机上测试时必须设这个。
在所有网络接口上暴露开发服务器在公共网络上存在安全风险。只在可信网络上使用。
server: {
host: true, // same as '0.0.0.0'
}server.openboolean | string默认值: false服务器启动时自动在浏览器中打开应用。传字符串 URL 可打开特定页面,如 `"/dashboard"` 跳过首页直接到后台。
server: {
open: true,
// or: open: '/dashboard',
}server.proxyRecord<string, string | ProxyOptions>默认值: undefined为开发服务器配置自定义代理规则。匹配 key 的请求会被转发到目标。目标是不同主机名时必须加 `changeOrigin: true`。用 `rewrite` 去掉后端不需要的路径前缀。
目标是不同主机名时忘加 `changeOrigin: true`,后端会因 `Host` 头不匹配而拒绝请求。
server: {
proxy: {
'/api': {
target: 'http://localhost:3001',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
'/ws': {
target: 'ws://localhost:3001',
ws: true,
},
},
}server.corsboolean | CorsOptions默认值: true (for *.localhost and 127.0.0.1)配置开发服务器的 CORS。设为 `true` 允许所有来源,或传 `CorsOptions` 对象精细控制。从不同来源访问开发服务器时很有用。
server: {
cors: true,
// or fine-grained:
// cors: {
// origin: 'https://example.com',
// methods: ['GET', 'POST'],
// },
}server.hmrboolean | HmrOptions默认值: true启用或禁用 HMR(热模块替换)。设 `hmr: false` 禁用。传对象可配置 HMR 的 WebSocket 连接,在反向代理不能正确转发 WebSocket 时很有用。
在反向代理(nginx、Caddy)后运行 Vite 时,HMR WebSocket 连接经常失败,因为代理没有配置转发 WebSocket 升级请求。显式指定 HMR overlay 主机名可以修复。
server: {
hmr: {
protocol: 'ws',
host: 'localhost',
port: 5173,
},
}server.headersOutgoingHttpHeaders默认值: undefined为开发服务器指定自定义 HTTP 响应头。用于添加安全头如 `Cross-Origin-Opener-Policy`,或启用需要 `Cross-Origin-Embedder-Policy: require-corp` 的 `SharedArrayBuffer`。
server: {
headers: {
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp',
},
}server.strictPortboolean默认值: false设为 `true` 时,如果配置的端口已被占用,Vite 报错退出而不是静默尝试下一个端口。在依赖特定端口的 CI 环境或脚本中很有用。
server: {
port: 3000,
strictPort: true,
}preview.portnumber默认值: 4173`vite preview` 命令在本地预览生产构建时使用的端口。与 `server.port` 分开以避免同时运行时冲突。
preview: {
port: 8080,
open: true,
}build.targetstring | string[]默认值: 'modules'生产构建的浏览器兼容目标。`"modules"` 面向支持原生 ES 模块的浏览器(Chrome 87+、Firefox 78+、Safari 14+)。`"esnext"` 使用最新语法。传数组如 `["chrome87", "firefox78", "safari14"]` 可指定目标浏览器集合。使用 esbuild 转换降级语法。
设 `target: "esnext"` 不会做任何语法降级,假设浏览器支持所有最新 JS 特性。面向老版本浏览器的生产应用要用具体的年份版本(如 "es2020")。
build: {
target: 'es2020',
// or: target: ['chrome87', 'firefox78', 'safari14'],
}build.outDirstring默认值: 'dist'生产构建的输出目录,相对于项目根目录。如果 `build.emptyOutDir` 为 `true`(默认),Vite 会在构建前清空该目录。
build: {
outDir: 'dist',
}build.assetsDirstring默认值: 'assets'在 `outDir` 内放置生成资源(JS 代码块、CSS、图片)的子目录。代码块的完整路径为 `{outDir}/{assetsDir}/[name]-[hash].js`。
build: {
assetsDir: 'static', // outputs to dist/static/
}build.emptyOutDirboolean默认值: true if outDir is inside root构建前清空输出目录。当 `outDir` 在项目根目录内时默认为 `true`,在外面时默认 `false`(防止意外删除)。显式设为 `true` 可强制每次清空。
build: {
emptyOutDir: true,
}build.minifyboolean | 'terser' | 'esbuild'默认值: 'esbuild'控制 JS 压缩。`"esbuild"` 是默认值,速度极快。`"terser"` 输出略小但慢 20-40 倍。设为 `false` 完全禁用压缩,调试生产构建时很有用。
build: {
minify: 'esbuild', // fast (default)
// minify: 'terser', // smaller, slower
// minify: false, // disable for debugging
}build.sourcemapboolean | 'inline' | 'hidden'默认值: false生成生产构建的 source map。`true` 创建独立的 `.map` 文件。`"inline"` 把 source map 作为 data URI 内嵌在 bundle 里。`"hidden"` 创建 `.map` 文件但不加 `//# sourceMappingURL` 注释,适合配合私有上传 source map 的错误监控工具使用。
build: {
sourcemap: true,
// or 'inline' | 'hidden'
}build.rollupOptionsRollupOptions默认值: {}直接自定义 Rollup 打包配置。常用于给库配置 `external` 依赖、用 `output.manualChunks` 拆包、多页应用的 `input` 配置。完整的 Rollup API 都可用。
build: {
rollupOptions: {
external: ['react', 'react-dom'],
output: {
globals: {
react: 'React',
'react-dom': 'ReactDOM',
},
manualChunks: {
vendor: ['lodash', 'axios'],
},
},
},
}build.libLibraryOptions默认值: undefined配置 Vite 的库模式,用于发布 npm 包。指定入口点和输出格式。始终用 `rollupOptions.external` 列出不应打包的对等依赖。
build: {
lib: {
entry: 'src/index.ts',
name: 'MyLib',
fileName: 'my-lib',
formats: ['es', 'cjs'],
},
rollupOptions: {
external: ['react', 'react-dom'],
},
}build.cssCodeSplitboolean默认值: true启用时(默认),异步 JS 代码块导入的 CSS 会拆成独立的 CSS 文件。禁用时,所有 CSS 合并为一个文件。构建库时设为 `false` 可把 CSS 保留在 JS 里,或者想要单个 CSS bundle 时也可禁用。
build: {
cssCodeSplit: true, // default, split per chunk
// cssCodeSplit: false, // one CSS file
}build.assetsInlineLimitnumber默认值: 4096 (4 KB)小于此阈值(字节)的资源会以 base64 data URI 内联到代码里,而不是输出为独立文件。减少小资源的 HTTP 请求,代价是 JS/CSS bundle 更大。设为 `0` 禁用内联。
build: {
assetsInlineLimit: 8192, // 8 KB
// assetsInlineLimit: 0, // never inline
}build.chunkSizeWarningLimitnumber默认值: 500 (kB)代码块大小警告阈值(kB)。代码块超过此大小时 Vite 会发出警告。只有在确认大代码块可接受时才增大限制,更好的做法是用 `rollupOptions.output.manualChunks` 拆包。
提高这个限制来压制警告不是修复方案,大代码块会影响页面加载性能。用 `npx vite-bundle-visualizer` 分析后通过 `manualChunks` 拆包。
build: {
chunkSizeWarningLimit: 1000, // 1 MB
}build.copyPublicDirboolean默认值: true为 `true` 时,`public/` 目录的文件会在构建结束时复制到 `outDir`。构建库时设为 `false`,库不需要 public 目录的内容。
build: {
copyPublicDir: false, // useful for library builds
}resolve.aliasRecord<string, string> | Alias[]默认值: {}定义文件系统路径别名。匹配 key 的导入在构建时替换为对应的路径值。最常见的用法是为 `src/` 目录创建 `@/` 别名。记住要在 `tsconfig.json` 里同步配 `paths`,Vite 和 TypeScript 的别名配置是独立的。
Vite 里配了 `resolve.alias` 但 tsconfig.json 的 paths 没同步配,TypeScript 会在每个别名导入上报"Cannot find module",哪怕 Vite 能正确解析文件。
import path from 'path';
import { defineConfig } from 'vite';
export default defineConfig({
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
'@components': path.resolve(__dirname, './src/components'),
'@utils': path.resolve(__dirname, './src/utils'),
},
},
});resolve.extensionsstring[]默认值: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']解析不带扩展名的裸导入时依次尝试的文件扩展名列表。默认列表涵盖了常见的 TypeScript 和 JavaScript 扩展名。避免在这里加 `.vue`、`.svelte` 等,框架插件会处理这些。
resolve: {
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
}resolve.conditionsstring[]默认值: ['module', 'browser', 'development|production']对照 `package.json` 中 `exports` 字段检查的条件。Vite 在客户端构建时使用 `"browser"`,SSR 时使用 `"node"`。添加自定义条件可以在不同环境下解析不同的包入口。
resolve: {
conditions: ['module', 'browser'],
}resolve.dedupestring[]默认值: []强制特定包解析为同一个实例,防止模块图中出现重复实例。重复实例会破坏单例(React context、Vue 响应式系统)。在用 `file:` 链接本地包或 monorepo 场景中很有用。
缺少 `dedupe` 条目最常见的症状是:React hooks 抛出"Invalid hook call",或 Vue 组件失去响应性,原因是加载了两份 React/Vue 副本。
resolve: {
dedupe: ['react', 'react-dom'],
}plugins(Plugin | Plugin[])[]默认值: []Vite 插件数组。插件按顺序应用。框架插件(如 `@vitejs/plugin-react`)通常放最前面。数组里可以返回 `null` 或 `false` 来按条件跳过插件。
import react from '@vitejs/plugin-react';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [
react(),
],
});plugins (conditional)Plugin | false | null默认值: n/a通过在 plugins 数组里用三目运算或逻辑与按条件加载插件。`false` 和 `null` 值会被 Vite 过滤掉。`defineConfig` 的 `command` 和 `mode` 参数可以让插件只在构建时或只在生产环境启用。
export default defineConfig(({ command, mode }) => ({
plugins: [
react(),
mode === 'production' && vitePWA(), // only in prod
command === 'build' && bundleAnalyzer(),
].filter(Boolean),
}));defineConfigUserConfig | ConfigEnv => UserConfig默认值: n/a提供 TypeScript 自动补全的配置辅助函数。传函数可接收 `command`(`"serve"` | `"build"`)、`mode`(如 `"development"` | `"production"`)和 `isSsrBuild`,用于环境感知配置。
import { defineConfig } from 'vite';
export default defineConfig(({ command, mode }) => {
return {
build: {
sourcemap: command === 'serve', // sourcemap in dev only
},
};
});defineRecord<string, any>默认值: {}定义全局常量替换。值在源代码中原样替换(不加引号)。运行时环境变量优先用 `import.meta.env.VITE_*`,但 `define` 适合功能开关、版本字符串等构建时常量。
字符串值必须包在 `JSON.stringify()` 里。写 `__VERSION__: "1.0"` 会把字面量 `1.0` 插入源码,应写 `__VERSION__: JSON.stringify("1.0")`。
define: {
__APP_VERSION__: JSON.stringify('1.2.3'),
__FEATURE_FLAG__: true,
}basestring默认值: '/'在开发或生产环境中提供服务时的公共基础路径。必须以斜杠结尾。部署到子目录时设置(GitHub Pages、Netlify 子路径)。所有资源 URL 都会加上这个前缀。
缺少结尾斜杠(如 `base: "/my-app"` 而不是 `"/my-app/"`)在某些情况下会导致资源 URL 生成错误。始终包含结尾斜杠。
export default defineConfig({
base: '/my-app/', // deployed to example.com/my-app/
});css.modulesCSSModulesOptions默认值: {}配置 CSS Modules 行为。`localsConvention: "camelCaseOnly"` 把连字符类名转成驼峰格式供 JS 使用。`generateScopedName` 可自定义作用域类名格式,开发时可用更可读的类名。
css: {
modules: {
localsConvention: 'camelCaseOnly',
generateScopedName: '[name]__[local]__[hash:5]',
},
}css.preprocessorOptionsRecord<string, object>默认值: {}向 CSS 预处理器(Sass、Less、Stylus)传递选项。最常见的用法是注入全局变量或导入,让它们在每个样式文件中可用,无需显式导入。
css: {
preprocessorOptions: {
scss: {
additionalData: '@use "@/styles/variables" as *;',
},
less: {
globalVars: {
primaryColor: '#1890ff',
},
},
},
}css.postcssstring | PostCSSConfig默认值: auto-discovered postcss.config.js内联 PostCSS 配置或指向 PostCSS 配置文件的路径。用于配置 `autoprefixer`、`cssnano` 等插件。在此指定时,Vite 不会搜索外部的 `postcss.config.js` 文件。
import autoprefixer from 'autoprefixer';
css: {
postcss: {
plugins: [
autoprefixer(),
],
},
}css.devSourcemapboolean默认值: false在开发模式下启用 CSS source map。启用后,浏览器 DevTools 显示原始 CSS 文件位置而不是转换后的输出。有轻微性能开销,除非在主动调试 CSS 否则不建议开启。
css: {
devSourcemap: true,
}optimizeDeps.includestring[]默认值: []强制把特定依赖纳入预打包步骤。适用于无法自动检测到的依赖(如深层嵌套导入、动态导入)。条目必须是可解析的导入路径,不是文件系统路径。
optimizeDeps: {
include: ['lodash-es', 'some-cjs-dep > nested-dep'],
}optimizeDeps.excludestring[]默认值: []把特定依赖排除在预打包之外。适用于有循环依赖或 CJS 构建有问题、esbuild 处理不正确的 ESM 原生包。也适用于只用了小部分功能的大包。
optimizeDeps: {
exclude: ['@ffmpeg/ffmpeg', 'some-esm-native-dep'],
}optimizeDeps.forceboolean默认值: false强制重新预打包依赖,忽略缓存结果。依赖缓存看起来过期时可临时使用。不要提交到 `vite.config.ts`,会让团队每次开发启动都变慢。一次性重置用命令行 `vite --force` 更合适。
把 `optimizeDeps.force: true` 提交到仓库会让每个团队成员的冷启动都变慢。一次性重新打包用命令行 `vite --force`。
optimizeDeps: {
force: true, // ⚠ temporary only, don't commit
}esbuildEsbuildOptions | false默认值: {}传给 esbuild 进行单文件转换的选项。`esbuild.jsxInject` 自动导入 React,无需在每个文件里写 `import React from "react"`。`esbuild.drop` 在生产环境中删除 `console` 或 `debugger` 调用。设为 `false` 完全禁用 esbuild 转换。
esbuild: {
jsxInject: `import React from 'react'`,
drop: ['console', 'debugger'], // prod only
target: 'es2020',
}ssr.noExternalstring | RegExp | (string | RegExp)[] | true默认值: []强制把指定依赖打包到 SSR 输出里而不是外部化。适用于没有有效 CJS 构建或使用了需要被转换的浏览器特定全局变量的包。
ssr: {
noExternal: ['some-esm-only-package', /^@my-org//],
}涵盖 vite.config.ts 所有重要选项的可搜索参考手册,按每个项目都会用到的 六大类整理。开发服务器与预览:server.port、server.host、server.open、 server.proxy(含 rewrite 规则)、server.https、server.hmr、server.cors、 server.headers、preview.port。构建:build.target、build.outDir、build.assetsDir、 build.emptyOutDir、build.minify、build.sourcemap、build.rollupOptions、build.lib、 build.cssCodeSplit、build.assetsInlineLimit、build.chunkSizeWarningLimit、 build.reportCompressedSize、build.copyPublicDir。路径解析:resolve.alias、 resolve.extensions、resolve.conditions、resolve.dedupe。插件:plugins 数组、 加载顺序、框架插件(React/Vue/Svelte)、按条件加载插件、defineConfig 的 mode/env 感知用法。CSS:css.modules、css.preprocessorOptions(Sass 变量、 Less globalVars)、css.postcss、css.devSourcemap。优化:optimizeDeps.include、 optimizeDeps.exclude、optimizeDeps.force、ssr.noExternal、esbuild 选项。 每条都标明类型、默认值、中英双语说明、可直接拷贝的 vite.config.ts 片段, 有坑的附带注意事项。搜索框跨选项名/说明/片段/注意事项同时过滤,分类胶囊 可锁定任意单组。完全浏览器里跑,离线可用。
把内容粘贴或拖入工具面板。
点击按钮,在浏览器内本地处理,文件不上传。
一键复制结果或下载到本地。
适合穿插在写代码、查问题、做 Review、上线前的小任务里。
这些入口会把当前任务接到更完整的工具链里。
React 应用在开发时调用 `/api/users`,但 Express 后端跑在 3001 端口。你在 速查里找到 `server.proxy`,复制含 `changeOrigin: true` 和 `rewrite` 的片段, 两个服务器就能互通,没有 CORS 报错,不到两分钟搞定。
代码库里到处都是 `import Button from '../../../components/Button'`。你查了 `resolve.alias`,复制片段,同步更新 tsconfig 的 paths,所有导入一次性变成 干净的 `@/components/Button`。
Vite 每次冷启动都要花 15 秒重新打包一个大型 CommonJS 库。你找到 `optimizeDeps.include`,把问题包加进去,启动降到 2 秒,因为 Vite 会缓存 预打包结果。
你要把 React 组件库发到 npm,同时输出 ESM 和 CJS 格式。速查里的 `build.lib` 条目展示了 `formats: ['es', 'cjs']`、用 `rollupOptions.external` 排除 React/ReactDOM 等 peer 依赖、加 `build.sourcemap: true` 让发布的代码可调试。
`server.proxy` 的目标是不同主机名时忘加 `changeOrigin: true`,后端因 Host 头不匹配拒绝请求。
Vite 里配了 `resolve.alias` 但 tsconfig.json 的 paths 没同步配,Vite 能找到文件但 TypeScript 在每个别名导入上报"Cannot find module"。
把 `optimizeDeps.force: true` 提交到代码库,导致团队每次 `vite dev` 都重新打包依赖,冷启动变慢。
做你这行的人, 还会一起用这些。