Skip to content

Vite

一个模块化打包工具,开发环境更加快速。 把握时机:浏览器开始原生支持 ES 模块,越来越多 JavaScript 工具使用编译型语言编写。

原理

vite依赖浏览器的原生模块化功能,在声明一个script标签类型为module时,浏览器会对内部的import引用发起http请求获取资源,vite拦截了这些请求并在后端处理后返回给浏览器

为什么选vite

常规打包工具面临的现实问题是

  • 面对越来越多的模块,打包效率越来越低
  • 提供服务时需要完整的抓取和构建应用,效率很低
  • 热替换的速度也会随着应用规模增加下降,因为即时一个模块更新,打包的仍是一个文件的话,还是会重新构建。

vite能解决什么问题

  • 预构建依赖效率高:Vite 将会使用 esbuild 预构建依赖。Esbuild 使用 Go 编写,并且比以 JavaScript 编写的打包器预构建依赖快 10-100 倍。 预构建依赖:

    1. commandJs、umd模块转化为ESM
    2. 将有许多内部模块的 ESM 依赖关系转换为单个模块,提高页面加载性能
  • 热更新速度快:HMR 是在原生 ESM 上执行的,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效(大多数时候只需要模块本身)

为什么生产环境仍需要打包

  • 未打包的 ESM 仍然效率低下

为什么不用esbuild打包

  • 一些针对构建 应用 的重要功能仍然还在持续开发中