最近在使用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. 使用maven来管理您的java项目

    maven是一个项目管理工具,使用maven可以自动管理java项目的整个生命周期,包括编译.构建.测试.发布和报告等.在大型项目开发中,使用maven来管理是必不可少的. 一.安装maven 1.W ...

  2. mysql的一些基本操作语句

    -- 创建一个php2016的数据库create database php2016;-- 查看数据库的创建创建语句show create database php2016;-- 指定默认的操作数据库u ...

  3. scrum3.0

    3.0----------------------------------------------------- SCRUM 流程的步骤2: Spring 计划 1. 确保product backlo ...

  4. BAT脚本打印空行的使用方法

    @echo off echo= echo, echo; echo+ echo/ echo[ echo] echo: echo. echo\ pause 这十种方法可以分为三组,每组的效率依次递减. 至 ...

  5. JAVA基础语法。

    1.java数据类型和变量布尔型.短整型.整型.长整型.浮点型.双精度型.字符型.字节型.8中数据类型结构.2. 变量的作用域3.常量.关键字.标识符4.运算符和表达式 4.1算术运算符 4.2位运算 ...

  6. nodejs框架express快速开始

    认识express 创建应用 get请求 简述中间件 all方法 use方法1 use方法2 回调函数 获取主机.路径名 Get请求 - query Get请求 - param Get请求 - par ...

  7. Spring 文章推荐

    spring mvc 异常统一处理方式:http://www.cnblogs.com/xd502djj/archive/2012/09/24/2700490.html 在springmvc中使用hib ...

  8. JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...

  9. RegExp类型,单体内置对象

    1.RegExp类型:  1)什么是正则表达式:RegExp    --是一种规则,模式    --强大的字符串匹配工具    --创建:    --使用RegExp构造函数创建:var re=new ...

  10. Android中帧布局-FrameLayout和网格布局-GridLayout

    帧布局-FrameLayout 一.概念 帧布局中,容器为每个加入其中的空间创建一个空白的区域(成为一帧).每个空间占据一帧,这些帧会按gravity属性自动对齐. 帧布局的效果是将其中的所有空间叠加 ...