.vb.net 执行js方法_前端如何看框架源码-egg.js源码探索日志4

9403fcf433476d54191c470d89d688ff.png

每天一步,书接上回,上次看了egg中启动器的三个类的构造函数

拖鞋:前端如何看框架源码-egg.js源码探索日志3​zhuanlan.zhihu.com
64c3e69ef7f4972d46d4b78c4a11c67e.png

今天按照代码的运行的顺序开始看 new Command().start(); start()函数

今天的代码稍微有点绕哦,可能稍微费点脑子

7d7d6ccbf3916c89418912f0ff1ec77a.png

start函数很简单一个co 的自执行 generator函数,因为要处理一些异步的情况,然后调用

this[DISPATCH]方法,这个方法就是最终的启动方法,代码有点多 分三部分来看

第一部分 通用代码

b96bb740720f069787cb27bcb59f9511.png

做了一些 命令行参数的处理,代码很简单,就不做过多解释了,不熟悉yargs库的同学可以去Npm看看文档,话说我也是这两天才知道这个库的。

第二部分,当满足if条件时

68bf1e37ee72c0ea2ce4b3a400fc280c.png

首先启动命令是 npm run dev

在第一部分时 从命令行中解析出来一个变量 commandName='dev'

并且在第三行 吧 rawArgv里面的 dev 删除了

在之前第二篇文章中,dev.js 被load函数动态require进来并用文件名做了一个map对象,这样dev这个字符串 就对应了node_modulesegg-binlibcmddev.js

拖鞋:前端如何看框架源码-egg.js源码探索日志2​zhuanlan.zhihu.com
64c3e69ef7f4972d46d4b78c4a11c67e.png

取出来对应的JS后 执行 getSubCommandInstance 方法 这个方法就一行代码

11c29c81923afec09d596fe86204cc33.png

new了一下dev.js 这个类

0311b18d6816fdb90cbf26eff74217c5.png

构造函数跟之前的规范一样,做了一些初始值的处理。这里注意两点,首先就是继承关系

4da07905e5b7f8b869cdb9deca5b6316.png

跟之前的一样,这个继承关系跟启动函数也是一样的,这个在第三部分会用到,

还有一个非常重要的成员属性 this.serverBin = path.join(__dirname, '../start-cluster');

这个就是之后启动服务器时要用到的启动文件路径(这里为啥不直接require进来而是要路径字符串呢?还有待继续深入探索)

然后就得到了 command实例,并执行 command[DISPATCH](); ,对没错还是熟悉的配方,熟悉的方法,之前在start中就执行的这个 转了一圈 又执行回来了

第三部分 执行阶段

35999b73de1e96a8e1f453c980382d57.png

由于在第二部分中 删除了 'dev'这个变量值,if 条件不在生效,就进入了第三部分,

这里分支比较多,我们跳过前面的分支,代码最终会走到 最后的else里,

callFn是工具对象,在构造函数中挂载进来,this.helper.callFn 提供的一个执行 绑定 this的一个函数,下次会看,然后运行了this.run 这个函数由 dev.js提供也是要放在下次一起看了

总结,这次的业务逻辑就比较明显了,难点主要都是在各个类中频繁跳转,通过控制命令行参数的处理来控制代码的执行

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页