依赖优化选项
- 相关: 依赖预构建
除非另有说明,否则本节中的选项仅适用于依赖优化器,该优化器仅在开发环境中使用。
optimizeDeps.entries
- 类型:
string | string[]
默认情况下,Vite 将抓取所有 .html
文件以检测需要预构建的依赖项(忽略 node_modules
、build.outDir
、__tests__
和 coverage
)。如果指定了 build.rollupOptions.input
,Vite 将改为抓取这些入口点。
如果这些都不符合你的需求,你可以使用此选项指定自定义条目 - 该值应该是一个 tinyglobby
模式 或模式数组,这些模式是相对于 Vite 项目根目录的。 这将覆盖默认条目推断。 只有 node_modules
和 build.outDir
文件夹在显式定义 optimizeDeps.entries
时才会被默认忽略。 如果需要忽略其他文件夹,你可以使用忽略模式作为条目列表的一部分,以初始 !
标记。 对于显式包含字符串 node_modules
的模式,node_modules
将不会被忽略。
optimizeDeps.exclude
- 类型:
string[]
要从预构建中排除的依赖项。
CommonJS
CommonJS 依赖项不应从优化中排除。如果一个 ESM 依赖项从优化中排除,但有一个嵌套的 CommonJS 依赖项,则应该将 CommonJS 依赖项添加到 optimizeDeps.include
。示例
export default defineConfig({
optimizeDeps: {
include: ['esm-dep > cjs-dep'],
},
})
optimizeDeps.include
- 类型:
string[]
默认情况下,不在 node_modules
中的链接包不会被预构建。 使用此选项强制预构建链接包。
实验性: 如果你使用的库有很多深度导入,你也可以指定一个尾随 glob 模式来一次性预构建所有深度导入。 这将避免在每次使用新的深度导入时不断进行预构建。 提供反馈。 例如
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 的 dep 插件合并
optimizeDeps.force
- 类型:
boolean
设置为 true
以强制进行依赖项预构建,忽略先前缓存的优化依赖项。
optimizeDeps.noDiscovery
- 类型:
boolean
- 默认值:
false
设置为 true
时,将禁用自动依赖项发现,并且只会优化 optimizeDeps.include
中列出的依赖项。 仅 CJS 的依赖项在开发期间必须存在于 optimizeDeps.include
中。
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
可以通过避免重新加载整个页面来加快冷启动速度。 如果你的依赖项出现这种情况,你将收到一个警告,建议将包名称添加到配置中的此数组中。