CommonJs对模块的定义主要分为模块引用、模块定义、模块标识3个部分。
1.模块引用
模块引用的示例代码如下:
var math = require("match");
2.模块定义
在模块化中,上下文提供require()方法来引入外部模块。对应引入的功能,上下文提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在一个module对象,它代表模块自身,而exports是module的属性。在Node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式:
1 //math.js 2 exports.add = function(){ 3 var sum = 0; 4 var i = 0; 5 var args = arguments; 6 var l = args.length; 7 while(i < l){ 8 sum += args[i++]; 9 } 10 return sum; 11 };
在另一个文件中,我们通过require()方法引入模块后,就能调用定义的属性或方法:
1 //program.js 2 var math = require("math"); 3 exports.increment = function(val){ 4 return math.add(val, 1); 5 };
3.模块标识
模块标识其实就是传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以“.”、“..”开头的相对路径,或者绝对路径。它可以没有文件名后缀".js"。
模块的意义在于将类聚的方法和变量等限定在私有的作用域中,同时支持引入和导出功能以顺畅的连接上下游依赖。如下图所示,每个模块具有独立的空间。它们互不干扰,在引用的时候也显得干净利落。