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是 ...
随机推荐
- [SLAM]2D激光扫描匹配方法
1.Beam Model 2.Likehood field for k=1:size(zt,1) if zt(k,2)>0 d = -grid_dim/2; else d = grid_dim/ ...
- textarea与XSS攻击
textarea用法 一般是用来接收用户输入,用于提交到服务器端,例如 网站的评论框. 如果此框也用于显示服务器端回传的内容,则有如下两种用法 法1 后台直接插入 <textarea>&l ...
- Hibernate Validator验证标签说明
Hibernate Validator是JSR-303的一个实现. 在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比.注解更加简洁.灵活. Bean V ...
- TCP带外数据
传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据,协议一般不使用与普通数据相同 ...
- 如何关闭windows电脑的开机自启程序
很多时候我们打开电脑会发现,莫名其妙的出现一些已经在运行的程序了,这都是一些开机自启的软件之类的.可能你的电脑配置本来就不怎么高,开机还这样,那估计会很卡顿,那有什么方法可以关闭这些开机自动启动的程序 ...
- webApp 开发技术要点总结
如果你是一名前端er,又想在移动设备上开发出自己的应用,那怎么实现呢?幸好,webkit内核的浏览器能帮助我们完成这一切.接触 webkit webapp的开发已经有一段时间了,现把一些技巧分享给大家 ...
- 11. 星际争霸之php设计模式--备忘模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数007, match,图像匹配
<zw版·Halcon-delphi系列原创教程> Halcon分类函数007, match,图像匹配 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换 ...
- 执行gem install linne时报错
由于linner安装实际上是从 rubygems.org 获得的,而其被墙,所以,需要寻找国内的镜像进行安装: 第一种方法: gem sources --remove https://rubygems ...
- install cygwin
make clean