Vite 的开发环境采用按需编译和原生 ES 模块驱动的架构,与传统打包工具(如 Webpack)有本质区别。以下是其编译流程及对不同文件类型的处理方式:
一、Vite 开发环境核心原理
启动服务器: Vite 启动时不进行全量编译,而是创建一个 HTTP 服务器,监听文件变化。
浏览器优先原则: 浏览器直接通过 ES 模块的
import语句请求文件(如import './main.ts'),Vite 拦截这些请求并实时编译。按需编译: 只有当浏览器请求某个模块时,Vite 才会对其进行编译(如 TS 转 JS、Less 转 CSS),并返回处理后的结果。
二、不同文件类型的处理流程
1. Less 文件处理
- 请求拦截:当浏览器请求
.less文件时,Vite 拦截该请求。 - 编译:使用
less编译器将 Less 转换为 CSS。 - 注入:将 CSS 通过 JavaScript 动态注入到页面的
<style>标签中(支持 HMR 热更新)。
2. TS 文件处理
- 请求拦截:拦截
.ts文件请求。 - 编译:使用
esbuild(速度极快)将 TS 转换为 JS,仅进行语法转换(不做类型检查)。 - 类型检查:类型检查由独立进程(如 VSCode 插件或
tsc --watch)完成,不阻塞开发服务器。