入口src/platforms/web/entry-runtime-with-compiler.js
- 扩展$mount方法:处理template或el选项,编译成render函数,将vdom转换成dom并执行挂载。模板优先级:render>template>el。
查找Vue文件进入src/ platforms/web/runtime/index.js文件
- 1.安装web平台补丁函数patch,用于初始化和更新
- 2.实现了$mount
查找Vue文件进入src/core/index.js
- 初始化全局API,entend、nextTick、defineReactive、set、del
重要:src/core/instance/index.js
Vue构造函数定义
- 初始化this._init(来自initMixin)
- 定义实例属性和方法
进入init方法src/core/instance/init.js
- 合并选项
- initLifecycle(vm) // root、refs
- initEvents(vm) // 处理父组件传递的事件和回调
- initRender(vm) // scopedSlots、_c、$createElement
- callHook(vm, 'beforeCreate')
- initInjections(vm) // 注入祖辈传入数据
- initState(vm) // 初始化props,methods,data,computed,watch
- initProvide(vm) // 向后代提供数据
- $mount // 执行挂载,获取vdom并转换为dom
整体流程捋一捋
new Vue() => _init() => $mount() => mountComponent() => updateComponent()/new Watcher() => render() => _update()=>patch
数据响应式
initState (vm: Component) src\core\instance\state.js
初始化数据,包括props、methods、data、computed和watch
initData核心代码是将data数据响应化
function initData (vm: Component) {
// 执行数据响应化
observe(data, true /* asRootData */)
}