怎么在node . js中使用模块模块

  介绍

怎么在节点。js中使用模块模块?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>系统模块

<李>

核心模块(本机模块)、http、缓冲区,fs等,底层调用的内建模块(C/c++);

<李>

C/c++模块(内置的内建模块),供本地模块调用;

<强>第三方模块

<李>

第三方维护的模块,比如快递、高雅,时刻。李js等;

<李>

本地维护的模块(以路径形式的文件模块)比如,. ./开头的;

<强>文件形式

<李>

javaScript模块,模块。李js;

<李>

json模块,模块。李json;

<李>

C/c++模块,编译后扩展名为.node,模块。李节点;

<强>加载机制

<强>加载步骤

经历路径分析,文件定位和编译执行。

<强>加载顺序

<李>

系统缓存,一个模块被执行后会被缓存起来,提高再次加载速度;

<李>

系统模块,即原生模块,部分核心模块已经被编译成二进制,省略了路径分析,文件定位,会直接被加载到了内存中,其中系统模块定义在源码的自由目录下;

<李>

文件模块,优先加载。,. ./开头的,会依次按照. js, . json。节点进行扩展名补足尝试(文件没有加上扩展名),最好还是加上文件的扩展名。

<李>

目录模块,文件模块加载过程中,没有找的到,但发现一个同样的目录名,就会将这个目录当作一个包来处理。这块采用了Commonjs规范,在文件包。json中查找;

<李>

node_module模块,如果系统模块,路径文件模块都找不到,节点。js会从当前模块的父目录开始查找,直到系统的根目录;

怎么在节点。js中使用模块模块

<强>关于缓存问题

模块缓存后,可以通过要求。缓存查看已缓存的模块。

//,模块文件,require.module.js   module.exports =, {   ,,名字:& # 39;公关# 39;   说才能(){,}   } //,引用模块文件,require.cache.js   要求(& # 39;。/require.module& # 39;);      console.log (& # 39; require.cache ——安康;& # 39;);   console.log (require.cache);

怎么在node . js中使用模块模块

<强>对象引用

1。导出与模块。出口关系

const  exports =, module.exports;

所以就不能改变出口的指向,可以这样

exports.info =, {   ,,名字:& # 39;公关# 39;   ,,年龄:30岁   }      module.exports =, {   ,,名字:& # 39;公关# 39;   ,,年龄:30岁   }

<>强模块循环引用

模块moduleA。js和moduleB。js两个模块互相引用,会怎样?

//, moduleA.js   console.log(& # 39;模块,moduleA& # 39;);   时间=exports.name  & # 39; moduleA 名字# 39;;      age =, 27岁;      const  moduleB =,要求(& # 39;。/moduleB.js& # 39;);   console.log (& # 39; moduleA  require  moduleB =祝辞& # 39;,,moduleB.name); //, moduleB.js   console.log(& # 39;模块,moduleB& # 39;);   时间=exports.name  & # 39; moduleB 名字# 39;;      const  moduleA =,要求(& # 39;。/moduleA.js& # 39;);   console.log (& # 39; moduleB  require  moduleA =祝辞& # 39;,,moduleA.name);

怎么在节点。js中使用模块模块

<李>

启动模块节点moduleA。js,会打印模块moduleA;

<李>

模块moduleA。js中加载moduleB。js,打印模块moduleB;

<李>

模块moduleB。js中又加载moduleA。js,此时模块moduleA。js还没有执行完,返回模块moduleA。js的出口对象给到模块moduleB。李js;

<李>

模块moduleB。js加载完后,其中有个moduleA。js中挂载了全局的变量的年龄,所以能打印出来,最后将模块moduleB。js的出口对象给到模块moduleA。李js;

很有意思的是,在代码执行前,会用一个封装器将执行代码段封装起来

怎么在node . js中使用模块模块