vite原理

Vite 是一个由 Evan You(Vue 的作者)开发的前端构建工具,它的核心目标是 更快的开发启动速度和更高效的构建过程。理解 Vite 的原理,可以从两个核心阶段来看:


一、开发环境原理(Dev 模式)

🎯 核心理念:原生 ESM + 按需加载

Vite 利用现代浏览器对 ESM(ES Modules) 的支持,实现了即点即编译,无需像 Webpack 那样打包整个项目。

开发模式工作流程:

复制代码
浏览器 <--(ESM)--> Vite Dev Server <--(transform)--> 源码
  1. 原生 ESM:

    • 浏览器通过 <script type="module"> 加载模块。

    • Vite 不打包,而是通过 Dev Server 将模块按需返回。

  2. 模块按需编译(On-demand transformation):

    • 源码中的 .ts, .vue, .jsx 文件会在请求时使用插件(如 esbuild、babel、vue 插件)即时转译为浏览器可识别的 JS。

    • 改了哪个模块,就只重新编译该模块。

  3. 依赖预构建(Pre-bundling):

    • Vite 在启动时用 esbuild 对第三方依赖(如 lodash, react)进行一次构建,转为 ESM 格式,加快后续加载。

    • 缓存到 node_modules/.vite

  4. 热更新(HMR):

    • Vite 精准追踪模块依赖树,局部更新变动模块及其影响区域,速度极快。

二、生产环境原理(Build 模式)

🎯 核心理念:Rollup 打包优化 + Tree-shaking

Vite 的生产构建不是用 esbuild,而是用更成熟的 Rollup 来打包优化。

构建流程:

复制代码
源码 --> 插件链处理(vite plugin)--> Rollup 打包优化 --> 输出静态资源
  1. 统一打包为多个 chunk(模块拆分)

  2. 支持 Tree Shaking(消除未使用代码)

  3. 资源压缩(JS/TS/CSS 图片等)

  4. 插件机制:兼容 Rollup 插件,同时支持 Vite 自定义插件


三、Vite 的优势总结

特性 描述
🚀 快速启动 不打包,冷启动极快
⚡ 极速热更新 模块级热更新,响应快
📦 预构建依赖 用 esbuild 构建依赖,比 babel/ts 快 10~100 倍
🔧 插件系统 兼容 Rollup 插件生态,自定义 Vite 插件也简单
🌍 ESM 原生支持 基于浏览器模块加载,不依赖打包器
📤 生产优化构建 使用 Rollup,生成体积优化的产物

四、技术选型对比

工具 开发模式 构建模式 特点
Webpack 先打包后运行 Webpack 本身打包 功能全、插件多,但开发慢
Vite 即时加载 + esbuild Rollup 快速启动、构建更快
Parcel 零配置打包器 自带打包器 简单入门,但灵活性不如 Vite

相关推荐
jin12332238 分钟前
基于React Native鸿蒙跨平台地址管理是许多电商、外卖、物流等应用的重要功能模块,实现了地址的添加、编辑、删除和设置默认等功能
javascript·react native·react.js·ecmascript·harmonyos
2501_920931701 小时前
React Native鸿蒙跨平台医疗健康类的血压记录,包括收缩压、舒张压、心率、日期、时间、备注和状态
javascript·react native·react.js·ecmascript·harmonyos
落霞的思绪1 小时前
配置React和React-dom为CDN引入
前端·react.js·前端框架
Hacker_Z&Q1 小时前
CSS 笔记2 (属性)
前端·css·笔记
Anastasiozzzz1 小时前
LeetCode Hot100 295. 数据流的中位数 MedianFinder
java·服务器·前端
橙露2 小时前
React Hooks 深度解析:从基础使用到自定义 Hooks 的封装技巧
javascript·react.js·ecmascript
Exquisite.2 小时前
Nginx
服务器·前端·nginx
2501_920931702 小时前
React Native鸿蒙跨平台使用useState管理健康记录和过滤状态,支持多种健康数据类型(血压、体重等)并实现按类型过滤功能
javascript·react native·react.js·ecmascript·harmonyos
打小就很皮...2 小时前
dnd-kit 实现表格拖拽排序
前端·react.js·表格拖拽·dnd-kit
Ulyanov2 小时前
从静态到沉浸:打造惊艳的Web技术发展历程3D时间轴
前端·javascript·html5·gui开发