【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》