最近在使用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. javascript源代码学习之五——jQuery.deferred

    jQuery.Defered——异步队列用于管理一组回调函数(成功resolve,失败reject,消息progress),基于上一节实现的jQuery.callbacks完成. done,fail, ...

  2. (转载)throw和throws的区别

    1.throw:(针对对象的做法)抛出一个异常,可以是系统定义的,也可以是自己定义的.下面举两个例子:抛出Java中的一个系统异常:public class One {public void yich ...

  3. 一种构造WEB服务器端recv和send接口阻塞现象的方法

    send阻塞 socket recv send接口阻塞,会导致服务器端不在响应客户端任何请求,所以一般情况, 会将socket设置为非阻塞状态, 但是有些场景,例如ssl_accept就需要使用阻塞的 ...

  4. EBS安装过程报错,oracle.apps.fnd.txk.config.ProcessStateException: FileSys OS COMMAND Failed : Exit=2 See log for details.

    日志: Executing command: /test/software/12/startCD/Disk1/rapidwiz/jre/Linux_x64/1.6.0/bin/java -cp /te ...

  5. 初识轻量级Java开源框架 --- Spring

    初识轻量级Java开源框架 --- Spring 作者:egg 微博:http://weibo.com/xtfggef 出处:http://blog.csdn.net/zhangerqing spri ...

  6. Zabbix通过percona监控MySQL

    因为Zabbix自带的MySQL监控没有提供可以直接使用的Key,所以一般不采用,业界的同学们都使用Percona Monitoring Plugins 监控 MySQL的方式 Percona介绍 P ...

  7. busybox-1.12.2编译提示“混合的隐含和普通规则”错误解决

    编译环境:CentOs 7.1 Ubuntu 12.0.4 都可以 交叉编译工具:gcc -4.3.2 (博创6410平台) 问题描述:执行make menuconfig命令的时候,提示Makefil ...

  8. Linux基础命令介绍七:网络传输与安全 wget curl rsync iptables

    本篇接着介绍网络相关命令:wget 文件下载工具.curl 网络数据传输工具.rsync 文件传输工具等. 本篇接着介绍网络相关命令 1.wget 文件下载工具 wget [option]... [U ...

  9. linux线程的实现【转】

    转自:http://www.cnblogs.com/zhaoyl/p/3620204.html 首先从OS设计原理上阐明三种线程:内核线程.轻量级进程.用户线程 内核线程 内核线程就是内核的分身,一个 ...

  10. Account Team使用说明

    Account  Team Account Team 以下简称客户小组. 背景介绍 帐户是与您的业务相关的公司和组织,每个帐户都存储了商家名称.地址和电话号码等信息.可以针对每个帐户存储相关的联系人. ...