【整理】 JavaScript模块化规范AMD 和 CMD 的界别有哪些?

     
近日,微博刷屏之凡相同则内蒙女子为冻身亡的信息,即《内蒙古一样农妇负气下车吃冻亡
情人自顾离去被捕》。

根据玉伯等人口当知乎上之作答整理。整理中。。。

     
事件回放:2月21日深夜11时字,内蒙古满州里市郊外,一针对中年情侣驾车行驶,因语言失和,女子负气下车,男子则开车离去;约一半小时后,男子到下发不妥,驾车回到沿途寻找未果;次日一早,女子让察觉已经冻死于路边雪地,后透过公安侦查该男子被捕。

AMD 规范在此间:https://github.com/amdjs/amdjs-api/wiki/AMD

      读之令人扼腕痛惜,随后想到一句话:一针对巨婴。

CMD 规范在这边:https://github.com/seajs/seajs/issues/242

     
首先,该妇女是巨婴。其想尽是:你要服从自己的意思,你莫任我之,我就是火,我生那么稀的暴,我都下车了,这么冷之天气,事态大惨重,你必须降于我,你应当迁就我、来随便自己。

背景

假如惦记将JavaScript提升及与其它编程语言一个级别之编程体验,包管理是一个不能不的东西。

头如labjs首先解决的凡js文件加载管理之题目。

LABjs 的中坚是 LAB(Loading and Blocking):Loading
指异步并行加载,Blocking 是因齐等待执行。LABjs 通过优雅的语法(script
和 wait)实现了即半颇特点,核心价值是性质优化。LABjs 是一个文件加载器。

RequireJS 和 SeaJS
则是模块加载器,倡导之凡一模一样种植模块化开发理念,核心价值是吃 JavaScript
的模块化开发变得重新简短自然。

模块加载器一般可降为文件加载器用,因此使用 RequireJS 和
SeaJS,也可上 LABjs 的性质优化目的。

AMD 是 RequireJS 在加大过程遭到针对模块定义的规范化产出。

CMD 是 SeaJS 在拓宽过程中针对模块定义之规范化产出。

仿佛之还有 CommonJS Modules/2.0 规范,是 BravoJS
在加大过程遭到针对模块定义之规范化产出。还有很多⋯⋯

这些专业的目的都是为着 JavaScript
的模块化开发,特别是在浏览器端的。目前这些专业的贯彻还能够达浏览器端模块化开发之目的。一般的话,AMD擅长在浏览器端、CMD擅长于劳务器端。

     
同样,其男朋友也是巨婴。他的想法是:你必从自己的意思,你免放我之,不服帖,不屈服,负气下车,即使天气非常寒冷,也没有用,我为要命火,我哉无见面降,你必降才行,否则你后果自负。

AMD与CMD区别

  1. 对因的模块,AMD 是提前实施,CMD 是缓执行。不过 RequireJS 从
    2.0 开始,也改成成为可以推执行(根据写法不同,处理方式不同)。CMD 推崇
    as lazy as possible.

  2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:

    // CMD
    define(function(require, exports, module) {
    var a = require(‘./a’)
    a.doSomething()
    // 此处有些去 100 行
    var b = require(‘./b’) // 依赖可以前后开
    b.doSomething()
    // …
    })

    // AMD 默认推荐的是
    define([‘./a’, ‘./b’], function(a, b) { // 依赖必须一致开始就是形容好
    a.doSomething()
    // 此处有些去 100 行
    b.doSomething()

    })

虽然 AMD 也支持 CMD 的写法,同时还支持用 require 作为依靠项传递,但
RequireJS
的作者默认是最为爱点的写法,也是合法文档里默认的模块定义写法。

  1. AMD 的 API 默认是一个当多只用,CMD 的 API
    严格区别,推崇职责单一。比如 AMD 里,require 分全局 require 和组成部分
    require,都于 require。CMD 里,没有大局
    require,而是根据模块系统的完备性,提供 seajs.use
    来贯彻模块系统的加载启动。CMD 里,每个 API 都简短纯粹。

  2. 还有一对细节差异,具体看这专业之概念就是哼,就无多说了。

另外,SeaJS 和 RequireJS
的差异,可以参考:https://github.com/seajs/seajs/issues/277

     
请各位不要笑他们。因为,在我们的夫妻关系、情侣关系和亲子关系中,或多或少都在这种态势。对这种形势较为严重或者经常出现的,可称之为巨婴配或巨婴对子。

RequireJS 和 SeaJS区别

RequireJS 和 SeaJS 都是异常不利的模块加载器,两者分别如下:

  1. 彼此定位来距离。RequireJS 想成为浏览器端的模块加载器,同时为想变成
    Rhino / Node 等环境之模块加载器。SeaJS 则在意于 Web
    浏览器端,同时通过 Node 扩展的法子得以挺有益跑在 Node 服务器端

  2. 彼此仍的正统有差别。RequireJS 遵循的凡
    AMD(异步模块定义)规范,SeaJS 遵循的是 CMD
    (通用模块定义)规范。规范的不等,导致了两边 API 的异。SeaJS
    更精简优雅,更靠近 CommonJS Modules/1.1 和 Node Modules 规范。

  3. 二者社区理念来出入。RequireJS 在尝试为第三在类库修改自身来支撑
    RequireJS,目前只有个别社区采纳。SeaJS
    不赛推进,而采用自主封装的办法来“海纳百川”,目前都发出较成熟之卷入策略。

  4. 彼此代码质量发生差异。RequireJS 是没有明白的 bug,SeaJS 是举世瞩目没有
    bug。

  5. 双方对调节等之支撑有反差。SeaJS 通过插件,可以实现 Fiddler
    中自行映射的功用,还得实现自动 combo
    等功能,非常好省事。RequireJS 无这点的支持。

  6. 双方的插件机制起差别。RequireJS
    采取的凡当源码中留给接口的样式,源码中留下出啊插件而写的代码。SeaJS
    采取的插件机制则同 Node
    的法同样:开放自己,让插件开发者可直接看还是涂改,从而充分灵活,可以实现各种类型的插件。

再有许多细节差异就无多说了。

总而言之,SeaJS 从 API 到实现,都比较 RequireJS 更简短优雅。如果说 RequireJS
是 Prototype 类库的话,则 SeaJS 是 jQuery 类库。

     
这种巨婴配,有些许单特性:第一,双方的活着动力机制,就是决定对方。两人数犹当决定对方,并以当决定着拿走征服感。因而决定我就是是目的,而无是故控制得其他利益。第二,控制对方的一手,就是发脾气。两人数的涉及,是一致场用火来进展的竞赛和博弈。生气既是决定对方的点子,也是失控而产成的产物。因而,失控就是决定的样式以及状态。

其他人经验

于是了5年差不多之RequireJs,和一段时间的SeaJs,补充一下别吧,

1、对于第3沾,其实,RequireJS早生矣Shim等支持,不需要修改第三正在类库就好了支持.如Ember,JQuery等援引,都直接可以异步加载为一个模块.

2、对于调试的支持,RequireJS2.1版本为支持了.

3、RequireJs的自包功能很强劲,很抱在CI下举行各种配置下之打包发布,非常灵活方便,SeaJs这面略力不由心.

4、对于模块的语法,RequireJs比较灵活,支持类似于SeaJs的语法

5、总体来说两独框架都不行不错.SeaJs借鉴了前任框架的群优点,发展势头不错.

RequireJs支持更健全一些,如Txt等文件文件之倚重,多本的Js依赖,多语言支持,打包比SeaJs要简明些,在Jenkins等CI环境遭受,不被系统环境的限制.文档和范例比SeaJs全多矣.缺点是:官方更新比较快,有广大次等新本子都多少不般配,如果你英文比较棘手,看文档可能就比较痛苦了.

SeaJs很简单,很多效果也在逐步到,但底层细节暴露于多,文档需要还补偿些.企当后来能主动,加以改进.

     
巨婴配之控制及失控,其展现表形式,或者说层次等,可分为三栽:一是争吵形式以及阶段,即经过言语实施之主宰,主要是屡见不鲜的扯皮、吵架现象。二是设协形式及阶段,即通过实际行为实行的决定,包括无理会对方,使用冷暴力,负气出活动等表现;其实,一些轻生事件,并非当事者真的想如果自杀,而是巨婴配之间玩弄的设协套路受挫或错所赋予。三是强力形式和阶段,即具备休行为体现吗暴力的支配,其中暴力程度较逊色之,是畸形或损坏砸东西,中度的是家庭暴力,最极致的凡损伤致死或谋杀。

其他人经验二

虽自己个人以来拘禁,requirejs上亲手便比seajs容易的几近。

1.seajs打包spm实在是极其碍事矣,这和r.js比起来简直不是一个水准。

2.requirejs支持css
@import依赖的卷入,对于未喜下less的童鞋,就有益多了。

3.对非AMD规范的js插件,require js提供了shim支持,非常方便。

4.requirejs时支持了sourcemap,配合grunt,简直爽爆了。

由于从左和部署达到之方便性来拘禁,我最终抛弃了seajs。

     
那么,人为什么会因此火来决定他人?其实,这是独十分差劲的问题,因为发作是全人类最低端的活策略,是动物的本能、进化之结果;所有的动物,都见面为此气来烕胁其他动物,从而保障自己。然而,人类就迈入为高等动物,懂得以智慧解决问题。但是,人类尚未更改少于是气来拍卖问题的惯。

     
故此,为了摆脱这这种低端生存方式,我们无限好控制情绪、避免上火,并选比较高端的小聪明策略。而内部,认识及对方是巨婴并招呼的,则是平等种植比较高明之方针。

     
总之,如果认识不至对方是巨婴,那么您肯定会生得要命惨痛。相反,如果会懂得对方是巨婴,并且吸纳该事实,你就会见如成人关照孩子一样比对方,你自己吗会为此变得成熟,如此简单人数之间的关联会变换得较协调,生活会过得其乐融融幸福;最着重之是,你见面通过对巨婴的观见与照料,反观自己呢是巨婴的实,你见面经破茧而出、获得新生。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图