Javascript在Node出现之后,比别的编程语言多了一项优势,就是一些模块可以在前后端共用,这是因为很多API在各个宿主环境下都提供。
2.7.1 模块的侧重点
前后端Javascript分别搁置在Http的两端,它们扮演的角色并不同。客户端而言,它是从同一个服务器端分发到多个客户端执行。而服务器端相同的代码需要多次执行,前者的瓶颈是带宽,后者的瓶颈则在于CPU和内存资源等。
鉴于网络原因, CommonJS为后端制定的规范并不适合前端的应用场景。经过一段时间后,AMD(Asynchronous Module Definition)规范胜出。
2.7.2 AMD规范
AMD规范是CommonJS模块规范的一个延伸,它的模块定义如下:
define(id?,dependencies?,factory);
它的模块id和依赖是可选择的,与Node模块相似的地方在于factory的内容就是实际代码的内容。
下面代码定义一个简单的模块:
define(function(){
var exports = {};
exports.sayHello = function(){
alert(‘hello from module:’+module.id);
};
});
不同之处有两点:
1.AMD需要用define明确定义一个模块,而Node实现是隐士包装。
2.AMD的内容需要通过返回的方式实现导出。
2.7.3 CMD规范
CMD规范与AMD规范主要区别在于定义模块和依赖引入的部分。AMD需要在声明模块的时候指定所有的依赖,通过形参传递依赖到模块内容中:
define([‘dep1’,‘dep2’],function(dep1,dep2){
return function(){};
});
与AMD规范相比,CMD规范更接近于Node对CommonJS规范的定义。