1. exports变量

为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。

1
var exports = module.exports;
  • 注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。
  • 如果模块输出的是一个函数,那就不能定义在exports对象上面,而要定义在module.exports变量上面。

2. require命令

require命令的基本功能是,读入并执行一个JavaScript文件,然后返回该模块的exports对象。如果没有发现指定模块,会报错。

  • require命令调用自身,等于是执行module.exports
  • require命令用于加载文件,后缀名默认为.js。如果指定的模块文件没有发现,Node会尝试为文件名添加.js、.json、.node后,再去搜索。.js件会以文本格式的JavaScript脚本文件解析,.json文件会以JSON格式的文本文件解析,.node文件会以编译后的二进制文件解析。如果想得到require命令加载的确切文件名,使用require.resolve()方法。

3. 环境变量NODE_PATH

Node执行一个脚本时,会先查看环境变量NODE_PATH。它是一组以冒号分隔的绝对路径。在其他位置找不到指定模块时,Node会去这些路径查找。