Vite 知识体系 | 青训营笔记

87 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第13天

本节笔记的主要内容是围绕前端构建工具Vite展开讨论三大问题——是什么?为什么?怎么用?以及简单介绍Vite的整体架构和进阶之路

为什么要用 Vite

其实原因和上一节Webpack很类似,前端的核心要素是资源——JS、TS、CSS、LESS、PNG... 要在前端工程中导入这些资源,会产生以下几方面问题

  • 模块化——ESM、CommomJS、UMD
  • 资源编译——高级语法的编译,例如JSX等语言,浏览器本身是不能直接识别的,而需要我们进一步编译后再放到浏览器中
  • 产物质量——代码体积、代码质量是需要进一步优化的,以及产物的语法兼容性,高级语法项目放到低级浏览器里是无法运行的。
  • 开发效率——在改动代码后立刻看到效果,热更新,如果缺少构建工具很难实现
image.png

Vite概览

响应迅速 开箱即用

定位:新一代前端构建工具 两大组成部分

  • No-bundle 开发服务,源文件无需打包
  • 生产环境基于 Rollup 的 Bundler 核心特征
  • 高性能,dev 启动速度和热更新速度非常快!
  • 简单易用,开发者体验好

下图是 Webpack 和 Vite 的对比,可见,Vite 的启动速度和热更新速度是大大缩短的

image.png

开发体验问题日渐显露

image.png

两大行业趋势:

全球浏览器对原生ESM的普遍支持(目前占比92%以上)

两大要素:

  1. scrtpt标签增加 type="module" 属性
  2. 使用ESM模块导入导出语法

Vite Dev Server

Vite基于原生ESM的开发服务优势开发了Vite Dev Server,对浏览器的请求进行接收,编译文件内容,再将内容返回给浏览器

优势

  • 无需打包项目源代码,去除了Budler的开销
  • 天然的按需加载
  • 可以利用文件级的浏览器缓存

基于原生语言(Go/Rust)编写前端编译工具链(如 Go 语言编写的Esbuild、Rust编写的SWC)

image.png

内置的Web构建能力

image.png

如何使用Vite

项目初始化

image.png
  • 使用Sass/Scss & CSS Modules
  • 使用静态资源
  • 使用HMR
  • 生产环境Tree Shaking
image.png

Vite整体架构

image.png

关键技术

依赖预打包

image.png

单文件编译

用Esbuild编译TS/JSX,可以将编译速度大大提升10-100倍,但是不支持类型检查和语法降级到ES5

代码压缩

Esbuild代码压缩性能良好

插件机制

Why? 抽离核心逻辑;易于拓展 image.png

Vite 进阶路线

深入双引擎

路线:先了解基本使用,动手尝试各种常用配置,然后学习其插件开发

Esbuild官方文档

Rollup官方文档

Vite插件开发

路线:先看文档,过一遍插件钩子功能,然后多学习其他插件的实现,掌握套路。

通过钩子函数,在不同的构建阶段插入自定义逻辑

image.png

其他

  • 代码分割(拆包)
  • JS编译工具(Bable)
  • 语法安全降级
  • 服务端渲染(SSR)
  • 深入了解底层标准
  • Vite社区生态
image.png

小结

通过本节学习可以体会到Vite的响应迅速,开箱即用的优势是很明显的,但是身为小白的我还是没办法深刻体会到Vite的用法与优势所在,还是要动手实践一下比较好。最近在发愁大作业,忙完再研究。