本系列文章都是vue版本2.6.11,也就是vuecli3的对应的vue的版本
学习一门技术的源码首先当然是从它的入口开始学习,在这里我先扩展一下从引入vue到入口都讲一下
首先看下node_modules下面有很多个不同版本的vue的源码文件那么到底用的是哪个呢
具体哪个包做什么用vue的官方有说明,现在我们关注的是引入那一部分
我们知道现在我们都是用es6module的引入方式引入一个库,那么nodeJs在编译过程中他是怎么处理我们这一语法糖的呢。
nodeJs是支持es6module和commonJs编码规范的,nodeJs首先会找node_modules每个引入模块(核心模块除外 核心模块被编译成二进制文件在.bin目录下)的package.json文件,packagejson的main和module对应着两种加载方式,es6module引入会直接找module字段对应的文件路径,如果没有就找main的。module字段引入也是为了做treeshaking
1,vue入口初始化
1)绑定原型
1、绑定对象$data,$props,事件,更新、销毁函数到Vue原型
2、初始化入口方法_init
2)初始Vue全局对象
绑定全局对象到Vue对象,将全局的函数绑定到Vue的构造函数
3)实例化Vue
实例化Vue后调用_init方法初始实例vm
它会先判断是否为组件,如果是组件就会初始化组件的数据
然后就是一些周期函数,state的初始化了,initState将组件中的data,props,computed,watch,methods添加数据监听到vm实例中后续章节会特意讲如何监听的
到此为止是Vue初始化前提工作都已经准备完毕,我们在第二节Vue如何挂载到我们的真实Dom上面的