Node.jsNode.js的模块载入方式及编制

Node.js中模块可透过文件路径或名字获模块的援。模块的援会映射到一个js文件路径,除非她是一个Node内置模块。Node的放模块公开了有的常用之API给开发者,并且它于Node进程开始的时节便预加载了。

 

旁的而经NPM安装的老三正模块(third-party modules)或当地模块(local
modules),每个模块都见面暴露一个公开的API。以便开发者可以导入。如

var mod = require('module_name')

夫句执行后,Node内部会载入内置模块或经NPM安装的模块。require函数会返回一个靶,该对象公开之API可能是函数,对象,或者性质如函数,数组,甚至随意档次的JS对象。

 

此间列下node模块的载入及缓存机制

  1. 载入内置模块(A Core Module)
  2. 载入文件模块(A File Module)
  3. 载入文件目录模块(A Folder Module)
  4. 载入node_modules里的模块
  5. 机关缓存已载入模块

 

一样、载入内置模块

Node的置模块于编译为二进制形式,引用时一直行使名字只要无文件路径。当第三正的模块和坐模块同名时,内置模块将掩盖第三正同名模块。因此命名时索要注意不要同放开模块同名。如得一个http模块

var http = require('http')

回的http即是兑现了HTTP功能Node的放到模块。

 

亚、载入文件模块

绝对路径的

var myMod = require('/home/base/my_mod')

 

或者相对路径的

var myMod = require('./my_mod')

 

瞩目,这里忽略了扩大名“.js”,以下是针对顶之

var myMod = require('./my_mod')
var myMod = require('./my_mod.js')

  

老三、载入文件目录模块

可直接require一个目录,假设有一个索引名也folder,如

var myMod = require('./folder')

这会儿,Node将寻找整个folder目录,Node会假设folder为一个管教并试图找到包定义文件package.json。如果folder目录里没包含package.json文件,Node会假设默认主文件呢index.js,即会加载index.js。如果index.js也未在,那么加载将败。

 

若果目录结构如下

 

package.json定义如下

{
    "name": "pack",
    "main": "modA.js"
}

这时 require(‘./folder’)
将回来模块modA.js。如果package.json不存,那么将回到模块index.js。如果index.js也未有,那么以生出载入异常。

 

四、载入node_modules里的模块

而模块名不是路径,也未是停放模块,Node将拟去当前目录的node_modules文件夹里搜索。如果当前目录的node_modules里不曾找到,Node会从父目录的node_modules里寻找,这样递归下去直到彻底目录。

不必顾虑,npm命令可给咱们非常有益于的失去装,卸载,更新node_modules目录。

 

五、自动缓存已载入模块

对此已经加载的模块Node会缓存下来,而不必每次都还寻找。下面是一个示范

modA.js

console.log('模块modA开始加载...')
exports = function() {
    console.log('Hi')
}
console.log('模块modA加载完毕')

 

init.js

var mod1 = require('./modA')
var mod2 = require('./modA')
console.log(mod1 === mod2) 

 

命令执行执行:

node
init.js 

 

输入如下

 

得视虽然require了少于不善,但modA.js仍然只是实行了同样涂鸦。mod1和mod2是平等的,即有限独援都负于了和一个模块对象。