问:webpack与vite区别
大家好,最近在面试的过程中与面试官讨论到打包工具的问题。聊到了这两个工具的区别。那么今天根据自己的一个学习,对这个问题进行一个总结,希望能对大家有所帮助。
打包工具是什么
我们最开始学习前端的时候,都是从html,js,css开始,后面又使用到了框架vue,react等,当我们去开发项目,除了框架还有包括less/Sass等预处理内容,而其中有些是浏览器不能识别的,需要编译成浏览器可以识别的语言。
(简单来说,咱们使用的框架之类浏览器不认识,浏览器只接受部分语言,需要有个工具把项目的内容变成浏览器可以接受的。webpack/vite就是这样的工具)
webpack与vite的区别
构造原理角度
webpack:又被称为模块打包工具。从入口文件开始,递归地构建一个依赖关系图(一个包含所有模块依赖关系的图),它会遍历整个项目的文件系统来查找所有相关的模块。
vite:利用浏览器原生的 ES 模块导入功能来支持。不需要像 Webpack 那样提前打包所有模块。当浏览器请求一个模块时,Vite 会根据请求的模块路径,即时地将对应的文件发送给浏览器。
热更新角度
webpack:热更新相对较慢。即使是项目中一个小模块修改了,也会重新构建整个模块图。
vite:热更新相对较快。当一个模块发生变化时,它会重新发送这个变化的模块给浏览器。
启动速度
webpack:启动相对比较慢,开始的时候需要一系列初始化工作,比如上面说的构建模块图。
vite:启动速度很快。它会启动一个简单的服务器,等待浏览器请求模块即可。
启动方式
webpack:先加载编译,后启动。
vite:先启动,再加载编译,启动快,首屏渲染速度相对较慢。
底层语言
webpack:js语言,毫秒级操作
vite:go语言,纳秒级操作,相比webpack会快很多
适用的场景
webpack:大型的、复杂的项目。webpack存在时间更长,有强大的配置和插件系统能够很好地处理这些复杂的情况,通过精细的配置来优化构建过程和输出结果
vite:适合于现代的前端项目,尤其是基于 Vue、React 等框架的项目。快速启动和热更新速度便于提高开发效率