深入浅出 Vite
像 Webpack 或 CRA 这样的旧工具通过首先打包你的整个项目来工作。它们读取每个文件并将其合并为一个大型 JavaScript 文件。这对于小型项目是有效的。但对于拥有数千个模块的大型项目,它就会失效。大型包的构建需要几秒钟甚至几分钟。每当你保存一个文件时,工具都会重新构建包的大部分内容。
Vite 的工作方式不同。现代浏览器原生支持 ES modules。在开发过程中,Vite 不会打包你的代码。它仅在浏览器请求时,才将每个文件作为独立的模块进行提供。
想象一下自助餐厅。厨师在开门前会把每一道菜都做出来。如果你想做一个微小的改动,厨师必须重新制作大部分自助餐。你需要等待很长时间才能吃到食物。这就是 Webpack 的工作方式。
现在想象一下点菜式餐厅。餐厅立即开门。你点了一道菜,厨师只准备那一道菜。如果你稍后想要甜点,厨师只准备甜点。你不需要等待整份菜单都做好了。这就是 Vite 的工作方式。
Vite 针对两种不同的需求采用了两种不同的策略:
开发 (vite dev)
- 策略:直接提供原生 ESM 模块,无需打包。
- 速度:即时。它不依赖于项目大小。
- 原因:本地网络请求非常快。
生产 (vite build)
- 策略:使用 Rolldown 打包所有内容。
- 速度:取决于项目大小。
- 原因:对于真实用户来说,数百个独立文件会产生过多的 HTTP 请求。打包可以让最终的网站对他们来说运行得更快。
Vite 在你编写代码时提供速度,在上线发布时提供性能。