nodejs里require的调试截屏

例子:我执行到了下图第二行:

nodejs里require的调试截屏

const TCPClient = require(’…/modules/tcpClient/index’)

那么我们就进入require的内部进行调试:
进入第11行:return mod.require(path);
nodejs里require的调试截屏

path的值就是require传入的参数:
nodejs里require的调试截屏

而mode的值:就是当前发起require请求的module对象:
nodejs里require的调试截屏

转交给Module._load:
nodejs里require的调试截屏

先从Module._cache里检查之前是否已经加载过这个模块了,如果缓存里有,直接从第479行返回了。
nodejs里require的调试截屏

三大步骤:
nodejs里require的调试截屏

  1. 新建一个Module对象
  2. 将新建的Module对象加入module缓存池里
  3. 执行tryModuleLoad加载module
    nodejs里require的调试截屏

nodejs框架试图从下列7个路径去加载module。

这个path和Java的classpath原理一样:
nodejs里require的调试截屏

把该module的内容从文件系统读取出来,存储成字符串,然后compile:
nodejs里require的调试截屏

require的返回结果,就是我们module实现文件里的exports输入,require结束。
nodejs里require的调试截屏

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
nodejs里require的调试截屏