CommonJS

CommonJS是一个项目，其目标是为JavaScript在网页浏览器之外建立模块约定。创建这个项目的主要原因是当时缺乏普遍可接受形式的JavaScript脚本模块单元，模块在与运行JavaScript脚本的常规网页浏览器所提供的不同的环境下可以重复使用。

## 历史

[编辑]

这个项目由Mozilla工程师Kevin Dangoor于2009年1月发起，最初名为ServerJS[1]。在2009年8月，这个项目被改名为“CommonJS”来展示其API的广泛的应用性[2]。有关规定在一个开放进程中被建立和认可，一个规定只有在已经被多个实现完成之后才被认为是最终的[3]。 CommonJS不隶属于致力于ECMAScript的Ecma国际的工作组 TC39，但是TC39的一些成员参与了这个项目[4]。

在2013年5月，Node.js軟體套件管理系統(npm)的作者Isaac Z. Schlueter，宣布Node.js已弃用CommonJS，Node.js核心开发者应避免使用它[5]。

## 规定

[编辑]

规定列表包括[6]：

### 当前

[编辑]

* Modules/1.0 (被Modules/1.1取代)
* Modules/1.1
* Modules/1.1.1
* Packages/1.0
* System/1.0

### 提议

[编辑]

* Binary/B
* Binary/F
* Console
* Encodings/A
* Filesystem/A
* Filesystem/A/0
* Modules/Async/A
* Modules/Transport/B
* Packages/1.1
* Packages/Mappings
* Unit Testing/1.0

## 模块

[编辑]

require是一个函数，require函数接受一个模块标识符，require返回外部模块的导出的API。如果要求的模块不能被返回则require必须throw一个错误。在模块内，有一个自由变量require，它满足上述定义。在模块内，有一个自由变量叫做exports，它是一个对象，模块在执行时可以向其增加模块的API。模块必须使用exports对象作为唯一的导出方式。[7]

在模块中，必须有一个自由变量module，它是一个对象。module对象必须有一个id属性，它是这个模块的顶层id。id属性必须是这样的：`require(module.id)`会从源出`module.id`的那个模块返回exports对象。（就是说`module.id`可以被传递到另一个模块，而且在要求它时必须返回最初的模块）。[8]

### 样例代码

[编辑]

math.js

exports.add = function() {
var sum = 0, i = 0, args = arguments, l = args.length;
while (i < l) {
sum += args[i++];

return sum;

increment.js

var add = require('math').add;
exports.increment = function(val) {
return add(val, 1);

program.js

var inc = require('increment').increment;
var a = 1;
inc(a); // 2

module.id == "program";

## 实现

[编辑]

* Akshell[9]
* Common Node[10]
* CommonJS Compiler - 命令行工具使Common JS模块适用于浏览器内使用[11]
* CommonJS for PHP - 针对PHP 5.3+的轻量级CommonJS实现[12]
* CouchDB[13]
* Flusspferd[14]
* GPSEE[15]
* Jetpack
* Joyent 智能平台[16]
* JSBuild[17]
* MongoDB[18]
* Narwhal (JavaScript平台)[19]
* Node.js[20]
* Persevere[21]
* PINF JavaScript装载器[22]
* RingoJS[23]
* SilkJS[24]
* SproutCore（英语：SproutCore）[25]
* TeaJS[26]
* Wakanda（英语：Wakanda (software)）[27]
* XULJet（英语：XULJet）[28]
* QUnit（英语：QUnit）

## 参见

[编辑]

* 服务器端JavaScript实现列表（英语：List of server-side JavaScript implementations）
* 文档对象模型（DOM），网页浏览器客户端应用程序接口（API），通常以JavaScript获得
* JSGI（英语：JSGI）

## 引用

[编辑]

1. ^ What Server Side JavaScript needs - Blue Sky On Mars.  [2019-05-17]. （原始内容存档于2017-12-24）.
2. ^ CommonJS: JavaScript Standard Library.  [2019-05-17]. （原始内容存档于2010-05-21）.
3. ^ ProposalProcess - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-09-06）.
4. ^ CommonJS: the First Year - Blue Sky On Mars.  [2019-05-17]. （原始内容存档于2017-09-06）.
5. ^ Schlueter, Isaac Z. Forget CommonJS. It's dead. **We are server side JavaScript.**. GitHub. 25 Mar 2013  [2019-05-17]. （原始内容存档于2015-05-08）.
6. ^ CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2019-05-17）.
7. ^ Modules/1.0 （页面存档备份，存于互联网档案馆）.
8. ^ Modules/1.1.1 （页面存档备份，存于互联网档案馆）.
9. ^ Server-side JavaScript development and hosting - Akshell.  [2020-09-25]. （原始内容存档于2018-04-08）.
10. ^ olegp/common-node @ GitHub.  [2019-05-17]. （原始内容存档于2012-11-21）.
11. ^ \- GitHub.  [2019-05-17]. （原始内容存档于2018-09-30）.
12. ^ DrBenton/CommonJSForPHP - GitHub.  [2019-05-17]. （原始内容存档于2019-09-24）.
13. ^ Implementations/CouchDB - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-04-26）.
14. ^ Flusspferd - CommonJS平台 | Javascript的C绑定.  [2019-05-17]. （原始内容存档于2013-01-28）.
15. ^ Implementations/GPSEE - CommonJS规范Wiki.  [2019-05-17]. （原始内容存档于2017-04-26）.
16. ^ Implementations/Smart - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-04-26）.
17. ^ Homepage - JSBuild.  [2019-05-17]. （原始内容存档于2011-01-04）.
18. ^ MongoDB.  [2019-05-17]. （原始内容存档于2014-01-22）.
19. ^ Implementations/Narwhal - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-04-26）.
20. ^ Implementations/node.js - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-08-30）.
21. ^ Implementations/Persevere - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-04-25）.
22. ^ pinf/loader-js - GitHub.  [2019-05-17]. （原始内容存档于2014-01-07）.
23. ^ Implementations/RingoJS - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-04-25）.
24. ^ SilkJS WWW Site.  [2019-05-17]. （原始内容存档于2017-09-12）.
25. ^ Implementations/SproutCore - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-04-25）.
26. ^ Implementations/TeaJS - CommonJS Spec Wiki.  [2019-05-17]. （原始内容存档于2017-04-26）.
27. ^ Wakanda.  [2019-05-17]. （原始内容存档于2012-06-04）.
28. ^ xuljet - XUL JavaScript Enhanced Toolkit - Google Project Hosting.  [2019-05-17]. （原始内容存档于2011-02-12）.

## 外部链接

[编辑]

* 官方网站
* CommonJS effort sets JavaScript on path for world domination. Ars Technica. Dec 2009  [2019-05-17]. （原始内容存档于2011-08-22）.

* 查
* 论
* 编

ECMAScript

语言|

* ActionScript
* Caja（英语：Caja project）
* JavaScript
* 引擎
* Asm.js
* JScript
* JScript .NET
* QtScript
* TypeScript
* WMLScript（英语：WMLScript）
* Dart
* CoffeeScript

引擎列表
（引擎比较）|

* Carakan
* Futhark
* InScript（英语：InScript (JavaScript engine)）
* JavaScriptCore
* JScript
* KJS
* Linear B
* Narcissus（英语：Narcissus (JavaScript engine)）
* QtScript
* Rhino
* SpiderMonkey
* TraceMonkey
* JägerMonkey
* Tamarin
* V8
* ChakraCore
* Chakra
* JScript .NET
* Nashorn（英语：Nashorn (JavaScript engine)）

框架|

| 客户端|

* Ample SDK（英语：Ample SDK）
* Chaplin.js（英语：Chaplin.js）
* Dojo
* Echo
* Extjs
* Google網頁工具包
* JQuery
* Lively Kernel（英语：Lively Kernel）
* midori（英语：Midori JavaScript Framework）
* MochiKit（英语：MochiKit）
* MooTools（英语：MooTools）
* Prototype
* Pyjs（英语：Pyjs）
* qooxdoo（英语：qooxdoo）
* Rialto（英语：Rialto Toolkit）
* Rico
* script.aculo.us（英语：script.aculo.us）
* SmartClient（英语：SmartClient）
* SproutCore（英语：SproutCore）
* Spry（英语：Spry framework）
* Wakanda框架（英语：Wakanda (software)）
* 雅虎UI库

|

服务器|

* AppJet（英语：AppJet）
* Jaxer（英语：Jaxer#Aptana Jaxer）
* Node.js
* Deno
* WakandaDB（英语：Wakanda (software)）

多種實作|

* Cappuccino（英语：Cappuccino (application development framework)）
* Objective-J（英语：Objective-J）
* PureMVC（英语：PureMVC）

函式庫|

* Backbone.js
* SWFObject（英语：SWFObject）
* SWFAddress（英语：SWFAddress）
* Lodash

人物|

* 布蘭登·艾克
* 道格拉斯·克羅克福特
* 約翰·雷西格
* Scott Isaacs（英语：Scott Isaacs）

其他|

* DHTML
* Ecma国际
* JSDoc（英语：JSDoc）
* JSGI（英语：JSGI）
* JSHint
* JSLint
* JSON
* JSSS（英语：JavaScript Style Sheets）
* Sputnik（英语：Sputnik (JavaScript conformance test)）
* SunSpider（英语：Browser speed test#SunSpider）
* 异步模块定义（英语：Asynchronous module definition）
* CommonJS

JavaScript库列表
Ajax框架（英语：list of Ajax frameworks#JavaScript）

JavaScript框架（英语：Comparison of JavaScript frameworks）
服务器端JavaScript（英语：comparison of server-side JavaScript solutions）

* 查
* 论
* 编

Node.js

软件|

* Node.js
* Npm
* V8
* CommonJS

框架|

* MEAN
* MongoDB
* Express.js
* AngularJS/Angular
* MEEN
* 以Ember.js取代Angular
* Backbone.js
* Meteor (Web應用框架)（英语：Meteor (web framework)）
* Sails.js（英语：Sails.js）

* Lodash
* Underscore.js（英语：Underscore.js）
* React.js
* Vue.js

编程语言|

* JavaScript
* CoffeeScript
* TypeScript

云平台|

* Joyent
* Nodejitsu（英语：Nodejitsu）
* OpenShift
* Linode
* DigitalOcean
* Google App Engine

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板