node内模块以及载入顺序为:
- 内置模块
- 文件模块
- 文件目录模块
- 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是相同的,即两个引用都指向了同一个模块对象。
网友评论