Vite| 青训营笔记

101 阅读2分钟

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

在上一篇Webpack文章里,我们了解了前端项目为什么需要一个资源编译,资源打包工具。在这篇文章里,我会介绍另一个前端构建工具Vite。

一、Vite的优势

在使用Webpack管理前端项目时,当我们使用了很多模块和插件时,就会产生启动速度变慢,项目编译时间变长等问题。由于现代浏览器基本上都具有了原生ESM支持,所以在开发时使用Vite时,就可以无需打包代码文件,按需加载需要的文件,以及能够利用浏览器自带的缓存,来减伤调试代码时的等待时间。在生产环境使用Vite打包代码时,Vite使用了Golang开发的Esbuild,在编译打包前端项目时,速度提升明显。

二、使用Vite

安装Webpack

Vite使用pnpm安装,如果没有安装pnpm,可以使用npm i -g pnpm来安装pnpm。 使用pnpm安装并启动Vite:

pnpm create vite
pnpm install
npm run dev

启动完成后,即可在浏览器中访问对应地址来使用vite。

使用外部资源

在需要引入外部资源时,Vite避免了直接使用外部路径,而是通过使用 import语句来实现资源的导入和管理。例如:

import example from './example.jpg';
function App() {
    return {
        <img src={example}>
    };
}

HMR

在Vite中,HMR默认是自动开启的,无需手动配置。HMR可以在让你修改代码时,在浏览器中实时刷新修改结果,而且不会丢失当前浏览器页面的状态。

Tree Shaking

在Vite中,TreeShaking也是默认自动开启的。Tree Shaking会在项目打包时,自动去除没有使用过的代码、模块以及外部资源。

三、Vite整体架构

1.png Vite整体架构由Development、Production以及一些通用的Plugin Pipeline组成。下面我们就分别介绍一下各部分的关键技术。

Development

预打包

在开发环境中,Vite会对前端项目进行预打包。预打包可以避免node_modules过多的文件请求,以及将CommonJS格式转换为ESM格式。

Production

代码压缩

EsBuild作为Vite默认的压缩工具,来替代Terser,Uglify.js等传统代码压缩工具,并且拥有更好的新能。

Plugin Pipeline

单文件编译

使用EsBuild来编译单个TS/JSX文件。使用EsBuild可以将编译速度提升10-100x,但是EsBuild也有局限性。EsBuild不支持类型检查以及语法降级功能。所以我们在生产环境时一般会额外调用一次TSC。

插件机制

在开发环境时,Vite使用了一个Plugin Comtainer来模拟Rollup的插件机制,而在生产环境时,Vite会直接使用Rollup。