跳到主要内容

Vite 配置速查 — 60+ 个 vite.config.ts 选项附默认值与示例

Vite 配置速查,60+ 个 vite.config.ts 选项附默认值、示例和注意事项。

  • 本地处理
  • 分类 开发运维
  • 适合 格式化、校验、压缩或检查和代码相关的文本。
分类:
39 个选项
服务器(9)
server.port
类型: number默认值: 5173

开发服务器监听的端口。如果该端口已被占用,Vite 会自动尝试下一个可用端口,除非设置了 `server.strictPort: true`。

示例
server: {
  port: 3000,
}
server.host
类型: string | boolean默认值: 'localhost'

设为 `"0.0.0.0"` 或 `true` 可在所有网络接口上暴露开发服务器,包括局域网和公网地址。在同一网络的手机上测试时必须设这个。

注意事项:

在所有网络接口上暴露开发服务器在公共网络上存在安全风险。只在可信网络上使用。

示例
server: {
  host: true,      // same as '0.0.0.0'
}
server.open
类型: boolean | string默认值: false

服务器启动时自动在浏览器中打开应用。传字符串 URL 可打开特定页面,如 `"/dashboard"` 跳过首页直接到后台。

示例
server: {
  open: true,
  // or: open: '/dashboard',
}
server.proxy
类型: Record<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.cors
类型: boolean | 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.hmr
类型: boolean | 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.headers
类型: OutgoingHttpHeaders默认值: 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.strictPort
类型: boolean默认值: false

设为 `true` 时,如果配置的端口已被占用,Vite 报错退出而不是静默尝试下一个端口。在依赖特定端口的 CI 环境或脚本中很有用。

示例
server: {
  port: 3000,
  strictPort: true,
}
preview.port
类型: number默认值: 4173

`vite preview` 命令在本地预览生产构建时使用的端口。与 `server.port` 分开以避免同时运行时冲突。

示例
preview: {
  port: 8080,
  open: true,
}
构建(12)
build.target
类型: string | 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.outDir
类型: string默认值: 'dist'

生产构建的输出目录,相对于项目根目录。如果 `build.emptyOutDir` 为 `true`(默认),Vite 会在构建前清空该目录。

示例
build: {
  outDir: 'dist',
}
build.assetsDir
类型: string默认值: 'assets'

在 `outDir` 内放置生成资源(JS 代码块、CSS、图片)的子目录。代码块的完整路径为 `{outDir}/{assetsDir}/[name]-[hash].js`。

示例
build: {
  assetsDir: 'static',   // outputs to dist/static/
}
build.emptyOutDir
类型: boolean默认值: true if outDir is inside root

构建前清空输出目录。当 `outDir` 在项目根目录内时默认为 `true`,在外面时默认 `false`(防止意外删除)。显式设为 `true` 可强制每次清空。

示例
build: {
  emptyOutDir: true,
}
build.minify
类型: boolean | 'terser' | 'esbuild'默认值: 'esbuild'

控制 JS 压缩。`"esbuild"` 是默认值,速度极快。`"terser"` 输出略小但慢 20-40 倍。设为 `false` 完全禁用压缩,调试生产构建时很有用。

示例
build: {
  minify: 'esbuild',    // fast (default)
  // minify: 'terser',  // smaller, slower
  // minify: false,     // disable for debugging
}
build.sourcemap
类型: boolean | '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.rollupOptions
类型: RollupOptions默认值: {}

直接自定义 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.lib
类型: LibraryOptions默认值: 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.cssCodeSplit
类型: boolean默认值: true

启用时(默认),异步 JS 代码块导入的 CSS 会拆成独立的 CSS 文件。禁用时,所有 CSS 合并为一个文件。构建库时设为 `false` 可把 CSS 保留在 JS 里,或者想要单个 CSS bundle 时也可禁用。

示例
build: {
  cssCodeSplit: true,   // default, split per chunk
  // cssCodeSplit: false,  // one CSS file
}
build.assetsInlineLimit
类型: number默认值: 4096 (4 KB)

小于此阈值(字节)的资源会以 base64 data URI 内联到代码里,而不是输出为独立文件。减少小资源的 HTTP 请求,代价是 JS/CSS bundle 更大。设为 `0` 禁用内联。

示例
build: {
  assetsInlineLimit: 8192,   // 8 KB
  // assetsInlineLimit: 0,   // never inline
}
build.chunkSizeWarningLimit
类型: number默认值: 500 (kB)

代码块大小警告阈值(kB)。代码块超过此大小时 Vite 会发出警告。只有在确认大代码块可接受时才增大限制,更好的做法是用 `rollupOptions.output.manualChunks` 拆包。

注意事项:

提高这个限制来压制警告不是修复方案,大代码块会影响页面加载性能。用 `npx vite-bundle-visualizer` 分析后通过 `manualChunks` 拆包。

示例
build: {
  chunkSizeWarningLimit: 1000,   // 1 MB
}
build.copyPublicDir
类型: boolean默认值: true

为 `true` 时,`public/` 目录的文件会在构建结束时复制到 `outDir`。构建库时设为 `false`,库不需要 public 目录的内容。

示例
build: {
  copyPublicDir: false,   // useful for library builds
}
路径解析(4)
resolve.alias
类型: Record<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.extensions
类型: string[]默认值: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']

解析不带扩展名的裸导入时依次尝试的文件扩展名列表。默认列表涵盖了常见的 TypeScript 和 JavaScript 扩展名。避免在这里加 `.vue`、`.svelte` 等,框架插件会处理这些。

示例
resolve: {
  extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
}
resolve.conditions
类型: string[]默认值: ['module', 'browser', 'development|production']

对照 `package.json` 中 `exports` 字段检查的条件。Vite 在客户端构建时使用 `"browser"`,SSR 时使用 `"node"`。添加自定义条件可以在不同环境下解析不同的包入口。

示例
resolve: {
  conditions: ['module', 'browser'],
}
resolve.dedupe
类型: string[]默认值: []

强制特定包解析为同一个实例,防止模块图中出现重复实例。重复实例会破坏单例(React context、Vue 响应式系统)。在用 `file:` 链接本地包或 monorepo 场景中很有用。

注意事项:

缺少 `dedupe` 条目最常见的症状是:React hooks 抛出"Invalid hook call",或 Vue 组件失去响应性,原因是加载了两份 React/Vue 副本。

示例
resolve: {
  dedupe: ['react', 'react-dom'],
}
插件(5)
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),
}));
defineConfig
类型: UserConfig | 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
    },
  };
});
define
类型: Record<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,
}
base
类型: string默认值: '/'

在开发或生产环境中提供服务时的公共基础路径。必须以斜杠结尾。部署到子目录时设置(GitHub Pages、Netlify 子路径)。所有资源 URL 都会加上这个前缀。

注意事项:

缺少结尾斜杠(如 `base: "/my-app"` 而不是 `"/my-app/"`)在某些情况下会导致资源 URL 生成错误。始终包含结尾斜杠。

示例
export default defineConfig({
  base: '/my-app/',   // deployed to example.com/my-app/
});
CSS(4)
css.modules
类型: CSSModulesOptions默认值: {}

配置 CSS Modules 行为。`localsConvention: "camelCaseOnly"` 把连字符类名转成驼峰格式供 JS 使用。`generateScopedName` 可自定义作用域类名格式,开发时可用更可读的类名。

示例
css: {
  modules: {
    localsConvention: 'camelCaseOnly',
    generateScopedName: '[name]__[local]__[hash:5]',
  },
}
css.preprocessorOptions
类型: Record<string, object>默认值: {}

向 CSS 预处理器(Sass、Less、Stylus)传递选项。最常见的用法是注入全局变量或导入,让它们在每个样式文件中可用,无需显式导入。

示例
css: {
  preprocessorOptions: {
    scss: {
      additionalData: '@use "@/styles/variables" as *;',
    },
    less: {
      globalVars: {
        primaryColor: '#1890ff',
      },
    },
  },
}
css.postcss
类型: string | PostCSSConfig默认值: auto-discovered postcss.config.js

内联 PostCSS 配置或指向 PostCSS 配置文件的路径。用于配置 `autoprefixer`、`cssnano` 等插件。在此指定时,Vite 不会搜索外部的 `postcss.config.js` 文件。

示例
import autoprefixer from 'autoprefixer';

css: {
  postcss: {
    plugins: [
      autoprefixer(),
    ],
  },
}
css.devSourcemap
类型: boolean默认值: false

在开发模式下启用 CSS source map。启用后,浏览器 DevTools 显示原始 CSS 文件位置而不是转换后的输出。有轻微性能开销,除非在主动调试 CSS 否则不建议开启。

示例
css: {
  devSourcemap: true,
}
优化(5)
optimizeDeps.include
类型: string[]默认值: []

强制把特定依赖纳入预打包步骤。适用于无法自动检测到的依赖(如深层嵌套导入、动态导入)。条目必须是可解析的导入路径,不是文件系统路径。

示例
optimizeDeps: {
  include: ['lodash-es', 'some-cjs-dep > nested-dep'],
}
optimizeDeps.exclude
类型: string[]默认值: []

把特定依赖排除在预打包之外。适用于有循环依赖或 CJS 构建有问题、esbuild 处理不正确的 ESM 原生包。也适用于只用了小部分功能的大包。

示例
optimizeDeps: {
  exclude: ['@ffmpeg/ffmpeg', 'some-esm-native-dep'],
}
optimizeDeps.force
类型: boolean默认值: false

强制重新预打包依赖,忽略缓存结果。依赖缓存看起来过期时可临时使用。不要提交到 `vite.config.ts`,会让团队每次开发启动都变慢。一次性重置用命令行 `vite --force` 更合适。

注意事项:

把 `optimizeDeps.force: true` 提交到仓库会让每个团队成员的冷启动都变慢。一次性重新打包用命令行 `vite --force`。

示例
optimizeDeps: {
  force: true,  // ⚠ temporary only, don't commit
}
esbuild
类型: EsbuildOptions | 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.noExternal
类型: string | 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 片段, 有坑的附带注意事项。搜索框跨选项名/说明/片段/注意事项同时过滤,分类胶囊 可锁定任意单组。完全浏览器里跑,离线可用。

工具细节

输入
文本
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 预览
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
可能使用网络查询
组件源码里检测到网络调用,页面会按工具逻辑处理;敏感内容建议先脱敏。
保存 / 分享
可分享链接状态
关键设置会进入 URL,复制链接后别人能复现同一组参数。
性能预算
首屏 JS ≤ 32 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
开发运维 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

Vite 配置速查 适合怎么用

适合穿插在写代码、查问题、做 Review、上线前的小任务里。

适合开发场景

  • 格式化、校验、压缩或检查和代码相关的文本。
  • 把片段整理好再放进文档、工单、提交或交接材料。
  • 不切换工具,快速检查一个小 payload。

开发检查项

  • 压缩、混淆这类不可逆处理,先对副本操作。
  • 除非确认工具本地处理,不要粘贴密钥和敏感片段。
  • 转换后的代码上线前,仍要跑自己的测试或 lint。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 TypeScript 配置速查 TypeScript tsconfig.json 速查,55+ 个选项附默认值、示例和注意事项。 打开
  2. 2 package.json 速查表 package.json 字段速查,55+ 字段配真实示例,双语可搜索。 打开
  3. 3 npm / yarn / pnpm 命令速查 npm / yarn / pnpm 命令速查,80+ 条覆盖 init/install/scripts/publish,三个工具对照表。 打开

真实使用场景

  • 给 React 开发服务器配置 API 代理

    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 会缓存 预打包结果。

  • 用 Vite build.lib 发布组件库

    你要把 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` 都重新打包依赖,冷启动变慢。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-07-01