跳至内容

依赖优化选项

除非另有说明,本节中的选项仅应用于依赖优化器,该优化器仅在开发环境中使用。

optimizeDeps.entries

  • 类型: string | string[]

默认情况下,Vite 会遍历所有 .html 文件以检测需要预打包的依赖项(忽略 node_modulesbuild.outDir__tests__coverage)。如果指定了 build.rollupOptions.input,Vite 将改为遍历这些入口点。

如果这些都不满足您的需求,您可以使用此选项指定自定义入口 - 该值应为相对于 Vite 项目根目录的 tinyglobby 模式 或模式数组。这将覆盖默认入口推断。仅当显式定义 optimizeDeps.entries 时,默认情况下才会忽略 node_modulesbuild.outDir 文件夹。如果需要忽略其他文件夹,可以使用忽略模式作为条目列表的一部分,以初始 ! 标记。如果您不想忽略 node_modulesbuild.outDir,则可以使用文字字符串路径(不使用 tinyglobby 模式)代替。

optimizeDeps.exclude

  • 类型: string[]

要从预打包中排除的依赖项。

CommonJS

不应将 CommonJS 依赖项排除在优化之外。如果一个 ESM 依赖项被排除在优化之外,但它有一个嵌套的 CommonJS 依赖项,则应将 CommonJS 依赖项添加到 optimizeDeps.include 中。示例

js
export default 
defineConfig
({
optimizeDeps
: {
include
: ['esm-dep > cjs-dep'],
}, })

optimizeDeps.include

  • 类型: string[]

默认情况下,不在 node_modules 内部的链接包不会被预打包。使用此选项强制预打包链接包。

实验性:如果您正在使用一个具有许多深度导入的库,您还可以指定一个尾随通配符模式来一次预打包所有深度导入。这将避免在每次使用新的深度导入时都不断地进行预打包。 提供反馈。例如

js
export default 
defineConfig
({
optimizeDeps
: {
include
: ['my-lib/components/**/*.vue'],
}, })

optimizeDeps.esbuildOptions

  • 类型: Omit<EsbuildBuildOptions, | 'bundle' | 'entryPoints' | 'external' | 'write' | 'watch' | 'outdir' | 'outfile' | 'outbase' | 'outExtension' | 'metafile'>

在依赖扫描和优化期间传递给 esbuild 的选项。

某些选项被省略,因为更改它们将与 Vite 的依赖优化不兼容。

  • external 也被省略,请使用 Vite 的 optimizeDeps.exclude 选项
  • plugins 与 Vite 的依赖插件合并

optimizeDeps.force

  • 类型: boolean

设置为 true 以强制依赖预打包,忽略之前缓存的优化依赖项。

optimizeDeps.holdUntilCrawlEnd

启用后,它将在冷启动时保留第一个优化的依赖项结果,直到所有静态导入都被遍历。这避免了在发现新依赖项并触发新公共块生成时需要进行全页面重新加载。如果扫描程序以及 include 中显式定义的所有依赖项都已找到,最好禁用此选项以让浏览器并行处理更多请求。

optimizeDeps.disabled

  • 已弃用
  • 实验性: 提供反馈
  • 类型: boolean | 'build' | 'dev'
  • 默认值: 'build'

此选项已弃用。从 Vite 5.1 开始,构建期间依赖项的预打包已移除。将 optimizeDeps.disabled 设置为 true'dev' 将禁用优化器,并将其配置为 false'build' 将在开发期间保持优化器启用。

要完全禁用优化器,请使用 optimizeDeps.noDiscovery: true 禁止自动发现依赖项,并将 optimizeDeps.include 保留为未定义或为空。

警告

构建时优化依赖项是一项实验性功能。尝试此策略的项目还使用 build.commonjsOptions: { include: [] } 移除 @rollup/plugin-commonjs。如果您这样做,则警告会指导您重新启用它以在捆绑时支持仅 CJS 的包。

optimizeDeps.needsInterop

  • 实验性
  • 类型: string[]

在导入这些依赖项时强制使用 ESM 互操作性。Vite 能够正确检测依赖项何时需要互操作性,因此通常不需要此选项。但是,依赖项的不同组合可能会导致其中一些依赖项以不同的方式进行预打包。将这些包添加到 needsInterop 可以通过避免全页面重新加载来加快冷启动速度。如果您的某个依赖项出现这种情况,您将收到警告,建议您将包名称添加到配置中的此数组中。

在 MIT 许可证下发布。 (ccee3d7c)