webpack和vite都是现代化web构建工具,但他们在构建速度、开发体验、构建结果等方面有所不同
1、构建速度:vite的速度一般快于webpack
(1)传统的构建工具例如webpack在开发过程中会对整个应用或者大部分应用进行打包,之后浏览器才能加载处理之后的包(好比webpack打包先从入口文件开始,递归的查找模块之间的依赖关系,生成一个依赖图,根据依赖图build每个文件,最终构建生成一个或者多个,然后浏览器加载处理好的这些包).那么对于大型应用而言,这个打包过程非常的耗时,因为每次页面代码更改后都有可能需要重新打包页面的大部分或者全部资源;
(2)对于Vite而言,在开发模式时启动不进行打包,也就意味着它不需要构建模块之间的依赖关系,不需要编辑,所以启动速度非常快…它利用现代浏览器支持ES Model的特性,只构建正在编辑的文件,而不是整个项目,相当于Vite只有在浏览器请求特定模块时才对该模块进行处理,对该模块的内容进行编译—用一句话总结就是按需动态的编译方式极大的缩短了启动时间;生产环境下使用Rollup来构建。
2、热更新—一般webpack 需要通过配置项开启热更新,Vite默认支持热更新和自动刷新,Vite中当一个模块内容被改变时,不像webpack那样需要重新编译打包该文件,然后再通过热更新机制将更新后的模块注入到应用程序中,Vite是直接向浏览器重新请求该模块即可;在底层实现上Vite是基于esBuild预构建的,那么esBuild是由go语言编写的,go语言天生支持并发,所以较快;
3、按需编译和预打包编译
(1)在使用Vite时,浏览器会发出针对每个ES模块的的HTTP请求;vite会拦截这些请求,并且只编译请求到的模块.相对于传统的工具在开发环境中编辑整个应用,按需编译会大大缩减等待时间;
(2)预打包编译,虽然Vite在开发过程中避免了应用程序的打包,但他通过预打包机制处理第三方的库,一般情况下预打包的结果会被缓存起来,以便在后续开发中快速加载;
4、配置复杂度:
(1)Webpack: Webpack的配置相对复杂,特别是在处理不同类型的资源和加载器时。
(2)Vite: Vite鼓励零配置,使得项目起步非常简单,但同时也支持自定义配置,使其适用于复杂项目。
5、插件生态:
(1)Webpack: Webpack拥有庞大的插件生态系统,适用于各种不同的需求。
(2)Vite: Vite也有相当数量的插件,但相对较小,因为它的开发模式和构建方式减少了对一些传统插件的需求。
(6)编译方式:
(1)Webpack: Webpack使用了多种加载器和插件来处理不同类型的资源,如JavaScript、CSS、图片等。
(2)Vite: Vite利用ES模块原生支持,使用原生浏览器导入来处理模块,不需要大规模的编译和打包。
(7)应用场景:
(1)Webpack: 适用于复杂的大型项目,特别是需要大量自定义配置和复杂构建管道的项目。
(2)Vite: 更适用于小到中型项目,或者需要快速开发原型和小型应用的场景。