文章目录
前言
深入熟悉 Vue 3 源码及其设计思路,通常可以按照以下 5 个系统化步骤进行:
🧭 第一步:明确学习目标和准备基础
✅ 目标:
- 理解响应式系统(reactivity)
- 理解组件化架构(setup、渲染机制)
- 理解编译器(template -> render function)
- 掌握运行时核心(虚拟 DOM、diff 算法、生命周期)
✅ 基础准备:
- 熟悉 Vue 3 使用,至少做过几个项目
- 熟悉 ES6+(如 Proxy、Reflect、Symbol)
- 熟悉模块化(ESM)、构建工具(如 Vite、Rollup)
🔍 第二步:搭建本地源码调试环境
Vue 3 源码为 monorepo 多包结构,使用的是 pnpm
+ Turbo
。
✅ 步骤:
-
克隆源码:
git clone https://github.com/vuejs/core.git cd core pnpm install
-
编译调试:
pnpm dev
-
启动 playground:
cd packages/vue pnpm dev
访问
playground
,可查看修改源码的实时效果。
🧩 第三步:模块拆解分析 Vue 核心模块
1️⃣ reactivity
响应式系统
源码位置:packages/reactivity/
-
重点文件:
reactive.ts
(响应式对象创建)effect.ts
(副作用追踪)baseHandlers.ts
(Proxy 核心处理器)track.ts
&trigger.ts
(依赖收集与更新)
-
推荐顺序:
先看effect.ts
→ 再看reactive.ts
→ 然后是 handler 的实现
2️⃣ runtime-core
渲染引擎 & 组件系统
源码位置:packages/runtime-core/
- 组件挂载流程:
createApp -> mount -> render -> patch -> mountElement / patchElement
- 重要文件:
component.ts
(组件创建与实例)renderer.ts
(VNode 渲染)vnode.ts
(VNode 定义)scheduler.ts
(调度机制)
3️⃣ compiler-core
模板编译器
源码位置:packages/compiler-core/
- 流程概览:
template -> parse -> transform -> generate -> render function
- 重点分析:
parse.ts
:将模板编译为 ASTtransform.ts
:AST 转换codegen.ts
:代码生成 render 函数
4️⃣ shared/
与 utils/
通用工具函数,比如 isObject
、hasOwn
、ShapeFlags
常量标志等,是理解组件类型与状态管理的关键。
🧪 第四步:边看源码边动手实验
- 修改
reactivity
中的track/trigger
,调试副作用函数是否触发 - 在
playground
中写测试组件,验证响应式或组件生命周期行为 - 自己用代码模拟 Vue 的响应式系统(练习 mini-vue)
📚 第五步:结合官方设计文档和社区资料
官方文档:
- Vue 3 RFC:https://github.com/vuejs/rfcs
- 如:响应式系统设计、Composition API 设计思路
推荐学习资料:
- HcySunYang/vue-design 中文源码解读
- mini-vue 精简版 Vue3 实现
- 博客专栏:
✅ 总结:推荐学习路径图
响应式系统 → 组件挂载流程 → 编译器原理 → 生命周期和调度 → 源码调试 → 自主实现 mini-vue