- 找出入口文件
让我们回到 vue源码赏析一 中第3步,这里有几个重要的信息
img1
找到 scripts/config.js,搜索 web-full-dev
img2
发现入口文件是 web/entry-runtime-with-compiler.js,不过外层没有web文件夹,定位到 resolve 方法
img3
找到 scripts/alias.js
img4
于是找到 web/entry-runtime-with-compiler.js 对应的真实目录是 src/platforms/web/entry-runtime-with-compiler.js ,打开这个文件,开始阅读之旅!
- 读源码: src/platforms/web/entry-runtime-with-compiler.js
img5
1:扩展$mount方法
2:flow语法(前端技术还真是层出不穷)
Facebook 推出的 Flow 是一个静态类型检测工具;在现有项目中加上类型标注后,可以在代码阶段就检测出对变量的不恰当使用。Flow 弥补了 JavaScript 天生的类型系统缺陷。利用 Flow 进行类型检查,可以使你的项目代码更加健壮。
3:这种类型的代码,在我们读源码时,可以忽略

1:判断options中有没有传递render方法,没有的话需要处理一下template
2:dom id:template: '#app'
3:dom节点:template:document.getElementById('app')
4:如果没有传递template选项,则从el选项上取html。由此看出template比el优先级高

1:针对传递了template选项的情况做处理,相当于img6中的2+3
2: 编译函数
3:将template转化成render
4:这里可以看出原来的$mount派上用场了
- 从2步骤找到Vue来源
img8
打开 src/platforms/web/runtime/index.js
img9
这里面主要是处理了$mount,方法 mountComponent 在后面的赏析文章中给出解读(TODO)
- 从3步骤找Vue来源
img10
打开 src/core/index.js
img11
这里面主要的方法是 initGlobalAPI(Vue),用来初始化Vue的全局方法,如:Vue.set,Vue.directive,Vue.mixin......,具体解读在后面的赏析文章中给出(TODO)
- 从4步骤找Vue来源
img12
打开 src/core/instance/index.js (这就是vue源码赏析一中找到的vue入口文件哦),顺藤摸瓜到这个位置就找到了Vue真正定义的地方
网友评论