搞懂 Vue3 源码目录结构,一篇就够了

0 阅读2分钟

前言:为什么要了解 Vue 的源码结构?

如果你用过 Vue,你一定熟悉 refwatchv-if 等 API。 Vue 是一个渐进式框架,而源码也“渐进”展开。 本文不讲底层原理,而是带你认识 Vue 这座“房子”的房间分布、每个房间大概做什么。

👉 掌握结构,就不怕深入阅读时迷路。

整体结构一览

vue/
├── packages/
│   ├── vue/               # 核心对外暴露接口
│   ├── runtime-core/      # 渲染逻辑核心
│   ├── runtime-dom/       # DOM 平台特定逻辑
│   ├── compiler-core/     # 编译器核心
│   ├── compiler-sfc/      # .vue 文件编译逻辑
│   ├── reactivity/        # 响应式系统
│   └── shared/            # 工具方法 & 常量
├── scripts/               # 构建脚本
├── test-dts/              # TS 类型测试
└── tsconfig.json

Vue源码中也有很多Demo供我们调试,examples文件下都可以作为我们调试的Demo

image.png

📦 packages/vue:对外的“入口大门”

这是最终打包出来的 vue 包,负责把其他模块组装起来对外暴露,比如 createApp、ref 等 API。

👉 就像一个门面,把内部复杂的系统封装起来。

🔁 packages/reactivity:响应式系统的大脑

这里实现了 Vue 的响应式核心,比如:

reactive、ref

effect 副作用收集

依赖追踪、触发更新

👀 如果你对“为什么修改数据页面会自动更新”感兴趣,这就是入口。

packages/runtime-core:运行时核心骨架

它包含了:

虚拟 DOM

组件生命周期

渲染机制(render 函数)

scheduler 异步更新策略

简单理解,它负责把“模板”变成可以运行的“程序”。

packages/runtime-dom:专门给浏览器用的运行时

和 runtime-core 配合,它实现了:

真实 DOM 操作

浏览器事件处理

兼容平台差异(如 DOM 属性、事件名)

🎯 如果你想了解 patch 真实 DOM 的逻辑,可以看这里。

packages/compiler-* 系列:编译相关逻辑

compiler-core:通用编译逻辑

compiler-sfc:解析 .vue 单文件组件,提取 <template> / <script> / <style>

compiler-dom:编译 template 成浏览器运行的 render 函数

编译阶段把写的模板 <div>{{ msg }}</div> 编成底层 h('div', msg) 语法。

shared:公共工具库

提供全局工具函数(如 isObject、extend)和通用常量,是整个系统的粘合剂。

test-dts:类型测试仓库

Vue 的类型系统很复杂,这里是专门测试 TypeScript 类型正确性的地方,保障用户体验不崩。