这是我参与「第四届青训营 」笔记创作活动的的第15天
👋 本文介绍:1. 为什么需要构建工具 2. Vite 是什么 3. Vite 上手使用 4. Vite 整体架构 5. Vite 进阶路线
为什么需要构建工具
前端工程的痛点
- 模块化:在前端JS没有统一的模块化规范
(三个主要的规范: ESM、CommonJS、UMD)
- 资源编译:高级语法(如:TS、JSX)浏览器是不认识的,所以需要编译成浏览器认识的形式
- 产物质量:减小代码体积(如:对没有用到的代码需要剔除掉)、优化代码性能
- 开发效率:热更新(想要改动代码就能立即看到效果)
😁而构建工具就能解决如上的问题
前端构建工具的意义
Vite 是什么
概览
定位:新一代前端构建工具
两大组成部分:
- No-bundle 开发服务,源文件无需打包
- 生产环境基于Rollup的Bundler B
核心特征:
- 高性能,dev启动速度和热更新速度非常快!
- 简单易用,开发者体验好
Dev Server
扩:浏览器原生ESM支持
两大要素:
1. script 标签增加 type=“module” 属性
2. 使用ESM模块导入导出语法
基于原生ESM的开发服务优势,Vite开发了一套Dev Server,基于ESM的服务,可以去除bundle的开销,按需编译。
优势:
- 无需打包项目源代码
- 天然的按需加载
- 可以利用文件级的浏览器缓存
性能优化
扩:Esbuild—基于Golang开发的前端工具,具备如下能力:
1. 打包器 Bundler
2. 编译器Transformer
3. 压缩器Minifier
基于Esbuild的编译性能优化 ,在Vite 被深度使用,提高性能
内置的Web构建能力
而 Vite 的默认集成度到达什么样的水平呢?
- 默认集成度很高
Vite 上手使用
项目初始化
使用Sass/Scss & CSS Modules
//src目录
src
|--App.css
|--App.tsx
|--components
|----Header
|------index.module.scss
|------index.tsx
|--favicon.svg
|--index.css
|--logo.svg
|--main.tsx
|--vite-env.d.ts
//安装Sass
pnpm i sass -D
//index.tsx
import styles from'./index.module.scss';
//使用CSS Modules模块化方案,防止cLassName命名冲突export function Header(){
return <p className={styles.header}>This is Header</p>
};
// index.module.scss
.header {
color: red;
}
//引入 Header 组件
import { Header } from "./components/Header";
function App(){
return(
<div>
<Header/>
</div>
);
}
export default App;
使用静态资源
/src目录
src
|--App.css
|--App.tsx
|--components
|----Header
|------index.module.scss
|------index.tsx
|--favicon.svg
|--index.css
|--logo.svg
|--main.tsx
|--vite-env.d.ts
//以svg图片为例
import { Header } from "./components/Header";
import logoUrl from './Logo. svg';
function App(){
return(
<div>
<Header/>
<img src={logoUrl} alt=""/>
</div>
);
}
export default App;
Vite 整体架构
1. 依赖预打包
为什么要进行预打包?
因为node_modules不可控,且node_modules产物里面格式可能是不规范的
- 避免node_modules过多的文件请求
- 将CommonJS格式转换为ESM格式
实现原理:
- 服务启动前扫描代码中用到的依赖
- 用Esbuild 对依赖代码进行预打包
- 改写import 语句,指定依赖为预构建产物路径
2. 单文件编译
用Esbuild 编译TS/JSX
优势:编译速度提升10-100×
局限性:
- 不支持类型检查
- 不支持语法降级到ES5
3. 代码压缩
默认使用 Esbuild,替代传统的 Terser、Uglify.js等压缩工具,使得性能得到极大提升
4. 插件机制
既可以用到dev阶段,也可以用到生产环境
Vite 进阶路线
深入双引擎
Vite底层非常依赖的两个引擎:esbuild 和 rollup.js
参考资料:(官方文档写得很详细)
- Esbuild官方文档: esbuild.docschina.org/getting-sta…
- Rollup官方文档 :rollupjs.org/guide/en/
推荐学习顺序:
- 官方文档都有基本使用的模块,先了解基本使用.动手尝试各项常用配置
- 然后学习其插件开发
Vite插件开发
参考资料:
Vite插件开发文档 :cn.vitejs.dev/guide/api-p…
复杂度较低的插件:json加载插件 github.com/vitejs/vite…
复杂度中等的插件:Esbuild接入插件
复杂度较高的插件:官方React插件
学习思路:
- 先看文档,过一遍插件钩子的功能
- 然后多学习其它插件的实现,掌握套路
JS编译工具(Babel)
通过阅读官方文档进行学习:
babel 官方站点:link.juejin.cn/?target=htt…
babel 插件手册: link.juejin.cn/?target=htt…
总结:简单了解了一下Vite的功能及用法,Vite作为前端构建工具,解决了前端的一些痛点,提高了项目的性能,对于Vite的学习,总的来说就是多看官方文档😁