1. Vite概要介绍
Vite是什么?
定位: 新一代前端构架工具
两大组成部分:
- No-bundle开发服务,源文件无需打包
- 生产环境基于Rollup的Bundler
核心特征:
- 高性能,dev启动速度和热更新速度非常快
- 简单易用,开发者体验好
传统构架工具遇到的问题
- 缓慢的启动=>项目编译等待成本高
- 缓慢的热更新=>修改代码后不能实时更新
瓶颈
- bundle带来的性能开销
- JS语言的性能瓶颈
2. Vite上手实战
2.1 Vite项目初始化
- 提前安装 pnpm (需管理员权限)
npm i -g pnpm
- 初始化命令
pnpm create vite
- 安装依赖
pnpm install
- 项目启动
npm run dev
2.2 使用Sass/Scss & Css Modules
- 安装SASS
pnpm i sass -D
-
目录结构
-
index.moudle.scss
.header {
color: green;
}
- index.tsx
import React from 'react';
import styles from './index.module.scss';
export function Header(){
return <div className={styles.header}>Header</div>
}
- 效果:页面Header文字表现为绿色
2.3 使用静态资源
- 用法:比如图片直接引入在需要的地方加上即可
2.4 使用HMR
无需额外配置自动开启
3 Vite整体架构
3.1 关键技术:依赖预打包
为什么要进行预打包?
- 避免node_moudles过多的文件请求
- 将CommonJs格式转换为ESM格式
实现原理:
- 服务器启动前扫描代码中用到的依赖
- 用Esbuild对依赖代码进行滚预打包
- 改写import语句,指定依赖为预构建产物路径
//改写前 import React from "react";
//改写后 import React from '/node_nodules/.vite/react.js'
3.2 关键技术:单文件编译
用Esbuild编译TS/JSX
优势: 编译速度提升10-100x
局限性:
- 不支持类型检查
- 不支持语法降级为
ES5
3.3 关键技术:代码压缩
Esbuild作为默认压缩工具,替换传统的Terser、Uglify.js等压缩工具
3.4 关键技术:插件机制
开发阶段:使用Rollup插件机制
生产环境:直接使用Rollup
3.5 Vite插件开发
-
服务启动阶段
configconfigResolvedoptionsconfigureServerbuildStart
-
请求相应阶段
transformIndexHtmlresolveId => load => transform
-
热更新阶段:
handleHotUpdate -
服务关闭阶段
-
buildEnd -
closeBundle
-