每天一小步,书接上回
拖鞋:前端如何看框架源码-egg.js源码探索日志8zhuanlan.zhihu.com今天来到了,egg的最后一个核心模块Loader,这块代码我看了好久,至少比别的部分久,代码太多,也特别的绕,感觉无法用一篇文章来说明了可能需要个视频才行。
今天就着上次提出来的几个问题,来说,对直接说,就不贴代码了实在是又多又复杂。而且收益很低,这块偏底层了,实现方式也不一定用egg的模式,它为了考虑通用性,做了很多兼容代码,如果公司或者个人不做这种输出型的开源框架个人感觉没多大必要,先看看上回遗留的问题
第二,路由是如何加载进来的
第三,为什么项目里用this就可以获得想要使用的方法,而不用require
第四、loader是如何读取项目业务逻辑的
其实都是loader做了以上的工作,egg有众多的loader,原理其实很简单,就是动态require文件,注入到全局实例中,在全局用this可以取到,不过每个环节还是有一些细节上的偏差的,想细看的同学可以参考
第五、最终服务的启动点,最后一个问题就是服务的启动点到底在哪
在agnent启动后,生命周期回回调 master 中 forkAppWorkers 这个方法来启动最终的业务逻辑,会使用 cfork 这个库 来启动集群
这里有个小问题,集群启动时,所有子进程都在监听同一个端口,为什么没有端口被占用的问题呢?
总结,到此egg的完整启动流程就结束啦,其实看下来发现原理还是很简单,核心就两大块,eggcore和eggloader,前者用来控制流程 后者具体去加载对应文件,让使用者第一,需要在规范的目录里进行开发,限制文件夹的使用,封装了启动过程,无需在关心比较复杂的集群处理。