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

前端本地开发构建和更新的过程 - 详解

文章目录

    • 一、开发环境启动时发生了什么?
      • 1. Node 进程启动
      • 2. 依赖预构建(仅 Vite)
      • 3. 启动本地服务
    • 二、浏览器请求资源时发生了什么?
      • 1. HTML 响应
      • 2. 模块请求
      • 3. 依赖加载
    • 三、更新代码时发生了什么?(HMR 流程)
      • 1. 文件系统监听
      • 2. 增量编译
      • 3. HMR 消息推送
      • 4. 浏览器执行模块热替换
    • 四、生产构建时的不同点
    • 五、与 webpack 对比
    • 六、流程图

一、开发环境启动时发生了什么?

当你运行 npm run dev 的时候,本质上经历了以下几个阶段:

1. Node 进程启动

2. 依赖预构建(仅 Vite)

  • Vite 会用 esbuildnode_modules 里的依赖(react、react-dom、lodash…)快速预编译成 ESM 格式。

  • 为什么要预构建?

    • node_modules 里通常是 CommonJS,浏览器不能直接跑。
    • 避免浏览器发太多 import 请求,合并成少量 bundle。
  • 结果会缓存到 node_modules/.vite/

3. 启动本地服务

二、浏览器请求资源时发生了什么?

当你打开 http://localhost:5173

1. HTML 响应

2. 模块请求

  • 浏览器会去请求 /src/main.jsx

  • Dev Server 发现这是源码文件 → 走插件链处理:

    • 解析 JSX → React.createElement
    • 如果是 TS → 去掉类型注解
    • 替换 import.meta.env → 注入环境变量
  • 返回一个浏览器能执行的 ESM 脚本。

例如你写的:

import React from "react";
const App = () => 

Hello

; export default App;

Vite 转换后可能变成:

import React from "/node_modules/.vite/deps/react.js";
const App = () => React.createElement("h1", null, "Hello");
export default App;

3. 依赖加载

  • 如果脚本里有 import React from 'react',浏览器会发请求 /node_modules/.vite/deps/react.js
  • 这个文件是 Vite 预构建好的,直接返回。

这样,整个应用就在浏览器里运行起来了。

三、更新代码时发生了什么?(HMR 流程)

当你修改 App.jsx 里的内容,比如:

Hello

Hello World!

会发生:

1. 文件系统监听

  • Dev Server 内部用 chokidar 监听文件变动。
  • 一旦 App.jsx 变了 → 触发编译。

2. 增量编译

3. HMR 消息推送

  • Dev Server 通过 WebSocket 向浏览器发送消息:

    { "type": "update", "path": "/src/App.jsx" }

4. 浏览器执行模块热替换

四、生产构建时的不同点

运行:

npm run build

流程和开发完全不同:

  1. 全量打包

    • Vite 内部调用 Rollup,把所有模块打成 bundle。
    • 生成 hash 文件名(app.abc123.js),防止缓存污染。
  2. 代码优化

    • Tree-shaking(移除没用的代码)。
    • Scope hoisting(减少闭包层级)。
    • 压缩(Terser/Esbuild)。
  3. 产物输出

    • dist/ 目录:

      dist/
      ├── index.html
      ├── assets/
      │   ├── index-xxxx.js
      │   ├── vendor-xxxx.js
      │   └── style-xxxx.css

五、与 webpack 对比

特性Vitewebpack
开发启动秒级(原生 ESM + esbuild)慢(需要先打 bundle)
更新速度增量更新,几乎秒级HMR 需要 rebuild,慢
依赖处理esbuild 预构建babel/ts-loader 全量编译
打包器Rollupwebpack 本身
插件生态新但增长快成熟,功能强大

六、流程图


点击进入我的网站

http://www.jsqmd.com/news/379156/

相关文章:

  • 2026广东最新燕窝礼盒供应链top5推荐!广州等地优质燕窝礼盒生产厂家权威榜单发布,品质溯源双优助力健康滋补 - 品牌推荐2026
  • 炸裂!任嘉伦全新专辑《37·单枪匹马》来袭,不被定义,自成锋芒
  • 《风过留痕》演技高光!实力派女演员周开开车内封神戏出圈,内心戏外化教科书级表演
  • 反光衣防护服安全帽检测数据集VOC+YOLO格式324张5类别
  • 野生动物检测数据集VOC+YOLO格式3285张8类别
  • Alibaba Cloud Linux 3.2104 U12.3 (OpenAnolis Edition) 安装php7.4
  • Python 并发编程 - edward
  • 资金安全PUA?你的本金在FP Markets澳福真的被“锁死“了吗?
  • 2026-01-11-云计算总复习-期末复习 - 指南
  • 详细介绍:如何将vivo应用程序移至SD卡?综合指南
  • 猫头虎AI分享:[转载]2025 年 HAMi 社区年度回顾 | 从 GPU 调度器到云原生 AI 基础设施的中流砥柱
  • 干货分享:主管药师真题解析好的资料如何选择? - 医考机构品牌测评专家
  • 深度测评:临床执医听哪个老师的课让学习效率倍增? - 医考机构品牌测评专家
  • 主管护师教辅资料深度测评:哪本最值得入手? - 医考机构品牌测评专家
  • 2026年新风机安装指南:无管道新风机与单向流技术TOP公司推荐 - 野榜精选
  • 2026年文武学校择校指南:封闭式管理与武术特色培养模式深度解析 - 野榜精选
  • 2026年广州AI获客TOP服务商横向对比:线索质量与ROI成本模型一览 - 野榜精选
  • 2026年调理失眠的中医馆怎么选?患者真实体验与评分排行榜 - 野榜精选
  • 2026年热压/烫金/丝印皮牌工艺TOP厂家对比:维斯辅料榜上有名 - 野榜精选
  • 物流老司机都头疼的配送中心选址问题,今天咱们用遗传算法来盘它。核心就一句话:用最少的钱覆盖所有客户需求。直接上代码边说边撸,看完你也能自己调参数玩选址
  • 汽车制造企业OA系统导入Excel宏代码是否被禁用?
  • 嵌入式硬件DAY5(ARM汇编) - 实践
  • 【Azure App Service】32位 Windows App Service 最大能使用多少内存?
  • 国产化PHP框架如何支持军工项目中的视频分片秒传?
  • Openclaw本地存储文件架构说明
  • 2026国内最新云石胶品牌top5推荐!服务深度覆盖江苏、山东、济南、云南等地,优质云石胶源头厂家权威榜单发布,合规品质双优助力专业粘接 - 品牌推荐2026
  • 利用Docker安装PostgreSQL 19 dev版
  • AI原生应用领域可解释性的发展瓶颈与对策
  • 案例详述:基于灵易Smart-SIM智能快速预测工具的电动海水泵浮阀隔振装置阀架结构快速设计
  • 教育平台PHP如何实现视频大文件的多线程分块上传?