这是我参与「第四届青训营 」笔记创作活动的第7天
CommonJS
在Javascript最开始的发展历程中,它的应用主要应用在前端,随着Web2.0的推进,Web网页逐渐演变为了Web应用,浏览器中出现了更多API功用户调用。但是这些发展主要集中在前端,后端Javascript的发展相较前端远远落后。它的缺陷主要集中在以下方面:1.没有模块系统,2.标准库较少(对文件系统、I/O流等需求没有提供标准API),3.没有标准接口,4。缺乏包管理系统。
为了弥补当前的缺陷,CommonJS提出了。
CommonJS的模块规范
CommonJS对模块的定义主要包括模块引用、模块定义、模块标识三个部分。
模块引用
在CommonJS规范中,存在require()方法,require方法接受一个模块标识,以此引入一个模块。
以下示例引入一个模块:
var k=require('k');
上面的代码引入了一个名为k的模块。
模块定义
exports对象用于导出当前模块的方法和变量。
一个示例:
exports.add = function(){
var sum = 0,
i = o,
args = arguments,
l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
};
在模块中,还存在一个module对象,它代表模块自身,而exports是module的属性。
在Node中,一个文件就是一个模块。
模块标识
模块标识就是模块的标识符,也就是模块的名字,它是模块传递给require()方法的参数。
命名规则
模块标识必须是符合小驼峰命名的字符串,或者以…、…开头的相对路径,或者绝对路径。它可以没有文件名后缀js。(事实上,它可以有js或者别的后缀,以后的博客中会介绍)
模块的定义避免了变量污染的问题,将一些变量限制在私有的作用域中。
NodeJS与CommonJS
NodeJS实现了CommonJS规范,实现了模块、二进制、Buffer、字符集编码、I/O流、进程环境、文件系统、套接字、单元测试、Web服务器网关接口、包管理等。