Vite 知识体系 | 青训营笔记

120 阅读2分钟

Vite 知识体系 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天,学习了掘金视频课《前端入门——工具篇》第十一节课程 “Vite 基本概要” ,第十二节课程 “Vite 上手实战与架构解析” ,第十三节课程 “ Vite 进阶路线” ,以下为本次的学习笔记:

Vite 基本概要

前端为何要使用构建工具?

随着前端发展,涉及到的资源是越来越多,如何高效快速的进行资源管理问题避无可避,正是由于传统的资源管理方式所带来的一系列弊端,推荐了构建工具的诞生。

前端工程的痛点

  • 模块化:ESM、CommonJS、UMD
  • 资源编译:高级语法的编译
  • 产物质量:代码体积、代码性能
  • 开发效率:热更新

前端构建工具的意义

  • 模块化方案

    • 提供模块加载方案
    • 兼容不同模块规范
  • 语法转译

    • 高级语法转译
    • 资源加载
  • 产物质量

    • 产物压缩
    • 无用代码删除
    • 语法降级
  • 开发效率

    • 热更新

Vite概要介绍

  • 定位: 新一代前端构架工具
  • 两大组成部分:

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

    • 高性能,dev启动速度和热更新速度非常快
    • 简单医易用,开发者体验好
    • 传统构架工具遇到的问题
    • 缓慢的启动=>项目编译等待成本告
    • 缓慢的热更新=>修改代码后不能实时更新
  • 瓶颈

    • bundle带来的性能开销
    • JS语言的性能瓶颈

Vite上手实战与架构解析

Vite项目初始化

  • 项目初始化
npm i -g pnpm
pnpm create vite
pnpm install
npm run dev
复制代码
  • 引入资源
  • 使用HMR:无需额外配置,自动开启
  • 生产环境Tree Shaking

Vite整体架构

关键技术:依赖预打包

进行预打包的原因

避免node_moudles过多的文件请求

将COmmonJs格式转换为ESM格式

实现原理:

服务器启动前扫描代码中用到的依赖

用Esbuild对依赖代码进行滚预打包

改写import语句,指定依赖为预构建产物路径

//改写前 import React from "react"; //改写后 import React from '/node_nodules/.vite/react.js' 关键技术:单文件编译 用Esbuild编译TS/JSX

优势: 编译速度提升10-100x

  • 局限性

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

关键技术:代码压缩 Esbuild作为默认压缩工具,替换传统的Terser、Uglify.js等压缩工具

Vite进阶路线

  • 深入双引擎

    • Esbuild
    • Rollup
  • 插件机制

    • 抽离核心逻辑
    • 易于拓展
  • 了解Vite社区生态

    • Vite社区插件