Vite和Webpack比较

85 阅读2分钟

ViteWebpack都是作为前端的构建工具。比较:

1. 构建原理

  • Webpack:是一个静态模块打包器,通过对项目中的JS等文件进行分析,生成对应的静态资源,并通过插件和加载器实现各种功能,因此所有模块都需打包完成,再启动开发服务器,增加启动时间和构建时间;
  • Vite:是一种基于浏览器的ES模块解析的构建工具,通过在服务器端搭建开发环境,利用浏览器原生ES模块功能按需动态编译的方式加载文件,直接启动,实现快速开发体验。

2. 配置难度

  • Webpack:有大量的插件和加载器可以使用,可实现各种复杂的构建场景,也导致配置相对复杂;
  • Vite:插件和加载器相对较少,配置简单。

3. 对ES Modules的支持

ES Module:通过exportimport语句,允许在浏览器端导入和导出模块。默认情况下,浏览器加载模块会延迟加载,执行时机在文档解析之后,触发DOMContentLoaded事件前。

现代浏览器本身就支持ES Modules,并且可以通过在 script 标签中设置 type="module"来加载模块,会主动发起请求去获取所需文件。

  • Webpack:先打包再交给浏览器;
  • Vite:在开发环境下直接把模块文件直接丢给浏览器执行,减少了中间环节,提高了效率。

4. 底层语言的差异

  • Webpack:基于Node.js构建的(毫秒级别的);
  • Vite:基于esbuild进行预构建依赖(采用Go语言编写,纳秒级别的);因此,Vite在打包速度上相比Webpack10-100倍的提升;

预构建依赖:指在项目启动或构建之前,对项目中所需的依赖项进行预先处理和构建。当项目实际运行时,可以直接使用之二写已经预构建好的依赖,而无需再进行实时的编译或构建,从而提高了应用程序的运行速度和效率。

5. 热更新的处理

  • Webpack:当一个模块或者依赖的模块内容改变时,需要重新编译,更新;
  • Vite:当一个模块或者依赖改变时,只需要让浏览器重新请求该模块即可,减少热更新时间。

其它

  • Webpack:拥有庞大的社区支持和丰富的生态系统,有大量的插件、加载器和工具可供选择。
  • Vite:虽然近年来受到越来越多的关注,但相对于Webpack来说,其生态和社区支持仍然较小。