【Node.js】Node 的模块定义和使用

Posted by 西维蜀黍 on 2019-01-17, Last Modified on 2021-09-21

模块定义和使用

在模块中, 上下文提供 require () 方法来引入外部模块。 对应引入的功能, 上下文提供了 exports 对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在 一个 module 对象,它代表模块自身,而 exports 是 module 的属性。在 Node 中,一个文件就是一个 模块,将方法挂载在 exports 对象上作为属性即可定义导出的方式:

// math.js 
exports.add = function () { 
	var sum = 0, 
	    i = 0, 
	    args = arguments, 
	    l = args.length;
    while (i < l) {
		sum += args[i++];
	}
	return sum; 
};

在另一个文件中,我们通过 require () 方法引入模块后,就能调用定义的属性或方法了:

// program.js 

var math = require('math'); 

exports.increment = function (val) {

	 return math.add(val, 1); 

};

在 Node 中引入模块,需要经历如下 3 个步骤。

  • (1) 路径分析
  • (2) 文件定位
  • (3) 编译执行

在 Node 中,模块分为两类:一类是 Node 提供的模块,称为核心模块;另一类是用户编写的 模块,称为文件模块

  • 核心模块部分在 Node 源代码的编译过程中,编译进了二进制执行文件。在 Node 进程启动 时,部分核心模块就被直接加载进内存中,所以这部分核心模块引入时,文件定位和编 译执行这两个步骤可以省略掉, 并且在路径分析中优先判断, 所以它的加载速度是最 快的。
  • 文件模块则是在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程,速 度比核心模块慢。

Reference

  • 《深入浅出 Node.js》