这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
Vite是什么 & Why Vite?
定位:
新一代前端构建工具
两大组成部分:
- No-bundle开发服务,源文件无需打包
- 生产环境基于Rollup的 Bundler
核心特征
- 高性能,dev启动速度和热更新速度非常快
- 简单易用,开发者体验好
Vite使用
#提前安装pnpm
npm i -g pnpm
#初始化命令
pnpm create vite
#安装依赖
pnpm install
#启动项目
npm run dev
Vite架构
关键技术
1. 预打包
1.1 为什么要进行预打包
- 避免node_modules过多的文件请求
- 将CommonJS格式转换为 ESM格式
1.2 实现原理:
- 服务启动前扫描代码中用到的依赖
- 用Esbuild 对依赖代码进行预打包
- 改写import语句,指定依赖为预构建产物路径
2. 单文件编译
用Esbuild 编译TS/JSX
2.1 优势
编译速度提升10-100 x
2.1 局限性
- 不支持类型检查
- 不支持语法降级到ES5
3. 代码压缩
Esbuild 作为默认压缩工具,替换传统的Terser、 Uglify.js等压缩工具
4. 插件机制
- 开发阶段->模拟Rollup 插件机制
- 生产环境->直接使用 Rollup
4.1 为什么需要插件机制?
- 抽离核心逻辑
- 易于拓展
Vite进阶
1. 引入双引擎
esbuild + rollup.js
2. Vite插件开发
- 服务启动阶段: config -> configResolved -> options -> configureServer -> buildStart
- 请求响应阶段:
- transformIndexHtml
- resolveId -> load -> transfrom
- 热更新阶段: handleHotUpdate
- 服务关闭阶段: buildEnd -> closeBundle
3. 语法安全降级
如何在构建产物中避免这类问题?
- 上层解决方案: @vitejs/plugin-legacy
- 底层原理
- 借助Babel进行语法自动降级
- 提前注入Polyfill 实现. 如core-js、regenerator-runtime
4. Vite社区生态
官方提供插件:
- @vitejs/plugin-vue,提供Vue 3支持
- @vitejs/plugin-vue-jsx,提供 Vue 3JSX支持@vitejs/plugin-react,提供React支持
- @vitejs/plugin-legacy,提供低版本浏览器降级支持
- 海量社区插件:github.com/vitejs/awes…
众多框架内置
- Nuxt
- SvelteKit
- Astro
- Vitepress
写在结尾
vite是新生代的前端工程构建工具,具有强大的生命力,值得我们去深入学习,加油!