Vite知识体系 | 青训营笔记

40 阅读2分钟

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

为什么需要Vite体系(构建工具)

前端工程的痛点

  • 模块化
  • 资源编译
  • 产物质量
  • 开发效率

意义

  • 模块化方案
    • 加载模块方案
    • 兼容不同模块规范
  • 语法转义
    • 高级语法如Sass, TS
    • 资源加载,如图片,字体,worker
  • 产物质量
    • 产物压缩,死代码,语法降级
  • 开发效率
    • 热更新

概要介绍

新一代前端构建工具,高性能简单易用,由两大部分组成:

  • 源文件无需打包
  • 生产环境基于Rollup的Bundler

等价于webpack的一些东西:

  • webpack
  • webpack-dev-serveer
  • css-loader
  • style-loader
  • MiniCssExtractPlugin
  • ...

对常用web工具进行了封装,内置了一些默认的最佳实现。

上手实战

创建项目可以直接选择常见框架,开箱即用

静态资源可以直接使用

一些工具插件可以直接使用

热加载更快

整体架构

image.png

  • 依赖预打包
    • 提前扫描用到的依赖,避免过多请求node_modules
    • 使用Esbuild
    • 改写import
  • 单文件编译
    • 使用Esbuild编译TS/JSX
    • 速度提升十倍以上
    • 不支持类型检查
    • 不支持降级ES5
  • 代码压缩
    • Esbuild替代传统Terser, Uglify.js等,性能更高
  • 插件机制
    • 开发环境 -> 模拟Rollup插件机制
    • 生产环境 -> 直接使用Rollup

总结:好像就是基于Esbuild实现高性能

进阶路线

  • 底层依赖双引擎
    • esbuild
    • rollup.js
    • 先了解基本使用,尝试各种配置
    • 再学习插件开发
  • 为什么需要插件机制
    • 抽离核心逻辑,server抽出来,开放构建相关能力
    • 易于拓展
  • 插件开发
    • 通过给出的一些hook可以在不同构建阶段插入逻辑
    • 阿巴阿巴……
  • 代码分割(拆包)
    • 无法进行并发请求
    • 缓存复用率低
  • Babel
    • 开发者要用高级语法
    • js标准多,支持程度不同
  • 语法安全降级
    • 上层方案:@vitejs/plugin-legacy
    • 借助babel,提前注入Polyfill
  • SSR
    • 似乎不用多说了
  • 深入了解底层标准
    • CJS
    • ESM
    • HTTP2.0