CMD/AMD

AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD
CMD 规范在这里:https://github.com/seajs/seajs/issues/242

AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出。
还有不少??

这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。
目前这些规范的实现都能达成浏览器端模块化开发的目的

区别:

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()

....
var b = require(‘./b‘) // 依赖在需要的时候书写
b.doSomething()
// ... 
})

// AMD 默认推荐的是
define([‘./a‘, ‘./b‘], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})

虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS 的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。

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

4. 还有一些细节差异,具体看这个规范的定义就好,就不多说了。

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

时间: 2024-10-13 05:28:13

CMD/AMD的相关文章

common js CMD/AMD 是什么 和他们之间的联系区别

知道JS有模块化开发的说法,也偶尔听过requireJs,AMD,CMD等等名字,甚至使用node的时候,还用过require之类的方法,但是对这些一直没有一个明确的认识和概念.想必这就是许多新手刚接触这方面知识时的一个普遍状态. 其实仅仅做一些基础的活儿的时候,并不需要对它们有太多的了解,知道怎么用就行了,管他是什么理念,是什么实现呢.于是人就懒下来了. 终于有一天,下定决心,一定要把这一块知识搞清楚,至少对此有个鲜明的认知,不再那么朦朦胧胧,A/C不分. 查了一些文章博客和知乎回答,发现大部

CMD AMD Commonjs

第一次发博文 难免有点小紧张 毕竟菜鸟害怕大神 .回到正题 为什么要有CommonJS? 首先 对我们起初的javascript,没有模块的概念 致使我们的小脚本仅仅在前端浏览器上面 发出它小小的光芒 ,于是一帮欧洲的帅小伙想要把Commonjs 应用到前端上来 这个时候就在JS中有了Commonjs规范 它的提出就是为了解决没有模块这个概念的瓶颈 它规定每一个js文件都是一个模块 模块与模块之间可以相互依赖 每个模块都是一个独立的作用域  那模块与我们的函数封装又有什么区别呢 显然 我们的函数

javascript开源协议(cmd/amd)的写法

// 定义的那个对象 var xxx = {}; // amd if(typeof define ==='function' && define.amd){     define(function(){return xxx}) } // cmd else if(typeof module !== 'undefined' && module.exports){     module.exports = xxx; } // window else{     window.xxx

模块(cmd amd)

Amd和Cmd的代表分别是require.js以及sea.js AMD (amd 提前读取并加载(前置读取并加载)) 是 RequireJS 在推广过程中对模块定义的规范化产出.https://github.com/amdjs/amdjs-api/wiki/AMD CMD (cmd 提前读取后加载) 是 SeaJS 在推广过程中对模块定义的规范化产出.https://github.com/seajs/seajs/issues/242 (NodeJS是CommonJS规范的实现,webpack 也

AMD 和 CMD

这是在网上收集的一些资料和自己的一些看法关于AMD和CMD AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMDCMD 规范在这里:https://github.com/seajs/seajs/issues/242 AMD 是 RequireJS 在推广过程中对模块定义的规范化产出.CMD 是 SeaJS 在推广过程中对模块定义的规范化产出.类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义

AMD,CMD.CommonJs和UMD还有es6的模块化对比

CommonJS CommonJS是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象. 例如: // foobar.js //私有变量 var test = 123; //公有方法 function foobar () { this.foo = function () { // do someing ... } this.bar = functi

对于模块加载:ES6、CommonJS、AMD、CMD的区别

运行和编译的概念 编译包括编译和链接两步. 编译,把源代码翻译成机器能识别的代码或者某个中间状态的语言. 比如java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.还简单的作一些比如检查有没有粗心写错啥关键字了啊.有啥词法分析,语法分析之类的过程. 链接,是把编译生成的二进制文件,组合成为一个系统可以执行的可执行文件. 运行: 把编译出来的可执行文件代码在系统中执行的过程,此时被装载到内存中. (代码保存在磁盘上没装入内存之前是个死家伙.只有跑到内存中才变成活的). 运行时类型检查就

vuejs心法和技法

http://www.cnblogs.com/kidsitcn/p/5409994.html 注意:本文记录作者在学习和使用vuejs开发中的点点滴滴,从vuejs1.0开始直到现在的vuejs2.0以后的版本.期中部分1.0的内容已经过时,仅作各位朋友参考,建议重点关注2.0相关的内容,会随着我对vuejs有了更多的体会后不断维护更新,也欢迎朋友们批评指正共同学习提高. 所有的vuejs组件都是被扩展的vue实例: var MyComponent = Vue.extend({ //扩展选项对象

web前端知识总结

1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的是想要颠覆人们对于前端只有三大块(html.css.js)的认识--做web前端需要的比这三大块要多得多. 拖了好几个月了,但是由于近期将要参加的某一个活动,我不得不这两天把这个东西整出来. 大家不要害怕,其实下文中的这个知识框架要比草图中的好看的多,草图大家权当没看见. 在看内容之前,先看一下这个知识框架的