乐闻世界logo
搜索文章和话题

Vite 的依赖预构建(Dependency Pre-bundling)有什么作用?

2月19日 19:13

Vite 的依赖预构建(Dependency Pre-bundling)是一个重要的优化机制,其作用和原理如下:

为什么需要预构建

  1. CommonJS 和 UMD 兼容性:许多 npm 包使用 CommonJS 或 UMD 格式,而 Vite 开发环境使用原生 ESM。预构建将这些模块转换为 ESM 格式,确保浏览器能够直接加载。

  2. 性能优化:直接加载大量细粒度的 ESM 模块会导致数百个 HTTP 请求,严重影响性能。预构建将多个模块打包成单个 chunk,减少请求数量。

  3. ESM 转换:即使某些包已经是 ESM 格式,也可能包含不支持浏览器直接加载的特性(如裸模块导入),需要转换。

预构建的工作流程

  1. 依赖扫描:Vite 扫描项目源代码,识别所有导入的依赖包。

  2. 使用 esbuild 构建:Vite 使用 esbuild 将依赖打包到 node_modules/.vite 目录中,生成 ESM 格式的模块。

  3. 缓存机制:预构建结果会被缓存,后续启动时如果依赖未变化,直接使用缓存,大幅提升启动速度。

  4. 源码映射:生成 source map,确保调试时能定位到原始源码。

配置选项

  • optimizeDeps.include:强制包含某些依赖进行预构建
  • optimizeDeps.exclude:排除某些依赖不进行预构建
  • optimizeDeps.esbuildOptions:自定义 esbuild 配置

自动重新构建: 当以下情况发生时,Vite 会自动重新预构建:

  • package.json 中的依赖发生变化
  • vite.config.js 配置文件变化
  • 手动删除 node_modules/.vite 缓存目录

性能优势: 通过依赖预构建,Vite 能够在保持快速开发体验的同时,解决 ESM 生态的兼容性和性能问题,这是 Vite 相比其他构建工具的核心优势之一。

标签:Vite