模块 module
reuqire
在Node中require用于在当前模块中加载使用别的模块,require函数参数为模块名/模块路径,可以是相对路径也可以是绝对路径,其中模块名中.js
可以省略
var foo1 = require('./foo');
var foo2 = require('./foo.js');
var foo3 = require('/home/user/foo');
var foo4 = require('/home/user/foo.js');
也可以使用require来解析一个json文件为json对象
exports
exports为当前模块的导出对象,用于导出模块的方法与属性,使用require函数使用模块时返回的就是当前模块的exports对象
exports.fun=()=>{
console.log("导出模块的方法")
}
exports.data="导出模块的属性"
module
module对象可以访问到当前模块的信息,可以用于替换当前模块的导出对象
核心模块 Core Modules
node的核心模块定义在Nodejs源代码的lib/目录下,require()
总是会优先加载这些模块,例如require('http')
就始终返回HTTP模块
模块的加载
在使用require函数加载模块时,若没有指定文件名,node会尝试自动加上.js
,.json
,.node
拓展名再加载
以目录为参数加载模块时,有一些方法,首先是根目录下查找package.json
{
"name" : "some-library",
"main" : "./lib/some-library.js"
}
则会试图加载当前目录的相对路径下的./lib/some-library.js
若main
入口指定的文件不存在则会报错
若目录中未找到package.json
文件,则会试图加载index.js
,index.node
若传递给require的模块不是一个核心模块并不是以/
,./
,../
开头,node则会尝试从它的当前目录里的/node_modules
里加载模块,若未找到则转到上一级目录再次以相同方式寻找
模块加载顺序总结
- 内置核心模块
- 以
/
,./
,../
开头,依次查找x
,x.js
,x.json
,x.node
- 将x当作目录并从
node_modules
中加载,若未找到重复定位到父目录查找