CommonJS——<JavaScript:not just for browsers any more!>
2015-07-22 14:41
561 查看
CommonJS(http://www.commonjs.org/)规范为JavaScript制定了一个美好的愿景——希望JavaScript能够在任何地方运行。
在实际应用中,JavaScript的表现能力取决于宿主环境中的API支持程度。在Web1.0时代,只有对DOM、BOM等基本的支持。随着Web2.0的推进,HTML5崭露头角,将Web网页带进Web应用的时代,在浏览器中出现了更多、更强大的API供JavaScript调用。但是,Web在发展,浏览器中出现了更多的标准API,这些过程发生在前端,后端JavaScript的规范却远远落后。对于JavaScript自身而言,它的规范依然是薄弱的,有以下缺陷:
(1)没有模块系统
(2)标准库较少:ECMAScript仅定义了部分核心库,对于文件系统,I/O流等常见需求却没有标准的API。
(3)没有标准接口:在JavaScript中,几乎没有定义过如Web服务器或者数据库之类的标准统一接口。
(4)缺乏包管理系统:这导致JavaScript应用中基本没有自动加载和安装依赖的能力。
(1)服务器端JavaScript应用程序
(2)命令行工具
(3)桌面图形界面应用程序
(4)混合应用
CommonJS对模块的定义主要分为模块引用、模块定义和模块标识3个部分。
在模块中,存在一个module对象,它代表模块自身,而exports是module的属性。在NodeJS中,一个文件就是一个模块,将方法挂载exports对象上作为属性即可导出。
Node能以一种较成熟的姿态出现,离不开CommonJS规范的影响。在服务器端,CommonJS能以一种寻常的姿态进入各个公司的项目代码中,离不开Node优异的表现。
转载请写明出处:http://blog.csdn.net/ligang2585116
一、JavaScript变迁及现状
工具(浏览器兼容)--> 组件(功能模块)--> 框架(功能模块组织)--> 应用(业务模块组织)在实际应用中,JavaScript的表现能力取决于宿主环境中的API支持程度。在Web1.0时代,只有对DOM、BOM等基本的支持。随着Web2.0的推进,HTML5崭露头角,将Web网页带进Web应用的时代,在浏览器中出现了更多、更强大的API供JavaScript调用。但是,Web在发展,浏览器中出现了更多的标准API,这些过程发生在前端,后端JavaScript的规范却远远落后。对于JavaScript自身而言,它的规范依然是薄弱的,有以下缺陷:
(1)没有模块系统
(2)标准库较少:ECMAScript仅定义了部分核心库,对于文件系统,I/O流等常见需求却没有标准的API。
(3)没有标准接口:在JavaScript中,几乎没有定义过如Web服务器或者数据库之类的标准统一接口。
(4)缺乏包管理系统:这导致JavaScript应用中基本没有自动加载和安装依赖的能力。
二、CommonJS出发点
CommonJS规范的提出,主要是为了弥补当前JavaScript没有标准的缺陷,已达到像Python、Ruby和Java具有开发大型应用的基础能力,而不是停留在小脚本程序阶段。(1)服务器端JavaScript应用程序
(2)命令行工具
(3)桌面图形界面应用程序
(4)混合应用
三、CommonJS的模块规范
CommonJS构建模块导出和引入机制使得用户完全不必考虑变量污染。CommonJS对模块的定义主要分为模块引用、模块定义和模块标识3个部分。
1. 模块定义
在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; };
2. 模块引用
在CommonJS规范中,使用require()方法接受模块标识,以此引入一个模块的API到当前上下文。/* program.js */ var math = require('math'); exports.increment = function(val){ return math.add(val, 1); };
3. 模块标识
模块标识其实就是传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以"./"、"../"开头的相对路径,或者绝对路径。它可以没有文件名后缀.js。四、NPM、NodeJS、CommonJS关系
NodeJS借鉴CommonJS的Modules规范实现了一套非常易用的模块系统,NPM对Packages规范的完美支持使得Node应用在开发过程中事半功倍。Node能以一种较成熟的姿态出现,离不开CommonJS规范的影响。在服务器端,CommonJS能以一种寻常的姿态进入各个公司的项目代码中,离不开Node优异的表现。
转载请写明出处:http://blog.csdn.net/ligang2585116
相关文章推荐
- .net中如何实现json转化时只处理部分属性?
- JavaScript对数组进行随机重排的方法
- 【 D3.js 入门系列 --- 10.2 】 你可以拖动地图
- js脚本操作mongo库小知识
- javascript实现类似java的继承,单个方法继承
- jsoup 使用总结4--高级用法之 script js 脚本
- jsoup 使用总结3--高级用法之 not
- jsoup 使用总结2--高级用法之 :gt(n)
- jsoup 使用总结1--添加header
- JavaScript权威指南_134_第15章_脚本化文档_15.8-文档和元素的几何形状和滚动-查询元素的几何尺寸
- javascript 获取滚动条高度+常用js页面宽度与高度
- JavaScript 三种绑定事件方式之间的区别
- js中几种实用的跨域方法原理详解【转】
- jsp中上传图片(使用ajaxfileupload)
- js命名规范
- javascript中的事件流,事件处理程序/事件监听器
- js关联数组
- js判断undefined类型
- JavaScript检测上传文件大小的方法
- extjs4 treepanel checkbox 复选框 全选完美解决