nodejs导入模块的方法以及需要模块的执行过程

  介绍

这篇文章主要介绍”nodejs导入模块的方法以及需要模块的执行过程”,在日常操作中,相信很多人在nodejs导入模块的方法以及需要模块的执行过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“nodejs导入模块的方法以及需要模块的执行过程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

最近在看节点,所以就特意了解了下,它模块引入的过程。今天做个回顾记录,希望对正在阅读的你也有所帮助

<强>节点中的模块分类 <李>

核心模块,或者称内置模块(就是节点自带的fs, http, vm…)详情见官网api

<李>

第三方模块,或者自己封装的npm包放私库或者公库上(npm上通过npm安装来安装使用的)

<李>

文件模块,项目内部文件,通过相对路径或者绝对路径的方法需要使用

<强>模块的导入需要

我这边的调试工具用的是vscode自带的

 nodejs导入模块的方法以及需要模块的执行过程

<>强要求的过程

1,读取文件,进入需要方法返回mod.require(路径)

 nodejs导入模块的方法以及需要模块的执行过程

2,进入模。需要发现是实质执行了Module.prototype。需要,(这里的id就是一开始的路径),嗯~怎么又调用了模块。_load,木的事,我们继续走

 nodejs导入模块的方法以及需要模块的执行过程

3,进入Module._load(),模块。_load (id,/* isMain */false)根据路径加载模块

<李>

以文件名作为模块。_cache对象的键查询该文件是否已经被缓存,命中缓存的话,直接出口

 nodejs导入模块的方法以及需要模块的执行过程

<李>

如果不存在缓存数组中,模块。_resolveFilename解析文件路径为绝对路径,再执着的去查一次缓存,命中缓存的话出口

 nodejs导入模块的方法以及需要模块的执行过程

<李>

前两次的缓存查找排除了外部模块的,再判断是不是内置模块,是的话就出口

 nodejs导入模块的方法以及需要模块的执行过程

<李>

走到这里真的说明这个模块真的没有缓存过,那就新一个

 nodejs导入模块的方法以及需要模块的执行过程

4,新模块()进入,创建空对象。出口={}:也就是我们最终要的出口对象,(其他模块里引模块此处不继续深入研究)

 nodejs导入模块的方法以及需要模块的执行过程

5,模块。_cache(文件名)步骤3中解析的路径做钥匙,步骤4中创建的对象做值存入我们的缓存数组抬起! !

 nodejs导入模块的方法以及需要模块的执行过程

6,模块。load(),进入该函数

 nodejs导入模块的方法以及需要模块的执行过程

 nodejs导入模块的方法以及需要模块的执行过程

<李>

findLongestRegisteredExtension计算文件名后缀,

<李>

模块。_extensions(扩展)(文件名)根据不同的后缀去调用不同的加载方法(这里用的是策略模式)

<李>

我这里命中的是. js,该方法里又用fs。readFileSync同步读取文件,然后作参数调用模块。_compile(内容、文件名)

 nodejs导入模块的方法以及需要模块的执行过程

7, module._compile()进入   发,现又将内容作wrapSafe(文件名、内容)的参数执行

nodejs导入模块的方法以及需要模块的执行过程