vite | 青训营

95 阅读1分钟

前端构建工具

解决的问题

兼容模块规范,转义高级语法,压缩treeshaking

image.png

vite

vite 概览

组成

  • 开发: 无需打包
  • 生产: 基于rollup

优势

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

无需打包源代码,天然按需加载

原生浏览器支持ESM

  • script 标签增加 type = "module" 属性
  • 使用ESM模块导入导出语句 image.png image.png

基于 esbuild 的编译性能优化

esbuild 是用 go 编写,突破了js的瓶颈(js 作为解释性语言,是单线程的)

具有打包,编译,压缩的功能

内置web构建能力

包含各种加载器

生产环境treeshaking

不将没有用到的代码打包

vite 整体架构

image.png

预打包

原因:

  • 避免过多的node_modules
  • 将commonjs 转换成ESM

原理:

  • 服务启动前扫描依赖包
  • 用esbuild预打包
  • 将import 路径改为预构建产物的路径

image.png

单文件编译

速度提升至10-100X

需要注意:

  • 不支持类型检查,因此在生产环境构建时要调用一次tsc
  • 不支持语法降级到ES5,只能降到ES6

插件机制

使用插件的原因:

  • 解耦:将两大功能 构建 和 dev server 分开
  • 易于扩展

过程:

  • 开发阶段:用插件模拟rollup
  • 生产阶段:直接使用rollup

重要插件

image.png

插件开发文档

json加载插件 esbuild接入插件 官方react插件

海量社区插件

vite进阶学习

  • esbuild rollup 官方文档
  • babel

编译原理: 解析为抽象语法树,转化后,再生成代码 image.png