在实际应用中,JavaScript的表现能力取决于宿主环境中的API支持程度。在Web1.0时代,只有对DOM、BOM等基本的支持。随着Web2.0的推进,HTML5崭露头角,将Web网页带进Web应用的时代,在浏览器中出现了更多、更强大的API供JavaScript调用。但是,Web在发展,浏览器中出现了更多的标准API,这些过程发生在前端,后端JavaScript的规范却远远落后。对于JavaScript自身而言,它的规范依然是薄弱的,有以下缺陷:
(1)没有模块系统CommonJS规范的提出,主要是为了弥补当前JavaScript没有标准的缺陷,已达到像Python、Ruby和Java具有开发大型应用的基础能力,而不是停留在小脚本程序阶段。
(1)服务器端JavaScript应用程序CommonJS构建模块导出和引入机制使得用户完全不必考虑变量污染。
CommonJS对模块的定义主要分为模块引用、模块定义和模块标识3个部分。
在CommonJS规范中,使用exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。
在模块中,存在一个module对象,它代表模块自身,而exports是module的属性。在NodeJS中,一个文件就是一个模块,将方法挂载exports对象上作为属性即可导出。
/* math.js */ exports.add = function(){ var sum = 0, i = 0, args = argumetns, l = args.length; while(i < l){ sum += args[i++]; } return sum; };
在CommonJS规范中,使用require()方法接受模块标识,以此引入一个模块的API到当前上下文。
/* program.js */ var math = require('math'); exports.increment = function(val){ return math.add(val, 1); };
模块标识其实就是传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以"./"、"../"开头的相对路径,或者绝对路径。它可以没有文件名后缀.js。
NodeJS借鉴CommonJS的Modules规范实现了一套非常易用的模块系统,NPM对Packages规范的完美支持使得Node应用在开发过程中事半功倍。
Node能以一种较成熟的姿态出现,离不开CommonJS规范的影响。在服务器端,CommonJS能以一种寻常的姿态进入各个公司的项目代码中,离不开Node优异的表现。
转载请写明出处:http://blog.csdn.net/ligang2585116