Vite 知识体系 | 青训营笔记

144 阅读2分钟

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

构建工具

为什么需要构建工具:

  • 模块化: 在ESM之前社区开发了各种JS模块化方式如CommonJS、UMD等
  • 资源编译: Less/Sass编译等。
  • 产物质量: tree shaking等
  • 开发效率:HMR等
  1. 在依赖增加项目量增大后打包需要全量编译,带来性能开销。
  2. JS本身的性能瓶颈。

ESM出现,无需全量打包,可以利用文件级别的缓存。

<script type="module" src="/xx/xx.js"></script>

基于Go、rust等开发的工具链,如esbuild, swc等。

vite概要

Vite: dev模式下采用no-bundle开发服务 production模式下采用roll-up打包

vite提供了开箱即用的能力 html plugin、css loader,tree shaking等,且与框架无关,提供了vue、react项目等初始化功能。

commonJS格式无法做到tree shaking,因为require可能依赖运行时的计算结果。

Vite整体架构

  • 开发环境: Native ESM based dev server。esbuild足够快,用于编译。
  • 生产环境:打包,减少http请求时间,rollup更为成熟灵活。
  • vite plugin

特性

依赖预打包:使用esbuild编译TS/JSX, 编译速度快,不支持类型检查不支持语法降级。 代码压缩:esbuild minify替换传统的uglify等。

css代码拆分:会将异步代码块中通过module加载的css提取至另一个文件,通过<link>在运行时导入。

Glob import:通过import.meta.glob同时引入多个模组。并且还支持在引入过程中使用类似正则表达式的方式进行模式匹配。

Dynamic import: 动态加载能力,const module = await import(./dir/${file}.js) 奇怪了,该怎么转义你?

部署至静态站点:vite官方提供了将打包出的文件部署至Github Pages、Gitlab Pages、Netlify等静态托管站点的脚本配置项。可以与CI/CD结合实现自动部署。

Vite进阶路线

  • esbuild、rollup两个底层编译工具
  • vite插件开发:抽离逻辑,易于拓展。通过hook在不同阶段插入自定义逻辑。
  • 代码分割:并发请求,提高缓存命中率。
  • SSR:优化首屏渲染和SEO优化。
  • 深度底层标准