🚀 Vite 打包原理详解 + Webpack 对比

👋 本文适合:Vite 使用者、Vue/React 工程师、希望搞清楚打包流程及与 Webpack 区别的开发者
🌐 技术背景:Vite 采用 ES Modules + 原生浏览器能力驱动开发体验,Webpack 则是传统的打包一体化工具


🧠 一、总览:Vite 与 Webpack 的本质区别

维度ViteWebpack
启动速度极速(基于原生 ESM)慢(需整体构建)
模块解析浏览器原生模块解析自定义构建流程
热更新(HMR)基于 ESM 精准模块热更新依赖模块图分析,全量或半量更新
构建机制开发与构建分离构建与开发共用一套流程
构建工具使用 Rollup 打包生产环境使用自定义打包器
插件机制Rollup 插件体系 + Vite 插件扩展Webpack 自有插件机制
使用门槛配置少、零构建即用配置繁琐

⚙️ 二、Vite 打包原理解析

1️⃣ 开发阶段:基于 ESM 的按需加载

✅ 模块按需加载
  • 采用原生 <script type="module"> 加载模块
  • 浏览器遇到 import 会自动发送 HTTP 请求获取模块
  • 无需打包,启动极快!
✅ Dev Server 解析处理流程:
  1. 拦截请求:Vite 使用 koa 拦截浏览器请求

  2. 路径解析:如 /src/App.vue 转为实际文件

  3. 处理模块

    • .ts/.jsx/.vue:调用 esbuild@vitejs/plugin-vue 转为 JS
    • .css:注入到页面 <style>
    • 第三方依赖:Vite 预构建为 ESM,避免深层依赖嵌套加载
✅ HMR 热更新机制
  • 文件变动后,精确定位影响模块,推送更新事件
  • 利用浏览器原生模块热替换:无需刷新页面,全局状态保留

2️⃣ 构建阶段:基于 Rollup 打包优化

🔧 构建流程概览
vite build →读取配置 →调用 Rollup →构建模块图 →Tree Shaking →生成 Chunk →输出静态资源
🔍 特点:
  • Tree Shaking:移除无用代码
  • Code Splitting:自动分割 vendor、common chunk
  • CSS 分离:支持提取 CSS,压缩,按需注入
  • 静态资源处理:图片、字体自动转为 base64 或复制输出

🔬 三、Vite vs Webpack 原理对比分析

核心对比ViteWebpack
开发模式原生 ESM,按需加载构建内存模块图,全量加载
编译工具esbuild(开发)+ rollup(构建)自定义 loader + plugin 系统
性能瓶颈构建阶段依赖 Rollup 的性能启动与更新较慢,体积更大
插件生态使用 Rollup 插件 + Vite 插件自有 plugin 系统,成熟但繁琐
动态导入原生支持支持但需打包拆分配置
SSR 构建支持 vite-ssr、vite-plugin-ssr需 webpack + vue-server-renderer 等
多页面支持内建支持(可配置多个 entry)需使用插件/配置较复杂

🔧 四、关键依赖与内部模块(Vite)

模块功能
esbuild极速 TypeScript、JSX 编译器(Go 编写)
rollup生产环境打包引擎
koaDev Server 基于它封装
@vitejs/plugin-vue.vue 文件支持
vite-plugin-html自定义 HTML 模板渲染
vite-plugin-legacy支持旧浏览器

🧪 五、项目构建示意图(Vite)

开发模式┌────────────┐│ index.html│└────┬───────┘↓浏览器原生加载 → 触发 import↓Dev Server 处理(koa)↓esbuild 转换模块(如 .ts/.vue)↓返回响应(HTTP 模块)
构建模式(vite build)┌────────────┐│ vite.config.ts │└────┬──────────┘↓使用 Rollup 构建入口↓读取依赖并 Tree Shake↓打包 chunk → 输出到 /dist

🧭 六、适用场景总结

适用场景ViteWebpack
中大型 Vue/React 项目✅ 推荐使用 Vite✅ 可继续使用 Webpack
快速原型 / 新项目✅ 极速开发体验❌ 配置繁琐
支持低端浏览器⚠️ 需配置 legacy 插件✅ 内建兼容方案更成熟
高度自定义打包流程⚠️ 插件生态还在完善✅ 插件机制完善
微前端架构✅ 与 module federation 配合也可行✅ 更成熟支持

📎 七、结语

🔚 Vite 是未来前端构建的趋势之一,它的理念是“利用现代浏览器原生能力,以更少的配置、更快的响应、打包更精简”为目标。如果你正在构建一个现代 Web 应用,Vite 会是更轻、更快、更优的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86827.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86827.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86827.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链RWA(Real World Assets)系统开发全栈技术架构与落地实践指南

一、技术架构设计&#xff1a;分层架构与模块协同 1. 核心区块链层 区块链选型策略&#xff1a; 公链&#xff1a;以太坊主网&#xff08;安全性高&#xff0c;DeFi生态完备&#xff09; Polygon CDK&#xff08;Layer2定制化合规链&#xff0c;Gas费低至$0.003&#xff09;…

GBDT:梯度提升决策树——集成学习中的预测利器

核心定位&#xff1a;一种通过串行集成弱学习器&#xff08;决策树&#xff09;、以梯度下降方式逐步逼近目标函数的机器学习算法&#xff0c;在结构化数据预测任务中表现出色。 本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖…

Redis持久化机制深度解析:RDB与AOF全面指南

摘要 本文深入剖析Redis的持久化机制&#xff0c;全面讲解RDB和AOF两种持久化方式的原理、配置与应用场景。通过详细的操作步骤和原理分析&#xff0c;您将掌握如何配置Redis持久化策略&#xff0c;确保数据安全性与性能平衡。文章包含思维导图概览、命令实操演示、核心原理图…

CentOS7升级openssh10.0p2和openssl3.5.0详细操作步骤

背景 近期漏洞扫描时&#xff0c;发现有很多关于openssh的相关高危漏洞&#xff0c;因此需要升级openssh的版本 升级步骤 由于openssh和openssl的版本是需要相匹配的&#xff0c;这次计划将openssh升级至10.0p2版本&#xff0c;将openssl升级至3.5.0版本&#xff0c;都是目前…

fishbot随身系统安装nvidia显卡驱动

小鱼的fishbot是已经配置好的ubuntu22.04,我听说在预先配置系统时需要勾选安装第三方图形化软件&#xff0c;不然直接安装会有进不去图形化界面的风险&#xff0c;若没有勾选&#xff0c;建议使用其他安装方法&#xff0c;比如禁用系统自带的驱动那套安装流程 1.打开设置->关…

学习昇腾开发的第十天--ffmpeg推拉流

1、FFmpeg推流 注意&#xff1a;在推流之前先运行rtsp-simple-server&#xff08;mediamtx&#xff09; ./mediamtx 1.1 UDP推流 ffmpeg -re -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream 1.2 TCP推流 ffmpeg -re -i input.mp4 -c copy -rtsp_transport t…

成为一名月薪 2 万的 web 安全工程师需要掌握哪些技能??

现在 web 安全工程师比较火&#xff0c;岗位比较稀缺&#xff0c;现在除了一些大公司对学历要求严格&#xff0c;其余公司看中的大部分是能力。 有个亲戚的儿子已经工作 2 年了……当初也是因为其他的行业要求比较高&#xff0c;所以才选择的 web 安全方向。 资料免费分享给你…

Pytorch8实现CNN卷积神经网络

CNN卷积神经网络 本章提供一个对CNN卷积网络的快速实现 全连接网络 VS 卷积网络 全连接神经网络之所以不太适合图像识别任务&#xff0c;主要有以下几个方面的问题&#xff1a; 参数数量太多 考虑一个输入10001000像素的图片(一百万像素&#xff0c;现在已经不能算大图了)&…

平地起高楼: 环境搭建

技术选型 本小册是采用纯前端的技术栈模拟实现小程序架构的系列文章&#xff0c;所以主要以前端技术栈为主&#xff0c;但是为了模拟一个App应用的效果&#xff0c;以及小程序包下载管理流程的实现&#xff0c;我们还是需要搭建一个基础的App应用。这里我们将选择 Tauri2.0 来…

langgraph学习2 - MCP编程

3中通信方式&#xff1a; 目前sse用的很少 3.开发mcp框架 主流框架2个&#xff1a; MCP skd 官方 Fast Mcp V2 &#xff0c;&#xff08;V1捐给MCP 官方&#xff09; 大模型如何识别用哪个tools&#xff0c; 以及如何使用tools&#xff1a;

CSS 与 JavaScript 加载优化

&#x1f4c4; CSS 与 JavaScript 加载优化指南&#xff1a;位置、阻塞与性能 让你的网页飞起来&#xff01;&#x1f680; 本文详细解析 CSS 和 JavaScript 标签的放置位置如何影响页面性能&#xff0c;涵盖阻塞原理、浏览器机制和最佳实践。掌握这些知识可显著提升用户体验…

WSL安装发行版上安装podman

WSL安装发行版上安装podman 1.WSL拉取发行版1.1 拉取2.2.修改系统拉取的镜像&#xff0c;可以加速软件包的更新 2.podman安装2.1.安装podman 容器工具2.2.配置podman的镜像仓库2.3.拉取n8n镜像并创建容器 本文在windows11上&#xff0c;使用WSL拉取并创建ubuntu24.04虚拟机&…

Excel 常用快捷键与对应 VBA 方法/属性清单

功能描述快捷键VBA 对应方法/属性 (核心逻辑)说明导航 (类似 End 方向键)这些是 End 键行为的直接对应向下到连续区域末尾Ctrl ↓ActiveCell.End(xlDown)从当前单元格向下&#xff0c;遇到第一个空单元格停止。向上到连续区域开头Ctrl ↑ActiveCell.End(xlUp)从当前单元格向上…

计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)

一、实验目的 1、理解“微程序”设计思想&#xff0c;了解“指令-微指令-微命令”的微程序结构。 2、掌握微程序控制器的结构和设计方法。 二、实验内容 设计一个“最简版本”的 CPU 模型机&#xff1a;利用时序发生器来产生 CPU 的预定时序&#xff0c;通过微程序控制器的自…

安卓端某音乐类 APP 逆向分享(二)协议分析

以歌曲搜索协议为例&#xff0c;查看charles中歌曲搜索协议详情 拷贝出搜索协议的Curl形式 curl -H Host: interface3.music.xxx.com -H Cookie: EVNSM1.0.0; NMCIDoufhty.1667355455436.01.4; versioncode8008050; buildver221010200836; resolution2392x1440; deviceIdYDwXa…

七天学会SpringCloud分布式微服务——03——Nacos远程调用

1、微服务项目配置类放在地方 配置类型应放位置说明通用配置类&#xff08;如&#xff1a;跨服务通用的拦截器、全局异常处理、统一响应体封装等&#xff09;可放在一个**公共模块&#xff08;common/config&#xff09;**中&#xff0c;被各服务引入实现代码复用&#xff0c;…

基于Java+Spring Boot的校园闲置物品交易系统

源码编号&#xff1a;S561 源码名称&#xff1a;基于Spring Boot的校园闲置物品交易系统 用户类型&#xff1a;多角色&#xff0c;用户、商家、管理员 数据库表数量&#xff1a;12 张表 主要技术&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 运行环境&#xff1…

SpringBoot 的 jar 包为什么可以直接运行?

一、普通jar包和SpringBoot jar包有什么区别&#xff1f;什么是jar包&#xff1f;&#xff1f; &#xff08;1&#xff09;什么是Jar包&#xff1f; 定义&#xff1a; JAR 包&#xff08;Java Archive&#xff09; 是 Java 平台标准的归档文件格式&#xff0c;用于将多个 Jav…

算法-基础算法-递归算法(Python)

文章目录 前言递归和数学归纳法递归三步走递归的注意点避免栈溢出避免重复运算 题目斐波那契数反转链表 前言 递归&#xff08;Recursion&#xff09;&#xff1a;指的是一种通过重复将原问题分解为同类的子问题而解决的方法。在绝大数编程语言中&#xff0c;可以通过在函数中再…

TVFEMD-CPO-TCN-BiLSTM多输入单输出模型

47-TVFEMD-CPO-TCN-BiLSTM多输入单输出模型 适合单变量&#xff0c;多变量时间序列预测模型&#xff08;可改进&#xff0c;加入各种优化算法&#xff09; 时变滤波的经验模态分解TVFEMD时域卷积TCN双向长短期记忆网络BiLSTM时间序列预测模型 另外以及有 TCN-BILSTM …