AMD,CMD,CommonJS以及RequireJS和SeaJS的个人感悟

来源:互联网 发布:蒙古语词典软件 编辑:程序博客网 时间:2024/06/11 04:20

今天打开项目群,老大问我们:谁的项目现在在用CommonJS,由于我前段时间接手的项目用到了require来引入新的模块,所以立马说我用到了。之后发现不对经,我好像用的RequireJS模块。越想越觉得模糊,索性在网上找了些文档看了下,下面是我个人的感受。

CommonJS:就是用来规范JS的使用的,主要为了JS在后端的表现制定的,不太适合前端。它定了三个模块:模块引用的require,模块定义的exports和模块标识module。

AMD:是一种异步加载模块的方式,主要为前端JS的表现制定规范。只有一个模块define(id?,dependencies?,factory);

CMD:玉伯写了seaJS,就是遵从他提出的CMD规范。

关于RequireJS和SeaJS的区别和联系。

联系:两者都是js模块的加载器,倡导一种模块化开发的理念。

区别;

A.     定位差别。RequireJS不仅想成为浏览器端模块加载器,同时也设计后端的node部分;SeaJS则专注于WEB前端的。

B.      遵循规范。RequireJS遵循AMD的异步加载;SeaJS遵循CMD的模式,更加简洁。

C.      社区理念。RequireJS尝试让第三方库修改一满足它。而SeaJS则是自主封装来适应。

D.     RequireJS的bug不明显,SeaJS若存在bug会很明显。

E.      调试的支持。SeaJS通过插件实现一些RequireJS无法实现的功能。

F.       插件机制。RequireJS在源码中为插件预留接口;SeaJS开放自身,让插件开发者可以访问和修改,非常灵活。


CMD是在国内前端开发人员研究SeaJS的过程中发现的,它和AMD一样属于CommonJS规范的一种实现的定义,requireJS和seaJS是对应AMD和CMD的实践。

其中CMD的seaJS是一种按需加载的模式,定义一个模块的时候不需要立即制定模块之间的依赖模块,在需要用到的时候require就可以了;而AMD的requireJS相反,定义模块的时候需要定制依赖模块,并且所有的依赖模块都是先执行。

对应的seaJS在js程序中的执行顺序是按照顺序结构,从上到下一次加载,当遇到require某模块的时候再去调用某些模块。

对应的requireJS在js程序中的执行顺序是不确定的。在执行前,它会加载本模块依赖的其它模块,先将执行环境给构建好,然后在此基础之上再执行其他的语句。


0 0