Skip to content

契机

  1. 浏览器支持es模块,之前打包工具打包后的js文件都是放在script标签上进行引入,不能直接使用es模块引入
  2. 以编译型语言编写的javascript工具的兴起

随着项目的日渐庞大,基于js的打包工具开始遇到性能瓶颈,文件开发服务器可能需要几分钟才能就绪,即使使用热模块更新(HMR)也需要几秒

开发服务器启动缓慢

当冷启动服务器时,传统的打包器必须抓取并构建整个应用程序

vite从依赖,源代码这两部分进行优化

vite

由两部分组成

  1. 开发服务器提供了比原生es模块更强大的功能扩展
  2. 一系列使用rollup打包你的代码的命令

vite提供了默认且合理的配置

通过插件,可以支持框架或与其他工具集成

功能

依赖解析和预捆绑

浏览器不支持裸模块,vite会进行处理

  1. 使用esbuild预捆绑依赖,会将其他模块转化为ESM
  2. 替换成有效的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 }