契机
- 浏览器支持es模块,之前打包工具打包后的js文件都是放在script标签上进行引入,不能直接使用es模块引入
- 以编译型语言编写的javascript工具的兴起
随着项目的日渐庞大,基于js的打包工具开始遇到性能瓶颈,文件开发服务器可能需要几分钟才能就绪,即使使用热模块更新(HMR)也需要几秒
开发服务器启动缓慢
当冷启动服务器时,传统的打包器必须抓取并构建整个应用程序
vite从依赖,源代码这两部分进行优化
vite
由两部分组成
- 开发服务器提供了比原生es模块更强大的功能扩展
- 一系列使用rollup打包你的代码的命令
vite提供了默认且合理的配置
通过插件,可以支持框架或与其他工具集成
功能
依赖解析和预捆绑
浏览器不支持裸模块,vite会进行处理
- 使用esbuild预捆绑依赖,会将其他模块转化为ESM
- 替换成有效的url进行import
TIP
依赖被强缓存,如果需要调试依赖,可以在devtool禁用缓存
HMR
Vite 在原生 ESM 上提供了HMR API。具有 HMR 功能的框架可以利用该 API 提供即时、精确的更新,而无需重新加载页面或清除应用程序状态。不需要手动设置这些,插件已经为你做好了。
TypeScript
仅限转译
转译可以基于每个文件进行,并且与 Vite 的按需编译模型完美契合。相比之下,类型检查需要了解整个模块图。将类型检查强行塞入 Vite 的转换管道将不可避免地损害 Vite 的速度优势。
vite使用esbuild进行转译,比tsc快20到30倍
TIP
使用类型导入和导出语法可以避免潜在问题
js
import type { T } from 'only/types'
export type { T }