Vite知识体系 | 青训营笔记

64 阅读2分钟

image.png

这是我参与「第四届青训营 」笔记创作活动的第14天

前端工程的痛点

  • 模块化
  • 资源编译
  • 产物质量——>兼容性
  • 开发效率

——>前端构建工具

模块化方案

  • 提供模块加载方案
  • 兼容不同模块规范

语法转译

  • 高级语法转译 如Sass TS
  • 资源加载 如图片、字体、worker

产品质量

  • 产物压缩、无用代码删除、语法降级

开发效率

  • 热更新

vite的由来

定位

新一代前端构建工具

两大组成部分

  • no-bundle开发服务,源文件无需打包

  • 生产环境基于rollup的bundler

核心特征

  • 高性能 dev启动速度和热更新速度 ——>响应迅速

  • 简单易用,开发者体验好 ——> 开箱即用

当下问题

传统的构建工具

  • 缓慢的启动 ——> 项目编译等待成本高

  • 缓慢的热更新 ——> 修改代码后不能实时更新

原因 ——>

  • bundle带来的性能开销

  • JavasScript语言的性能瓶颈

两大行业趋势

浏览器原生ESM支持
<script type="module">  //要素一,增加的属性
	import {foo} from './fool.js'
  console.log(foo)
</script>
export const foo='foo'; //要素二,ESM模块导入导出语法
基于原生ESM的开发服务优势
  • 无需打包项目源代码
  • 天然的按需加载
  • 可以利用文件级的浏览器缓存

基于原生ESM的编译性能优化

Esbuild能力 —— 打包器 编译器 压缩器

内置的web构建能力

使用vite

项目初始化

使用Sass/Scss&CSS Modules

使用静态资源

除了常见的图片格式,vite耶内置了对于JSON、Worker、WASM资源的加载支持

无需额外配置,自动开启HMR、Tree Shaking

vite整体架构

依赖预打包

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

单文件编译 Esbuild

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

代码压缩

插件机制

  • 抽离核心逻辑
  • 易于拓展

开发阶段 ——>模拟rollup插件机制

生产环境 ——>直接使用rollup

vite进阶路线

深入双引擎

  • esbuild
  • rollup.js

插件钩子

插件示例

代码分割(拆包)

JS编译工具——Babel

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

语法安全降级

服务端渲染SSR

学习资料:

  1. 插件兼容性
  2. Esbuild官方文档
  3. Rollup官方文档
  4. babel官方站点
  5. babel插件手册