Vite 知识体系 | 青训营笔记

42 阅读2分钟

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

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

前端工程的痛点

模块化:ESM、CommonJS、UMD

资源编译:高级语法的编译

开发效率:热更新

前端构建工具的意义

模块化方案

提供模块加载方案

兼容不同模块规范

语法转译

高级语法转译

资源加载

产物质量

产物压缩

无用代码删除

语法降级

开发效率

热更新

Vite概要介绍

定位: 新一代前端构架工具

两大组成部分:

No-bundle开发服务

源文件无需打包

生产环境基于Rollup的Bundler

核心特征:

高性能,dev启动速度和热更新速度非常快

简单医易用,开发者体验好

传统构架工具遇到的问题

缓慢的启动=>项目编译等待成本告

缓慢的热更新=>修改代码后不能实时更新 瓶颈

bundle带来的性能开销

JS语言的性能瓶颈

Vite上手实战与架构解析

Vite项目初始化

项目初始化引入资源

使用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社区插件