egg 编码规范_前端如何看框架源码-egg.js源码探索日志4

每天一步,书接上回,上次看了egg中启动器的三个类的构造函数拖鞋:前端如何看框架源码-egg.js源码探索日志3​zhuanlan.zhihu.com

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

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

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

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

第一部分 通用代码

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

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

首先启动命令是 npm run dev

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

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

在之前第二篇文章中,dev.js 被load函数动态require进来并用文件名做了一个map对象,这样dev这个字符串 就对应了node_modules\egg-bin\lib\cmd\dev.js拖鞋:前端如何看框架源码-egg.js源码探索日志2​zhuanlan.zhihu.com

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

new了一下dev.js 这个类

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

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

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

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

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

第三部分 执行阶段

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值