配置调试环境
启用sourceMap
运行代码
yarn 运行命令 yarn dev
启动代码
会生成dist文件,我们需要的是这两个
源码下新建index.html,引入这两个文件
<body>
<div id="app">
{{ message }}
</div>
<script src="../dist/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
</script>
</body>
ok可以在chrome的sources中看到map源代码
调试代码
在 source里打上断点这里是18行step into next function
进入了index.js页面,可以看到构造函数Vue
step into next function
进入这个vue原型上的方法
可以看到生命周期,事件,渲染器,inject的初始化函数,先不管step into next function
进入 initState()
可以看到初始化props,methods,先不管,进入initData()
进入observe观测数据
进入这个类
进入这个Dep类
继续走进入walk
进入defineReactive()
使用Object.definedProperty监测get时候在dep这个Dep类生成的实例上调用depend()添加依赖,set的时候通知notice()触发依赖
继续走,要return了 可以看一下ob是什么内容
不看其余的,先看这个$mount挂载这个问题
step into next function
进入compileToFunctions看看
进入compile看看
进入baseCompile看看,我猜测他就是编译成语法树的函数
进入prase他应该就是编译到语法树了