node模块载入机制

node内模块以及载入顺序为:

  1. 内置模块
  2. 文件模块
  3. 文件目录模块
  4. node_modules模块

内置模块

var http = require('http');

http即node内置模块

文件模块

绝对路径
var myMod = require('/home/base/my_mod')
相对路径
var myMod = require('./my_mod')
node中默认扩展名为js

文件目录模块

若直接require一个目录
var myMod = require(./folder)
node将搜索整个目录,node会假设目录就是一个包,先寻找package.json,若没有package.json就假设默认文件为index.js。若都没有则加载失败。
package.json定义为:
{ "name": "pack", "main": "modA.js" }
则目录返回模块modA.js,若package.json不存在,则寻找index.js。

载入node_module模块

如果模块名不是路径,也不是内置模块,Node将试图去当前目录的node_modules文件夹里搜索。如果当前目录的node_modules里没有找到,Node会从父目录的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)

输入如下

`

可以看到虽然require了两次,但modA.js仍然只执行了一次。mod1和mod2是相同的,即两个引用都指向了同一个模块对象。

你可能感兴趣的:(node模块载入机制)