最近在使用sea.js。大家知道sea.js遵循CMD规范。该规范的英文说明很简洁,我试着翻译了一下,旨在交流。

Common Module Definition

通用模块定义规范

This specification addresses how modules should be written in order to be interoperable in browser-based environment. By implication, this specification defines the minimum features that a module system must provide in order to support interoperable modules.

本规范规定如何定义和书写执行在浏览器环境中的js模块,这就是说,本规范定义了一个模块的最小API,这些API提供与该模块系统的交互。

  • Modules are singletons.

模块都是单例的。

  • New free variables within the module scope should      not be introduced.

模块范围内的自由变量不应该被引入。

  • Execution must be lazy.

模块的执行是按需执行的。

Module Definition

A module is defined with define keyword, which is a function.

模块是使用关键字“define”定义的一个函数。

define(factory);

  1. The define function accepts a      single argument, the module

factory.define函数接受一个参数,模块工厂

  1. The factory may be a function or      other valid values.

Factory可能是一个函数,或是一个可验证值

  1. If factory is a function, the first      three parameters of the function, if specified, must be      "require", "exports", and "module", in that      order.

如果factory是一个函数,如果参数指定了,这个函数的前三个参数,按照顺序这三个参数是“require”,“exports”,“module”

  1. If factory is not a function, then      the module's exports are set to that object.

如果factory不是一个函数,模块的exports必须设置成一个对象。

Module Context

In a module, there are three free variables: require, exports and module.

模块中三个变量:require,exports和module

define(function(require, exports, module) {

// The module code goes here

});

The require Function

  1. require is      a function

require是一个函数

    1. require accepts a module identifier.

require接受一个模块标识

    1. require returns the exported API of the foreign module.

require返回一个外部模块对外公开的API

    1. If requested module cannot be returned, require should return null.

如果请求的模块没有返回API,require必须返回null

  1. require.async is a function require.async是一个函数
    1. require.async accepts a list of module identifiers and a       optional callback function.

require.async接受一个模块标识列表和一个回调函数

    1. The callback function receives module exports as       function arguments, listed in the same order as the order in the first       argument.

回调函数接收第i中指定的作为参数的模块列表中的所有模块的的export作为函数参数,并且顺序和该列表中的模块顺序一致。

    1. If requested module cannot be returned, the       callback should receive null correspondingly.

如果请求的模块没有任何返回,回调函数也必须相应的按照顺序接收null。

The exports Object

In a module, there is a free variable called "exports", that is an object that the module may add its API to as it executes.

在模块中,还有一个参数“exports”,exports是一个对象,包含这个模块的所有API。

The module Object

  1. module.uri

The full resolved uri to the module.

模块的完整可解析的uri

  1. module.dependencies

A list of module identifiers that required by the module.

模块依赖的其他模块标识列表

  1. module.exports

The exported API of the module. It is the same as exports object.

模块公开的export对象。

Module Identifier

  1. A module identifier is and must be a literal      string.

模块标识必须是合法的字符串

  1. Module identifiers may not have a filename      extensions like .js.

模块标识不能包含文件扩展名,如.js

  1. Module identifiers should be dash-joined string,      such as foo-bar.

模块标识可以使用“-”连接,如foo-bar

  1. Module identifiers can be a relative path, like ./foo and ../bar.

模块标识可以使用相对路径,如 ./foo、../bar

Sample Code

A typical sample

math.js

define(function(require, exports, module) {

exports.add = function() {

var sum = 0, i = 0, args = arguments, l = args.length;

while (i < l) {

sum += args[i++];

}

return sum;

};

});

increment.js

define(function(require, exports, module) {

var add = require('math').add;

exports.increment = function(val) {

return add(val, 1);

};

});

program.js

define(function(require, exports, module) {

var inc = require('increment').increment;

var a = 1;

inc(a); // 2

module.id == "program";

});

Wrapped modules with non-function factory

object-data.js

define({

foo: "bar"

});

array-data.js

define([

'foo',

'bar'

]);

string-data.js

define('foo bar');

------------------------------------------------

来源:

https://github.com/cmdjs/specification/blob/master/draft/module.md

扩展:

https://github.com/seajs/seajs/issues/242

CMD规范(通用模块定义规范)(翻译)的更多相关文章

  1. CMD (sea.js)模块定义规范

    转自http://www.cnblogs.com/hongchenok/p/3685677.html   CMD 模块定义规范 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(C ...

  2. Sea.js学习3——Sea.js的CMD 模块定义规范

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

  3. CMD 模块定义规范

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

  4. CMD模块定义规范

    CMD 模块定义规范 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规 ...

  5. CMD 模块定义规范【转】

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

  6. AMD模块定义规范

    AMD 即Asynchronous Module Definition,中文名是“异步模块定义”的意思.它是一个在浏览器端模块化开发的规范,服务器端的规范是CommonJS.   模块将被异步加载,模 ...

  7. JS模块规范 前端模块管理器

    一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...

  8. UMD: 通用模块规范

    既然CommonJs和AMD风格一样流行,似乎缺少一个统一的规范.所以人们产生了这样的需求,希望有支持两种风格的“通用”模式,于是通用模块规范(UMD)诞生了.

  9. CMD 规范是不是就是 commonJS 规范?

    作者:giscafer链接:https://www.zhihu.com/question/20576942/answer/58094030来源:知乎著作权归作者所有,转载请联系作者获得授权. CMD是 ...

随机推荐

  1. Mac系统上用Node做APNS

    1.安装Node,下载地址:http://nodejs.org 2.更新npm,终端命令:sudo npm update npm -g 3.安装apn,终端命令:npm install apn 4.导 ...

  2. spring MVC配置详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  3. react input 获取/失去焦点

    <div className={ this.state.focus ? "dis_bottom_left_onfocus" : "dis_bottom_left&q ...

  4. 同事的游戏项目--Robocode-学习链接

    Robocode机器人库学习链接:http://www.pudn.com/search_db.asp?keyword=Robocode 官网 :http://robocode.sourceforge. ...

  5. android Thread和Service的区别

    http://www.cnblogs.com/devinzhang/archive/2012/01/11/2319433.html (zhuan)

  6. Jenkins TcpSlaveAgentListener Config

    http://wenku.baidu.com/link?url=wDbeRoqh8ERRvBKXsKVi7biWe8e369iZmYTfEFDz0aI1Sj5YjXq_AN1gFjFjiS0yBw0W ...

  7. 编写高性能Web应用程序的10个技巧

    这篇文章讨论了: ·一般ASP.NET性能的秘密 ·能提高ASP.NET表现的有用的技巧和窍门 ·在ASP.NET中使用数据库的建议 ·ASP.NET中的缓存和后台处理 使用ASP.NET编写一个We ...

  8. ADT中通过Android SDK Manager去安装x86的image时无法下载

    参考:http://www.crifan.com/adt_android_sdk_manager_can_not_download_package_x86_image/

  9. java 中继承,组合,重载,重写的实现原理 (转)

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  10. linux服务器默认连接数配置

    vi /etc/security/limits.d/90-nproc.conf * - nofile 65536* - nproc 65536root soft nproc unlimited vi ...