看源码Tips:开头吞枣,不要看细节。vue源码目录:dist目录输出格式应用场景:vue.common.*.jscjs(CommonJS)模块版本用于webpack1,browserfiryvue.esm.*.jses6模块版本用于webpack2+vue.jsumd模块版本,兼容的cjs和amd可以用于节点和浏览器。vue.runtime.js不包含编译器,只包含运行时。rollup只用于打包,适合打包js,不像webpack打包一切。搜索入口文件:newVue({el:'#app',template:'
'or'#app',//stringtemplaterender:h=>h(App)//先渲染级别高于el,}).$mount("#app")//mount函数相当于指定了el选项,只写一个指定模板来源,如果render不考虑,只考虑template和el不存在,优先级:render>template>el组件初始化过程:newVue()->$mount()->compile()->renderfunction->VirtualDOM&Watcher(getter&setter)->patch(updatedom)不管用什么方法设置Templates最终都会变成renderfunction。编译的过程就是将模板字符串转换成渲染函数。Vue构造器(核心/实例/索引),_init()方法源代码:...initMixin(Vue)stateMixin(Vue)eventsMixin(Vue)lifecucleMixin(Vue)renderMixin(Vue)....描述:initMixin(Vue)包含:initLifecycle、initEvents、initRender、beforeCreate、initInjections、initState、initProvide、createdstateMixin(Vue):包含$data、$props、$set、$delete、$watcheventsMixin包含:$on、$emit、$once、$offlifecycleMixin(Vue):_update,$forceUpdate,$destroyrenderMixin(Vue)包含:$nextTick,_render其中下划线方法_update,_render是私有的,用户不可用。数据响应过程分析initState方法(srccoreinstancestate.js):核心代码:initData(){...observe(data,true);//返回一个Observer对象实例...}Observer(src\core\observer\index.js):判断数据对象类型,做响应处理。构造函数用于ES5继承,类用于ES6继承,两者都是语法糖。复杂度高,需要结构清晰。建议使用类。