Vite 还是 Webpack ?前端构建工具到底该如何选择!!

867 阅读4分钟

我们作为前端开发者,一定听过或了解过这两个框架构建工具,这两个工具都是用来构建Web应用程序的。但是它们到底有什么区别呢?接下来,就让我好好的和大伙唠唠。

Webpack

什么是Webpack

Webpack 作为一个老牌的前端构建工具,它是被广泛的应用在市面上,是基于打包器的构建工具,它可以打包 JavaScript 文件,CSS 文件和其他资源文件。Webpack 可以通过各种插件和加载器来扩展其功能。同一个入口文件的代码会打包成一个 Bundle 文件。Webpack 长期来的一个痛点是对于大规模应用的应用启动和热更新速度很慢。

image.png

当文件发生变动时,整个 JavaScript Bundle 文件会被 Webpack 重新构建,这也是为什么使用 Webpack 的大规模应用在应用启动和热更新时速度很慢的原因。这给进行大规模 JavaScript 应用的开发者造成了很差的开发体验。

Webpack 是如何工作的

Webpack 打包过程:

  • 从一个入口文件开始,基于代码文件中的所有 importexportrequire 构建依赖树;
  • 编译 JS/CSS 等模块;
  • 使用算法排序、重写、连接代码;
  • 优化。

开发环境的 Webpack:

  • 打包所有代码;
  • 启动 webpack-dev-server 托管打包好的代码;
  • 启动 websocket 处理热更新 HMR。

应用规模越大,启动和热更新代码越慢。及时启动了热更新,每次代码变更也需要重新生产 Bundle 文件。

Vite

什么是Vite

Vite 呢,作为一个新兴的构建工具,是由 Vue框架的作者————尤雨溪,也就是尤大大所创建出来的。它的特点是快速的启动时间和构建速度。这意味着你可以更快地进行开发和调试,并且构建时间更短,这对于大型项目来说非常重要。

Vite 是旨在提升开发者体验的下一代 JavaScript 构建工具,核心借助了浏览器的原生 ES Modules 和像 esbuild 这样的将代码编译成 native code 的打包工具。

Vite 主要有两方面组成:

  • 一个开发服务器,基于 ESM 提供丰富的内建能力,比如速度快到惊人的模块热更新(HMR);
  • 一套构建指令,使用 rollup 进行代码打包,且零配置即可输出用于生产环境的高度优化的静态代码。

Vite 的核心能力和 webpack + webpack-dev-server 相似,但是在开发者体验上有一些提升:

  • 无论项目大小有多大,启动应用都只需更少的时间;
  • 无论项目大小有多大,HMR(Hot Module Replacing)热更新都可以做到及时响应;
  • 按需编译;
  • 零配置,开箱即用;
  • Esbuild 能力带来的 Typescript/jsx 的原生支持。

大型的 JavaScript 项目在开发和生产环境有比较差的性能表现,往往是因为我们使用的构建工具没有充分做到并行处理、内存优化和缓存。

Vite 如何工作的

Vite 通过原生 ES Modules 托管源代码,本质上是让浏览器来接管部分打包器的工作。Vite 只会在浏览器请求发生时,按需将源码转成 ES Modules 格式返回给浏览器,由浏览器加载并执行 ES Modules 文件。

image.png

Webpack 与 Vite 的区别

那么它们两者之间到底有一个什么区别。

我将其划分了四大模块

  • 构建速度
  • 打包大小
  • 插件生态系统
  • 支持的文件类型

构建速度

Vite 是一个基于 ES modules 的构建工具,它利用浏览器原生的 ES module 支持来实现更快的构建速度。在开发模式下,Vite 会直接从源代码中导入模块,而不是像 Webpack 那样需要先构建整个应用程序再运行。这就使得Vite 的启动时间和热更新速度比 Webpack 要快得多。

打包大小

Webpack 会将所有的代码打包到一起,而 Vite 只会在需要时按需导入。这意味着 Vite 可以更好地利用浏览器的缓存来减少加载时间和带宽消耗,从而优化网页性能。

插件生态系统

Webpack 有一个非常庞大的插件生态系统,可以很容易地扩展其功能。虽然 Vite 也支持插件,但是它的插件数量远不及 Webpack。

支持的文件类型

Webpack 可以处理各种类型的文件,包括 JavaScript、CSS、图片、字体等。而 Vite 目前仅支持 JavaScript 和 CSS。

总结

综上所述,Vite 和 Webpack 都是构建 Web 应用的工具,它们在构建速度、打包大小、插件生态和支持的文件类型方面存在差异。如果你的应用程序规模较大,那么 Webpack 可能更适合你;如果你想要更快的开发和调试速度,那么 Vite 则是更好的选择。