这篇文章主要介绍”nodejs导入模块的方法以及需要模块的执行过程”,在日常操作中,相信很多人在nodejs导入模块的方法以及需要模块的执行过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“nodejs导入模块的方法以及需要模块的执行过程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
最近在看节点,所以就特意了解了下,它模块引入的过程。今天做个回顾记录,希望对正在阅读的你也有所帮助
<强>节点中的模块分类强>
- <李>
核心模块,或者称内置模块(就是节点自带的fs, http, vm…)详情见官网api
李> <李>第三方模块,或者自己封装的npm包放私库或者公库上(npm上通过npm安装来安装使用的)
李> <李>文件模块,项目内部文件,通过相对路径或者绝对路径的方法需要使用
李><强>模块的导入需要强>
我这边的调试工具用的是vscode自带的
<>强要求的过程强>
1,读取文件,进入需要方法返回mod.require(路径)
2,进入模。需要发现是实质执行了Module.prototype。需要,(这里的id就是一开始的路径),嗯~怎么又调用了模块。_load,木的事,我们继续走
3,进入Module._load(),模块。_load (id,/* isMain */false)根据路径加载模块
- <李>
以文件名作为模块。_cache对象的键查询该文件是否已经被缓存,命中缓存的话,直接出口
李>
- <李>
如果不存在缓存数组中,模块。_resolveFilename解析文件路径为绝对路径,再执着的去查一次缓存,命中缓存的话出口
李>
- <李>
前两次的缓存查找排除了外部模块的,再判断是不是内置模块,是的话就出口
李>
- <李>
走到这里真的说明这个模块真的没有缓存过,那就新一个
李>
4,新模块()进入,创建空对象。出口={}:也就是我们最终要的出口对象,(其他模块里引模块此处不继续深入研究)
5,模块。_cache(文件名)步骤3中解析的路径做钥匙,步骤4中创建的对象做值存入我们的缓存数组抬起! !
6,模块。load(),进入该函数
- <李>
findLongestRegisteredExtension计算文件名后缀,
李> <李>模块。_extensions(扩展)(文件名)根据不同的后缀去调用不同的加载方法(这里用的是策略模式)
李> <李>我这里命中的是. js,该方法里又用fs。readFileSync同步读取文件,然后作参数调用模块。_compile(内容、文件名)
李>
7, module._compile()进入 发,现又将内容作wrapSafe(文件名、内容)的参数执行