Vite知识体系 | 青训营笔记

77 阅读3分钟

Vite知识体系 | 青训营笔记

这是我参加【第五届青训营】笔记创作活动的第11天

01—浅谈构建工具

为什么需要构建工具

01-1—前端工程的痛点

前端工程由一系列的文件资源构成。这些资源可以是逻辑代码JS、TS、JSX;也可以是样式代码CSS、SCSS、LESS;或者一些静态资源PNG、JPEG、WEBP等一些图片格式。

随着更新迭代,诸多工程化问题越来越明显…

  • 没有统一的模块化规范;常用的ESM、CommonJS、UMD
  • 浏览器的标准赶不上前端开发者的劳动,资源编译存在问题;高级语法的编译
  • 产物的语法兼容性存在问题;代码体积,代码性能
  • 开发效率;热更新

image-20220811102041568.png

01-2—前端构建工具的意义

前端构建工具解决了上述问题:

image-20220811102153006.png

02—Vite概要介绍

Vite是什么?Why Vite?

02-1—Vite概览

image-20220811105108224.png

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

两大组成部分:

1.No-bundle开发服务,源文件无需打包;

2.生产环境基于Rollup的Bundler

核心特性:

1.高性能:dev启动速度和热更新速度非常快!

2.简单易用:开发者体验好。

02-2—业界案例

image-20220811105420677.png

02-3—当下问题

image-20220811105648009.png 传统的构建工具存在如下两个问题:

  • 缓慢的启动=>项目编译等待成本高;
  • 缓慢的热更新=>修改代码后不能实时更新。

开发体验问题日渐显露!

瓶颈在于:

  • bundle带来的性能开销;打包过程消耗性能。
  • JavaScript语言的性能瓶颈;js单线程语言,没有那么多性能优化手段。
02-4—两大行业趋势

image-20220811110054153.png

02-5—浏览器原生ESM支持

image-20220811110144857.png

02-6—基于原生ESM的开发服务优势

image-20220811110234405.png

02-7—基于Esbuild的编译性能优化

image-20220811110314949.png

02-8—内置的Web构建能力

image-20220811110354211.png

image-20220811110411323.png

那么,我们如何使用Vite呢?

03—Vite上手实战

03-1—项目初始化

image-20220811111037407.png

03-2—使用Sass/Sacc & CSS Modules

image-20220811111138395.png

03-3—使用Scss & CSS Modules

image-20220811111306090.png

03-4—使用静态资源

image-20220811111340710.png

03-5—使用HMR

image-20220811111555384.png

image-20220811111641662.png

Vite的直观印象:响应迅速;开箱即用。

04—Vite整体架构

image-20220811111811378.png

04-1—关键技术:依赖预打包

image-20220811111917165.png

为什么要进行预打包?

  • 避免node_modules过多的文件请求;
  • 将ComminJS格式转换为ESM格式。

实现原理:

  • 服务启动前扫描代码中用到的依赖;
  • 用Esbuild对依赖代码进行预打包;
  • 改写import语句,指定依赖为预构建产物路径。

04-2—关键技术:单文件编译

image-20220811112215080.png

优势:编译速度提升10-100X

局限性:

  • 不支持类型检查;
  • 不支持语法降级到ES5.

04-3—关键技术:代码压缩

image-20220811112341284.png

04-4—关键技术:插件机制

image-20220811112412892.png

05—Vite进阶路线

05-1—深入双引擎

image-20220811112500062.png

05-2—Vite插件开发

05-2-1—为什么需要插件机制?
  • 抽离核心逻辑;
  • 易于拓展。

image-20220811112608702.png

05-2-2—插件示例

image-20220811112629276.png

05-2-3—参考资料

image-20220811112730622.png

05-3—代码分割(拆包)

image-20220811113853903.png 问题:无法进行并发请求;缓存复用率低。

05-4—JS编译工具(Babel)

image-20220811114014505.png 出现原因:

  • JavaScript语法标准繁多,浏览器支持程度不一样;
  • 开发者需要用到高级语法。

05-5—语法安全降级

image-20220811114138317.png

image-20220811114151541.png

05-6—服务端渲染(SSR)

image-20220811114238862.png

05-7—深入了解底层标准

image-20220811114305709.png

05-8—Vite社区生态

image-20220811114337143.png