Webpack 、Vite
构建原理与核心差异

性能对比

为啥Vite使用Rollup打包,速度比Webpack快?
-
- 编译模式不同:Vite采用按需编译的方式,即直接启动开发服务器,然后按需编译文件,而Webpack需要先完整打包所有依赖和源代码,然后再启动开发服务器。这种方式使得Vite在开发环境下启动更快。
-
- 对浏览器的利用不同:Vite利用现代浏览器的 ES Modules** (ESM)特性,将开发环境下的模块文件直接作为浏览器执行文件,而Webpack则需要将代码打包成bundle。ESM模块允许在浏览器端直接导入导出模块,减少了编译和打包的步骤。
-
- 底层语言不同:Vite使用 esbuild** 进行预构建,esbuild是用 Go语言** 编写的,具有多线程并行处理的优势,而Webpack是基于 Node.js** 构建的,Node.js是单线程的。这种语言层面的差异使得esbuild的打包速度更快。
-
- 热更新处理不同:在Webpack中,模块更新需要重新编译整个项目,而Vite只需要让浏览器重新请求更新的模块,实现了更快的热更新。
-
- 缓存策略不同:Vite利用文件系统缓存和HTTP缓存机制,未改动的模块可以通过缓存复用,减少了重复编译的时间。
Vite利用ESM有哪些特性
- 静态化分析:模块依赖关系在代码执行前确定(通过import/export的静态语法)
Vite的原理
Vite中热更新原理