CMD规范(通用模块定义规范)(翻译)
最近在使用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);
- The define function accepts a single argument, the module
factory.define函数接受一个参数,模块工厂
- The factory may be a function or other valid values.
Factory可能是一个函数,或是一个可验证值
- 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”
- 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
- require is a function
require是一个函数
- require accepts a module identifier.
require接受一个模块标识
- require returns the exported API of the foreign module.
require返回一个外部模块对外公开的API
- If requested module cannot be returned, require should return null.
如果请求的模块没有返回API,require必须返回null
- require.async is a function require.async是一个函数
- require.async accepts a list of module identifiers and a optional callback function.
require.async接受一个模块标识列表和一个回调函数
- The callback function receives module exports as function arguments, listed in the same order as the order in the first argument.
回调函数接收第i中指定的作为参数的模块列表中的所有模块的的export作为函数参数,并且顺序和该列表中的模块顺序一致。
- 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
- module.uri
The full resolved uri to the module.
模块的完整可解析的uri
- module.dependencies
A list of module identifiers that required by the module.
模块依赖的其他模块标识列表
- module.exports
The exported API of the module. It is the same as exports object.
模块公开的export对象。
Module Identifier
- A module identifier is and must be a literal string.
模块标识必须是合法的字符串
- Module identifiers may not have a filename extensions like .js.
模块标识不能包含文件扩展名,如.js
- Module identifiers should be dash-joined string, such as foo-bar.
模块标识可以使用“-”连接,如foo-bar
- 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规范(通用模块定义规范)(翻译)的更多相关文章
- CMD (sea.js)模块定义规范
转自http://www.cnblogs.com/hongchenok/p/3685677.html CMD 模块定义规范 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(C ...
- Sea.js学习3——Sea.js的CMD 模块定义规范
在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...
- CMD 模块定义规范
在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...
- CMD模块定义规范
CMD 模块定义规范 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规 ...
- CMD 模块定义规范【转】
在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...
- AMD模块定义规范
AMD 即Asynchronous Module Definition,中文名是“异步模块定义”的意思.它是一个在浏览器端模块化开发的规范,服务器端的规范是CommonJS. 模块将被异步加载,模 ...
- JS模块规范 前端模块管理器
一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...
- UMD: 通用模块规范
既然CommonJs和AMD风格一样流行,似乎缺少一个统一的规范.所以人们产生了这样的需求,希望有支持两种风格的“通用”模式,于是通用模块规范(UMD)诞生了.
- CMD 规范是不是就是 commonJS 规范?
作者:giscafer链接:https://www.zhihu.com/question/20576942/answer/58094030来源:知乎著作权归作者所有,转载请联系作者获得授权. CMD是 ...
随机推荐
- uniq-删除重复
uniq常用于管道中,用来删除已使用sort排序完成的重复记录. uniq有3个好用的选项: -c 可在每个输出行之前加上该行重复的次数: -d 仅显示重复的行 -u 仅显示未重复的行
- Spring单实例、多线程安全、事务解析
原文:http://blog.csdn.net/c289054531/article/details/9196053 引言: 在使用Spring时,很多人可能对Spring中为什么DAO和Se ...
- [Android Tips] 1. Getting StatusBar Height
public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier(&quo ...
- IIS配置注意点
1.是否有权限 2.程序池是否为4.0集成 3.是否启用目录浏览模式:目录浏览==>启用(好像可以不用) 4.是否设置默认页面 5.其他的,百度. asp.net发布到IIS中出现错误:处理程序 ...
- Datatable的查找和排序(Datatable.Select)
Datatable 是一种常用的数据结构.数据类型有点类似于数据库中的表结构.在没有使用优秀的orm框架前,大部分的数据库的数据都是先变为Datatable 然后再通过代码转换变成 object. ...
- Scala正则和抽取器:解析方法参数
在<正则表达式基础知识>中概括了正则表达式的基础知识, 本文讲解如何使用正则表达式解析方法参数,从而可以根据 DAO 自动生成 Service. 在做 Java 项目时,常常要根据 DAO ...
- Jenkins入门系列之——01第一章 Jenkins是什么?
第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目. l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安 ...
- Tomcat 发布war包提示war包超出大小修改
error信息: java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$Size ...
- asp.net 之 购物车
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 模板引擎:ArtTemplate 使用入门和简单的使用
下载地址:https://github.com/aui/artTemplate 快速上手请参考:https://github.com/aui/artTemplate 通过阅读artTemplate原文 ...