依赖优化选项
- 相关: 依赖预打包
optimizeDeps.entries
- 类型:
string | string[]
默认情况下,Vite 会遍历所有 .html
文件以检测需要预打包的依赖项(忽略 node_modules
、build.outDir
、__tests__
和 coverage
)。如果指定了 build.rollupOptions.input
,Vite 将改为遍历这些入口点。
如果以上两种情况都不符合您的需求,您可以使用此选项指定自定义入口点 - 该值应为相对于 Vite 项目根目录的 fast-glob 模式 或模式数组。这将覆盖默认的入口点推断。默认情况下,当显式定义 optimizeDeps.entries
时,只会忽略 node_modules
和 build.outDir
文件夹。如果需要忽略其他文件夹,可以在条目列表中使用忽略模式,以初始 !
标记。如果您不想忽略 node_modules
和 build.outDir
,您可以使用文字字符串路径(没有 fast-glob 模式)来指定。
optimizeDeps.exclude
- 类型:
string[]
要从预打包中排除的依赖项。
CommonJS
CommonJS 依赖项不应从优化中排除。如果 ESM 依赖项从优化中排除,但具有嵌套的 CommonJS 依赖项,则应将 CommonJS 依赖项添加到 optimizeDeps.include
中。示例
export default defineConfig({
optimizeDeps: {
include: ['esm-dep > cjs-dep'],
},
})
optimizeDeps.include
- 类型:
string[]
默认情况下,不在 node_modules
中的链接包不会被预打包。使用此选项强制预打包链接包。
实验性:如果您使用的是具有许多深度导入的库,您也可以指定一个尾部通配符模式来一次性预打包所有深度导入。这将避免在使用新的深度导入时不断地预打包。 提供反馈。例如
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
- 实验性: 提供反馈
- 类型:
boolean
- 默认值:
true
启用后,它将在冷启动时将第一个优化后的依赖项结果保留到所有静态导入都已爬取为止。这避免了在发现新依赖项并触发新公共块的生成时需要进行全页重新加载。如果扫描程序找到所有依赖项以及在 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
中可以通过避免全页重新加载来加快冷启动速度。如果您的某个依赖项出现这种情况,您将收到一个警告,建议您将包名称添加到配置中的此数组中。