构建选项
除非另有说明,本节中的选项仅适用于构建。
build.target
- 类型:
string | string[]
- 默认值:
'modules'
- 相关: 浏览器兼容性
最终 bundle 的浏览器兼容性目标。默认值为 Vite 的一个特殊值 'modules'
,它针对支持 原生 ES 模块、原生 ESM 动态导入 和 import.meta
的浏览器。Vite 会将 'modules'
替换为 ['es2020', 'edge88', 'firefox78', 'chrome87', 'safari14']
另一个特殊值是 'esnext'
- 它假设支持原生动态导入,并且只会执行最少的转换。
转换使用 esbuild 执行,值应为有效的 esbuild target 选项。自定义目标可以是 ES 版本(例如 es2015
)、带版本的浏览器(例如 chrome58
)或多个目标字符串的数组。
请注意,如果代码包含 esbuild 无法安全转换的功能,则构建将失败。有关更多详细信息,请参阅 esbuild 文档。
build.modulePreload
- 类型:
boolean | { polyfill?: boolean, resolveDependencies?: ResolveModulePreloadDependenciesFn }
- 默认值:
{ polyfill: true }
默认情况下,会自动注入 模块预加载 polyfill。polyfill 会自动注入到每个 index.html
入口的代理模块中。如果构建配置为通过 build.rollupOptions.input
使用非 HTML 自定义入口,则需要在自定义入口中手动导入 polyfill。
import 'vite/modulepreload-polyfill'
注意:polyfill 不适用于 库模式。如果您需要支持不支持原生动态导入的浏览器,则可能应该避免在库中使用它。
可以使用 { polyfill: false }
禁用 polyfill。
每个动态导入的要预加载的块列表由 Vite 计算。默认情况下,在加载这些依赖项时将使用包含 base
的绝对路径。如果 base
是相对路径(''
或 './'
),则在运行时使用 import.meta.url
来避免依赖于最终部署基准的绝对路径。
使用 resolveDependencies
函数对依赖项列表及其路径进行细粒度控制的实验性支持。 提供反馈。它期望一个类型为 ResolveModulePreloadDependenciesFn
的函数
type ResolveModulePreloadDependenciesFn = (
url: string,
deps: string[],
context: {
hostId: string
hostType: 'html' | 'js'
},
) => string[]
对于每个动态导入,resolveDependencies
函数都会被调用,并提供其依赖的块列表,它也会被调用用于入口 HTML 文件中导入的每个块。可以使用这些已过滤或注入更多依赖项的新依赖项数组,并修改其路径。deps
路径相对于 build.outDir
。返回值应为相对于 build.outDir
的相对路径。
modulePreload: {
resolveDependencies: (filename, deps, { hostId, hostType }) => {
return deps.filter(condition)
},
},
可以使用 experimental.renderBuiltUrl
进一步修改已解析的依赖项路径。
build.polyfillModulePreload
- 类型:
boolean
- 默认值:
true
- 已弃用 请改用
build.modulePreload.polyfill
是否自动注入 模块预加载 polyfill。
build.outDir
- 类型:
string
- 默认值:
dist
指定输出目录(相对于 项目根目录)。
build.assetsDir
- 类型:
string
- 默认值:
assets
指定在生成的资源下嵌套的目录(相对于 build.outDir
。这在 库模式 中未使用)。
build.assetsInlineLimit
- 类型:
number
|((filePath: string, content: Buffer) => boolean | undefined)
- 默认值:
4096
(4 KiB)
小于此阈值的导入或引用的资源将以内联 base64 URL 的形式嵌入,以避免额外的 http 请求。设置为 0
以完全禁用内联。
如果传递了回调函数,则可以返回一个布尔值来选择加入或选择退出。如果未返回任何内容,则应用默认逻辑。
Git LFS 占位符会自动排除在内联之外,因为它们不包含其代表的文件的内容。
注意
如果指定了 build.lib
,则会忽略 build.assetsInlineLimit
,并且资源始终会被内联,而不管文件大小或是否是 Git LFS 占位符。
build.cssCodeSplit
- 类型:
boolean
- 默认值:
true
启用/禁用 CSS 代码拆分。启用后,异步 JS 块中导入的 CSS 将保留为块,并在获取块时一起获取。
如果禁用,则整个项目中的所有 CSS 将提取到单个 CSS 文件中。
注意
如果指定了 build.lib
,则 build.cssCodeSplit
的默认值为 false
。
build.cssTarget
- 类型:
string | string[]
- 默认值: 与
build.target
相同
此选项允许用户为 CSS 缩小设置与用于 JavaScript 转换不同的浏览器目标。
仅当您针对非主流浏览器时才应使用它。一个例子是 Android 微信 WebView,它支持大多数现代 JavaScript 功能,但不支持 CSS 中的 #RGBA
十六进制颜色表示法。在这种情况下,您需要将 build.cssTarget
设置为 chrome61
以防止 vite 将 rgba()
颜色转换为 #RGBA
十六进制表示法。
build.cssMinify
- 类型:
boolean | 'esbuild' | 'lightningcss'
- 默认值: 对于客户端,与
build.minify
相同;对于 SSR,为'esbuild'
此选项允许用户专门覆盖 CSS 缩小,而不是默认为 build.minify
,因此您可以分别为 JS 和 CSS 配置缩小。Vite 默认使用 esbuild
来缩小 CSS。将选项设置为 'lightningcss'
以改用 Lightning CSS。如果选中,可以使用 css.lightningcss
进行配置。
build.sourcemap
- 类型:
boolean | 'inline' | 'hidden'
- 默认值:
false
生成生产环境源映射。如果为 true
,则会创建单独的源映射文件。如果为 'inline'
,则源映射将作为数据 URI 附加到结果输出文件。'hidden'
的工作方式与 true
相同,只是抑制了捆绑文件中相应的源映射注释。
build.rollupOptions
- 类型:
RollupOptions
直接自定义底层的 Rollup bundle。这与可以从 Rollup 配置文件导出的选项相同,并将与 Vite 的内部 Rollup 选项合并。有关更多详细信息,请参阅 Rollup 选项文档。
build.commonjsOptions
传递给 @rollup/plugin-commonjs 的选项。
build.dynamicImportVarsOptions
传递给 @rollup/plugin-dynamic-import-vars 的选项。
build.lib
- 类型:
{ entry: string | string[] | { [entryAlias: string]: string }, name?: string, formats?: ('es' | 'cjs' | 'umd' | 'iife')[], fileName?: string | ((format: ModuleFormat, entryName: string) => string), cssFileName?: string }
- 相关: 库模式
作为库构建。由于库不能使用 HTML 作为入口,因此 entry
是必需的。name
是公开的全局变量,当 formats
包含 'umd'
或 'iife'
时是必需的。默认 formats
为 ['es', 'umd']
,或者如果使用了多个入口,则为 ['es', 'cjs']
。
fileName
是包文件输出的名称,默认为 package.json
中的 "name"
。它也可以定义为一个函数,该函数接受 format
和 entryName
作为参数,并返回文件名。
如果您的包导入 CSS,则可以使用 cssFileName
指定 CSS 文件输出的名称。如果将其设置为字符串,则默认为与 fileName
相同的值,否则它也会回退到 package.json
中的 "name"
。
import { defineConfig } from 'vite'
export default defineConfig({
build: {
lib: {
entry: ['src/main.js'],
fileName: (format, entryName) => `my-lib-${entryName}.${format}.js`,
cssFileName: 'my-lib-style',
},
},
})
build.manifest
- 类型:
boolean | string
- 默认值:
false
- 相关: 后端集成
设置为 true
时,构建过程还会生成一个 .vite/manifest.json
文件,其中包含非哈希资产文件名与其哈希版本的映射,然后服务器框架可以使用此映射渲染正确的资产链接。当值为字符串时,它将用作清单文件名。
build.ssrManifest
- 类型:
boolean | string
- 默认值:
false
- 相关: 服务器端渲染
设置为 true
时,构建过程还会生成一个 SSR 清单,用于在生产环境中确定样式链接和资产预加载指令。当值为字符串时,它将用作清单文件名。
build.ssr
- 类型:
boolean | string
- 默认值:
false
- 相关: 服务器端渲染
生成面向 SSR 的构建。该值可以是字符串,直接指定 SSR 入口,也可以是 true
,这需要通过 rollupOptions.input
指定 SSR 入口。
build.emitAssets
- 类型:
boolean
- 默认值:
false
在非客户端构建期间,不会发出静态资产,因为假设它们将作为客户端构建的一部分发出。此选项允许框架在其他环境构建中强制发出它们。合并资产的后构建步骤由框架负责。
build.ssrEmitAssets
- 类型:
boolean
- 默认值:
false
在 SSR 构建期间,不会发出静态资产,因为假设它们将作为客户端构建的一部分发出。此选项允许框架在客户端和 SSR 构建中都强制发出它们。合并资产的后构建步骤由框架负责。此选项将在环境 API 稳定后由 build.emitAssets
替换。
build.minify
- 类型:
boolean | 'terser' | 'esbuild'
- 默认值: 客户端构建为
'esbuild'
,SSR 构建为false
设置为 false
以禁用压缩,或指定要使用的压缩器。默认值为 esbuild,其速度比 terser 快 20 到 40 倍,压缩率仅降低 1 到 2%。基准测试
请注意,当在 lib 模式下使用 'es'
格式时,build.minify
选项不会压缩空格,因为它会删除纯注释并破坏 tree-shaking。
当设置为 'terser'
时,必须安装 Terser。
npm add -D terser
build.terserOptions
- 类型:
TerserOptions
传递给 Terser 的其他 压缩选项。
此外,您还可以传递一个 maxWorkers: number
选项来指定要生成的 worker 的最大数量。默认为 CPU 数量减 1。
build.write
- 类型:
boolean
- 默认值:
true
设置为 false
以禁用将 bundle 写入磁盘。这主要用于在 编程 build()
调用 中,在写入磁盘之前需要对 bundle 进行进一步的后处理。
build.emptyOutDir
- 类型:
boolean
- 默认值: 如果
outDir
在root
内,则为true
默认情况下,如果 outDir
在项目根目录内,Vite 会在构建时清空 outDir
。如果 outDir
在 root 目录之外,它会发出警告以避免意外删除重要文件。您可以显式设置此选项以抑制警告。这也可以通过命令行作为 --emptyOutDir
使用。
build.copyPublicDir
- 类型:
boolean
- 默认值:
true
默认情况下,Vite 会在构建时将文件从 publicDir
复制到 outDir
。设置为 false
以禁用此功能。
build.reportCompressedSize
- 类型:
boolean
- 默认值:
true
启用/禁用 gzip 压缩大小报告。压缩大型输出文件可能很慢,因此禁用此功能可能会提高大型项目的构建性能。
build.chunkSizeWarningLimit
- 类型:
number
- 默认值:
500
块大小警告的限制(以 kB 为单位)。它与未压缩的块大小进行比较,因为 JavaScript 大小本身与执行时间相关。
build.watch
- 类型:
WatcherOptions
| null
- 默认值:
null
设置为 {}
以启用 rollup 观察器。这主要用于涉及仅构建插件或集成过程的情况。
在 Windows Subsystem for Linux (WSL) 2 上使用 Vite
在某些情况下,文件系统观察功能无法与 WSL2 一起使用。有关更多详细信息,请参阅 server.watch
。