Vite知识体系-介绍Vite | 青训营笔记

39 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

Vite知识体系-介绍Vite

为什么需要构建工具

前端项目由一些文件资源组成

  • 模块化在前端工程方面是一个问题
  • 资源编译:编译浏览器不认识的语言(TS、语法糖),即浏览器的标准赶不上前端开发者的脑洞
  • 产物质量:代码压缩是否需要压缩,是否将没有用到的内容剔除
  • 开发效率:需要热更新

前端构建工具来解决这些问题

  • 模块化方案:1、提供模块加载方法,2、兼容不同模块规范
  • 语法转义:1、高级语法转义,如Sass、TS,2、资源加载,如图片、字体、worker
  • 产物质量:产物压缩、无用代码剔除(Tree shaking)、语法降级
  • 开发效率:实现热更新

什么是Vite,为什么选择Vite

定位:新一代前端构建工具

两大组成部分:

1、No-boundle开发服务,源文件无需打包

2、生产环境基于Rollup(也是一个构建工具)的Bundler

核心特征:

1、高性能,dev启动速度和热更新速度非常快

2、简单易用,开发者体验好

传统构建工具的瓶颈:

1、传统构建工具需要有一个打包的过程,而bundle(打包)带来必要的性能消耗

2、JS语言的性能瓶颈

两大行业趋势: 1、全球浏览器对原生ESM的普遍支持

2、基于原生语言(Go、Rust)编写前端编译工具链;如Go编写的ESbuild、Rust编写的SWC(比bable快几十倍)

浏览器对原生ESM的支持

浏览器支持使用 <script type="moudle">从而使用ESM语法

<script type="moudle">
    import {foo} from './foo.js'
	console.log(foo)
</script>

即使用ESM模块导入导出语法

基于浏览器这个功能,Vite开发了一套Dev Server,其底层就是这种原理

vite的实现.png

浏览器最后拿到的是能够识别的JS内容

所以Vite本质就是Dev Server把浏览器的请求进行承接,进行编译,把浏览器能识别语言返回回去

优点

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

Vite又基于Esbuild的编译性能优化

其具备以下能力:

1、打包器Bundler——对标的是webpack的能力

2、编译器Transformer——对标Bable的能力

3、压缩器Minifier

内置的Web构建能力

vite内置能力.png

总结:

  • 相较于webpack,vite采用了不同的运行方式:
    • 开发时,并不对代码打包,而是直接采用ESM的方式来运行项目
    • 在项目部署时,再对项目进行打包