NodeJS:CommonJS规范

137 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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服务器网关接口、包管理等。