📂 核心模块解析路径与功能说明
1. 构造函数入口
- 文件 :
src/core/instance/index.js - 功能 :
- 定义 Vue 构造函数,并通过 mixin 模式将实例方法(如
_init)挂载到原型链。 - 组合初始化系统、状态管理、生命周期等核心模块。
- 定义 Vue 构造函数,并通过 mixin 模式将实例方法(如
2. 初始化系统
- 关键文件 :
init.js→initMixin(Vue): 初始化生命周期、事件、渲染函数、注入等核心配置。state.js→stateMixin(Vue): 定义$data、$props、$watch等数据相关 API。lifecycle.js→lifecycleMixin(Vue): 实现组件挂载(_update)、销毁等生命周期逻辑。render.js→renderMixin(Vue): 提供_render方法生成虚拟 DOM,并绑定$nextTick。
3. 响应式系统
-
目录 :
src/core/observer/ -
核心文件:
index.js:Observer类对数据进行递归劫持,依赖Object.defineProperty实现 getter/setter。dep.js: 管理依赖(Watcher实例),实现发布-订阅模式。watcher.js: 分为渲染 Watcher、计算属性 Watcher 和用户 Watcher,负责触发更新。scheduler.js: 异步队列调度,合并重复更新(如多次this.data++触发一次渲染)。
-
流程图优化:
scss
new Vue → _init() → initState → observe(data)
│
├── 递归劫持对象属性(Object.defineProperty)
│
├── getter → Dep.depend() 收集当前 Watcher
│
└── setter → Dep.notify() → 触发 Watcher.update()
│
└── scheduler 批量执行队列(nextTick)
4. 模板编译系统
-
目录 :
src/compiler/ -
流程详解:
- 解析阶段 (
parser/): 将 HTML 模板转换为 AST(抽象语法树),处理指令、插值等语法。 - 优化阶段 (
optimizer.js): 标记静态节点和静态根节点,减少 diff 计算量。 - 生成阶段 (
codegen/): 将 AST 转换为可执行的 render 函数字符串。
- 解析阶段 (
-
示例:
javascript
// AST 节点示例
{
tag: 'div',
type: 1,
static: false,
children: [{ type: 2, expression: '_s(message)', text: '{{ message }}' }]
}
5. 虚拟 DOM 与渲染机制
-
目录 :
src/core/vdom/ -
关键点:
vnode.js: 定义虚拟节点结构(tag、data、children 等)。patch.js:- Diff 算法: 仅同层级比较,通过 key 复用节点,优先处理头尾交叉情况。
- Patch 阶段 : 将差异应用到真实 DOM,触发
create、update、destroy钩子。
-
渲染流程:
scss
_render() → 生成新 VNode → _update() → patch(oldVNode, newVNode)
│
├── 无旧节点 → 直接创建 DOM
│
└── 有旧节点 → Diff 对比 → 更新 DOM
6. 组件系统
-
关键逻辑:
- 组件注册 : 全局/局部组件通过
Vue.component()缓存构造函数。 - 生命周期管理 : 父子组件的
created→mounted顺序(先子后父)。
- 组件注册 : 全局/局部组件通过
-
通信机制:
- Props : 父组件通过
createComponent传递数据,子组件通过initProps接收。 - 事件 : 子组件通过
$emit触发父组件监听的自定义事件。
- Props : 父组件通过
7. 事件机制
- 文件 :
src/core/instance/events.js - 扩展说明 :
- 原生事件 : 通过
v-on:click.native绑定到组件根元素。 - 自定义事件 : 通过
vm._events维护监听器,$emit触发时执行回调。
- 原生事件 : 通过
8. Vuex 状态管理(独立库)
- 核心实现 :
- 响应式 State : 通过
Vue.util.defineReactive实现状态监听。 - 严格模式 : 通过
_withCommit确保状态变更仅通过 mutation。 - 插件机制 : 通过
subscribe和plugins数组支持中间件扩展。
- 响应式 State : 通过
9. Vue Router 路由系统(独立库)
- 核心机制 :
- 路由匹配 :
createMatcher根据路由配置生成匹配映射表。 - 视图更新 :
<router-view>作为函数式组件,根据当前路由动态渲染对应组件。 - 导航守卫 : 通过队列顺序执行
beforeEach、beforeRouteEnter等钩子。
- 路由匹配 :