一、CommonsJS对模块的定义极其简单,主要分为:
a、模块引用
在CommonJS规范中,存在require()方法,这个方法接受模块标识,以此引入一个模块的API到当前上下文中。
var math = require('math');
b、模块定义
在模块中,上下文提供require()方法来引入外部模块。对应引入的功能,上下文提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一的导出的出口。
此外,模块中还存在一个module对象,它代表模块自身,而exports是module的属性。
c、模块标识
模块标识其实就是传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以.、..开头的相对路径或者绝对路径。它可以没有文件名后缀.js 。
二、Node的模块实现。
Node在实现中并非完全按照规范实现,而是对模块规范进行了一定的取舍,同时也增加了少许自身需要的特性。
在Node中引入模块,需要经历三个步骤:
(1)路径分析
(2)文件定位
(3)编译执行
在Node 中,模块分为两类:一类是Node提供的模块,称为核心模块;另一类是用户编写的模块,称为文件模块。