跳转到内容

依赖优化选项

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

optimizeDeps.entries 非继承

  • 类型: string | string[]

默认情况下,Vite 会抓取所有的 .html 文件来检测需要预构建的依赖项(忽略 node_modulesbuild.outDir__tests__coverage)。如果指定了 build.rollupOptions.input,Vite 将转而抓取那些入口点。

如果以上都不符合你的需求,可以使用此选项指定自定义入口——该值应该是一个 tinyglobby 模式或相对于 Vite 项目根目录的模式数组。这会覆盖默认的入口推断。当显式定义了 optimizeDeps.entries 时,默认仅会忽略 node_modulesbuild.outDir 文件夹。如果需要忽略其他文件夹,可以在条目列表中使用以 ! 开头的忽略模式。对于明确包含 node_modules 字符串的模式,node_modules 不会被忽略。

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 中的链接包不会被预构建。使用此选项可强制预构建链接的包。

实验性: 如果你使用的库有许多深度导入,你也可以指定一个尾随 glob 模式来一次性预构建所有深度导入。这将避免每当使用新的深度导入时不断进行预构建。 提供反馈。例如

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

optimizeDeps.rolldownOptions 非继承

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

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

  • plugins 会与 Vite 的依赖插件合并

optimizeDeps.esbuildOptions 非继承

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

此选项在内部转换为 optimizeDeps.rolldownOptions。请改用 optimizeDeps.rolldownOptions

optimizeDeps.force 非继承

  • 类型: boolean

设置为 true 可强制依赖预构建,忽略之前缓存的优化依赖项。

optimizeDeps.noDiscovery 非继承

  • 类型: boolean
  • 默认值: false

当设置为 true 时,将禁用自动依赖发现,仅优化 optimizeDeps.include 中列出的依赖项。仅限 CJS 的依赖项在开发期间必须出现在 optimizeDeps.include 中。

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 可以通过避免整页重新加载来加快冷启动速度。如果你的某个依赖项遇到这种情况,你会收到警告,建议在配置中将包名添加到此数组中。