当前位置: 首页 > ai >正文

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 对第三方依赖(如 lodashreact)进行一次构建,转为 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


http://www.xdnf.cn/news/13411.html

相关文章:

  • 智慧航空 | 飞机引擎设备拆解可视化
  • pysnmp模块中 GET、SET、WALK操作详细分步解析
  • 【Java】【力扣】121.买卖股票的最佳时机
  • 分布式I/O在食品包装行业中的应用
  • 239. 滑动窗口的最大值
  • [服务器] Amazon Lightsail SSH连接黑屏的常见原因及解决方案
  • 使用Kubectl命令操作集群
  • AIStor 的模型上下文协议 (MCP) 服务器: 工作原理
  • TiDB 上线步骤是怎么样?怎么做到数据不丢失?怎么保证可靠性?
  • 网络安全之防病毒系统
  • Linux文件回收机制:安全删除文件不怕误删
  • 查看 Ubuntu 系统信息
  • 国债与企业债:稳健与高收益的债券选择
  • JSON 是什么?核心概念与语法解析
  • JavaScript解密里的ChaCha20 加密算法全解
  • MCP使用
  • Java多线程实现之线程池详解
  • 如何彻底删除Neo4j中的所有数据:完整指南
  • 数组——数组的遍历
  • 佰力博科技与您探讨铁电材料电滞回线测量法
  • SpringBoot使用oshi获取服务器相关信息
  • 【学习笔记】QUIC
  • 0611的
  • 【WebSocket】WebSocket 多功能集成冲突问题解决方案
  • Ubuntu 22.04: 使用chroot切换到Ubuntu18.04运行环境进行开发编译
  • 【IQA技术专题】图像质量评价IQA技术和应用综述(万字长文!!)
  • 一站式了解单例模式
  • uniapp uni.createAnimation为文件交换位置动画效果
  • 界面控件DevExpress WPF v24.2新版亮点:报表等组件功能升级
  • Kotlin的MutableList和ArrayList区别