模块 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里加载模块,若未找到则转到上一级目录再次以相同方式寻找

模块加载顺序总结

  1. 内置核心模块
  2. /,./,../开头,依次查找x,x.js,x.json,x.node
  3. 将x当作目录并从node_modules中加载,若未找到重复定位到父目录查找