最近在使用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. matlab编译器和程序发布

    如何把编写好的matlab程序转换成c/c++语言,如何编译m文件为可执行程序,如何在没有matlab配置环境的机器上运行你编译出来的可执行程序? 一:matlab的编译器设置 执行命令:mbuild ...

  2. curl常用选项详解

    curl常用选项详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 又是下班的时间了,让我们一起来学习一下今天的Linux命令吧~我一半只把自己常用的参数列出来,其他的有但是我们几 ...

  3. android开发中scrollview添加自定义view的滑动显示问题

    最近做了一个实战用到自定义view,由于view比屏幕大所以想放到scrollview中,如下程序.发现不显示.于是对scrollview进行了研究. <LinearLayout xmlns:a ...

  4. Windows Azure Azure 简介

    平台介绍 Windows Azure作为一个微软公有云平台,被寄予了厚望. 可以说Windows Azure与Windows RT一样是微软战略转型的重点. 2012年9月微软与中国本土的电信服务提供 ...

  5. 转 java中的session

    书中讲:以下情况,Session结束生命周期,Servlet容器将Session所占资源释放:1.客户端关闭浏览器2.Session过期3.服务器端调用了HttpSession的invalidate( ...

  6. windows+caffe(三)——求取图片的均值

    这个要在图片已经转化成lmdb格式下才能求均值... 1.查看caffe根目录下的bin是否存在compute_image_mean.exe(用的happey大神的) 如果没有存在,你需要打开Main ...

  7. java中如何获取昨天的当前日期

    在java里,获取昨天的当前日期,可以采用calendar来做,也可以采用date来做:如下: 1.采用calendar来做: Calendar cal=Calendar.getInstance(); ...

  8. Java 基础知识 问答

    1,Java为什么能跨平台运行?请简述原理. 因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码.然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由J ...

  9. Python Locust性能测试框架实践

    [本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...

  10. keytool的使用

    1. 创建数字证书 keytool -genkey -v -alias scent -dname "CN=John,OU=MNG,O=Corp,L=Hangzhou,ST=Zhejiang, ...