浅析JS中的模块规范(CommonJS,AMD,CMD)////////////////////////zzzzzz

浅析JS中的模块规范(CommonJS,AMD,CMD)
 
若是你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但以前也真的是听听而已。
 
   如今就看看吧,这些规范究竟是啥东西,干吗的。
 
 
 
1、CommonJS
 
 CommonJS就是为JS的表现来制定规范,由于js没有模块的功能因此CommonJS应运而生,它但愿js能够在任何地方运行,不仅是 浏览器中。
 
 CommonJS能有必定的影响力,我以为绝对离不开Node的人气,不过喔,Node,CommonJS,浏览器甚至是W3C之间有什么关系呢,我找到了个贴切的图:
 
 
 
  |---------------浏览器----- ------------------|        |--------------------------CommonJS----------------------------------|
 
  |  BOM  |       | DOM |        | ECMAScript |         | FS |           | TCP |         | Stream |        | Buffer |          |........|
 
  |-------W3C-----------|       |---------------------------------------Node--------------------------------------------------|
 
 
 
CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}
 
require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,惟一的导出口;module对象就表明模块自己。
 
 
 
好比说咱们就能够这样用了:
 
复制代码
1 //sum.js
2 exports.sum = function(){...作加操做..};
4 //calculate.js
5 var math = require('sum');
6 exports.add = function(n){
7     return math.sum(val,n);
8 };
复制代码
 
 
虽然说Node遵循CommonJS的规范,可是相比也是作了一些取舍,填了一些新东西的。
 
不过,说了CommonJS也说了Node,那么我以为也得先了解下NPM了。NPM做为Node的包管理器,不是为了帮助Node解决依赖包的安装问题嘛,那它确定也要遵循CommonJS规范啦,它遵循包规范(仍是理论)的。
 
CommonJS WIKI讲了它的历史,还介绍了modules和packages等。
 
 
 
2、AMD
 
CommonJS是主要为了JS在后端的表现制定的,他是不适合前端的,为何这么说呢?
 
这须要分析一下浏览器端的js和服务器端js都主要作了哪些事,有什么不一样了:
 
 
 
---------------------------------------服务器端JS   |    浏览器端JS-------------------------------------------
 
                                   相同的代码须要屡次执行  |    代码须要从一个服务器端分发到多个客户端执行
 
                                     CPU和内存资源是瓶颈   |    带宽是瓶颈
 
                                        加载时从磁盘中加载   |    加载时须要经过网络加载
 
---------------------------------------------------------------------------------------------------------------
 
 
 
因而乎,AMD(异步模块定义)出现了,它就主要为前端JS的表现制定规范。
 
AMD就只有一个接口:define(id?,dependencies?,factory);
 
它要在声明模块的时候制定全部的依赖(dep),而且还要当作形参传到factory中,像这样:
 
 
 
1 define(['dep1','dep2'],function(dep1,dep2){...});
 
 
要是没什么依赖,就定义简单的模块,下面这样就能够啦:
 
 
 
1 define(function(){
2     var exports = {};
3     exports.method = function(){...};
4     return exports;
5 });
 
 
咦,这里有define,把东西包装起来啦,那Node实现中怎么没看到有define关键字呢,它也要把东西包装起来呀,其实吧,只是Node隐式包装了而已.....
 
RequireJS就是实现了AMD规范的呢。
 
这有AMD的WIKI中文版,讲了不少蛮详细的东西,用到的时候能够查看:AMD的WIKI中文版
 
 
 
3、CMD
 
大名远扬的玉伯写了seajs,就是遵循他提出的CMD规范,与AMD蛮相近的,不过用起来感受更加方便些,最重要的是中文版,应有尽有:seajs官方doc
 
 
 
1 define(function(require,exports,module){...});
 
 
用过seajs吧,这个不陌生吧,对吧。
相关文章
相关标签/搜索