下载
去开源代码库上下载武https://github.com/vuejs/vue
新公共管理安装新公共管理运行开发运行起来
汇总流程
某视频剪辑软件使用使用卷曲打包,流量规范数据类型
卷曲可以先用工具套用,读起来差不多,时间有限,毕竟只有5分钟,这个就不用去看卷曲文档了
入口
打开package.json
我们看剧本配置
dev': '汇总-w -c脚本/config.js -环境目标: web-完整-开发',' dev:cjs': '汇总-w -c脚本/config.js -环境目标:web-runtime-cjs-dev ',找到脚本/config.js
打开
根据配置目标的不同会选择不同的配置
同时在这里配置了process.env.NODE_ENV环境
目标有UMD公共司法、专家系统模块关于射流研究…引入类型的
还有前端视角
web-runtime-cjs-dev ' : { entry : resolve(' web/entry-runtime。js '),dest : resolve(' dist/vue。运行时。常见。戴夫。js '),format: 'cjs ',env: 'development ',banner }在alias.js下设置了别名路径
我们先介绍src/平台
里面有网和前端视角分别的网和前端视角入口
在网文件下是UMD公共司法、专家系统模块关于射流研究…引入类型服务器的打包入口
打开web/entry-runtime.js
引入
从""导入Vue ./runtime/index '导出默认Vue打开。/运行时/索引
从“核心/索引”导入Vue。原型。$ mount=function(El?弦|元素,补水?布尔值):组件{ el=el inBrowser?查询(el) :未定义返回安装组件(这个,el,补水)}导出默认某视频剪辑软件在某视频剪辑软件原型上添加了增加方法
处理了开发工具,没有安装提醒安装开发者工具
给了这句提示偏差环境提示
您正在开发模式下运行Vue .为生产部署时,请确保打开生产模式。在https://vuejs.org/guide/deployment.htmlplatforms查看更多提示目录夹讲解完毕
核心目录
打开核心/实例/索引
映入眼前的是
函数Vue(选项){ if (process.env.NODE_ENV!=='生产!(Vue的这个实例){ warn('Vue是一个构造函数,应该用新的关键字来调用)}这个._init(选项)} initMixin(Vue)状态Mixin(Vue)事件smixin(Vue)生命周期eMixin(Vue)renderMixin(Vue)导出默认某视频剪辑软件先执行的是initMixin(Vue)
打开初始化
导出函数initMixin(Vue){ Vue。原型。_ init=函数(选项?对象){ const vm=this //一个uid vm ._uid=uid让开始标记,结束标记/*伊斯坦布尔忽略if */if (process.env.NODE_ENV!==“生产”配置。性能标记){ StartTag=` vue-perf-start : $ { VM ._ uid } ` end tag=` vue-perf-end : $ { VM ._uid}` mark(startTag) } //一个标志,以避免观察到此vm ._isVue=true //处理传入的选项/合并选项如果(选项选项_isComponent) { //优化内部组件实例化//因为动态选项合并相当慢,//内部组件选项都不需要特殊处理initInternalComponent(vm,options) } else { //传入的选项,默认的选择一起合并挂载到虚拟机$options上虚拟机$ options=合并选项(resolvecostructoroptions(VM。构造函数),选项|| {},vm ) } /*伊斯坦布尔忽略else */if (process.env.NODE_ENV!=='production') { //代理initProxy(vm) } else { vm ._renderProxy=vm } //生命周期初始化生命周期(虚拟机)/启动事件initEvents(vm) //处理render vdom initRender(VM)callHook(VM,‘创建前’)//处理进样初始进样(vm) //在数据/道具之前解析进样/双向数据绑定,监听订阅initState(VM)init provide(VM)//数据/道具callHook后解析(VM,‘created’)/*伊斯坦布尔忽略if */if(过程。ENV。node _ ENV!==“生产”配置。性能标记){虚拟机._name=formatComponentName(vm,false)标记(结束标记)度量(` vue ${vm ._name} init `,startTag,endTag) } //渲染到dom if (vm .$options.el) { vm .$mount(虚拟机$期权。El)} } }生命周期
打开生命周期
导出函数callHook (vm:组件,hook:字符串){ //调用生命周期钩子时禁用资料执行防止集合pushTarget() //执行对象的周期函数,周期函数最后被处理成数组常量处理程序=vm .$ options[hook]const info=` $ { hook } hook ` if(handlers){ for(让i=0,j=handlers.lengthI jI){调用witherrolhanging(处理程序[i],vm,null,vm,info) } } if (vm ._hasHookEvent) { vm .$ emit(' hook : ' hook)} popTarget()callHook的时候,是执行相应周期,开发者在周期函数里所写的
事件
initEvents实现了发射等方法,请参考监听者订阅者模式,这里不详解
renderrenderMixin函数添加了$nextTick _render原型对象
$nextTick会在数字正射影像图跟新后立即调用
下一步(fn,这个)是一个自执行函数
渲染(_ r)返回的是结节的射流研究…数据,还不是数字正射影像图
做了虚拟域
initRender函数给伏特计添加了_c和$createElement用来渲染的方法
状态
if(!(虚拟机中的密钥){代理(虚拟机,` _道具`,密钥)}给某视频剪辑软件属性做代理,访问这个可以得到这个。数据。a的值
导出函数initState (vm:组件){ vm ._watchers=[] const opts=vm .$ options if(opts。道具)初始化道具(VM,opts。道具)如果(选择。方法)初始化方法(VM,opts。方法)if(opts。data){ init data(VM)} else { observe(VM ._data={},true/* asRootData */)} if(opts。计算)初始化计算(虚拟机,opts。计算)if(opts。手表选择。看着!==nativeWatch) { initWatch(vm,opts.watch) }}给数据做监听
stateMixin函数
添加原型对象
vue。原型。$ set=setvue。原型。$ delete=del其他
src/编译器做了编译处理
核心/组件d做了点火电极
核心/实用程序封装了通用方法
核心/vdom vdom算法
以上整体架构分析完毕