Vite 知识体系 | 青训营

62 阅读2分钟

为什么需要构建工具?

  • 模块化方案:提高模块加载方案,兼容不同模块规范
  • 资源编译:高级语法转译(如 Sass 、TypeScript ),资源加载(图片、字体、worker)
  • 产物质量:产物压缩、无用代码删除、语法降级
  • 开发效率:热更新

Vite 是什么?

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

2.两大组成部分:

  • No-bundle 开发服务,源文件无需打包
  • 生产环境基于 Rollup 的 Bundler

3.核心特征

  • 高性能,dev 启动速度和热更新速度非常快
  • 简单易用,开发者体验好

4.瓶颈

  • bundle 带来的性能开销
  • JavaScript 语言的性能瓶属性

5.浏览器原生 ESM 支持

两大要素:
  1. script 标签增加 type="module"
  2. 使用 ESM 模块导入导出语法

6.基于原生 ESM 的开发服务优势

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

7.基于 ESbuild 的编译性能优化

ESbuild —— 基于 Golang 开发的前端工具,具备如下能力:
  1. 打包器 Bundler
  2. 编译器 Transformer
  3. 压缩器 minifier

Vite 上手使用

  1. 项目初始化
  2. 使用 Sass/Scss & CSS Modules
  3. 使用静态资源
  4. 使用HMR
  5. 生产环境 Tree Shaking

Vite 整体架构

1.依赖预打包

为什么要进行预打包?

  1. 避免 node_modules 过多的文件请求
  2. 将 CommonJS格式转换为 ESM 格式

实现原理:

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

2.单文件编译

优势

编译速度提升 10-100 x

局限性

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

3.代码压缩

Esbuild 作为默认压缩工具,替换传统的 Terser、Uglify.js 等压缩工具

4.插件机制

  • 开发阶段 -> 模拟 Rollup 插件机制
  • 生产环境 -> 直接使用 Rollup