看到不少人傻傻的分不清楚 AMD、CMD 、 commonJS 、 es6的区别,实际上这跟这几年前段技术的发展有很大的关系。javascript
实际上这是JavaScript的模块化思想演进的一个过程。html
最开始的时候咱们都是在 首页 index.html 中,经过N多个<script>标签来引入各个js文件(每一个js 文件就是一个单独的模块)。这其中咱们的加载前后的顺序很是的受限制。须要根据依赖的前后进行依次加载。java
AMD首先它是一个规范 全称是Asynchronous Module Definition,即异步模块加载机制。AMD很短也很简单,但它却完整描述了模块的定义,依赖关系,引用关系以及加载机制。从它被requireJS,NodeJs,Dojo,JQuery使用也能够看出它具备很大的价值。AMD规范简单到只有一个API,即define函数:es6
define([module-name?], [array-of-dependencies?], [module-factory-or-object]);
经常使用的require.js就是这个的规范实现。服务器
CMD 是 SeaJS 在推广过程当中对模块定义的规范化产出。seaJs是国内著名工程师玉伯提出来的,它既遵循了amd规范,又遵循commonJs规范,因此称之为cmd规范。
异步
CommonJS规范是诞生比较早的。NodeJS就采用了CommonJS,这种写法适合服务端,由于在服务器读取模块都是在本地磁盘,加载速度很快。可是若是在客户端,加载模块的时候有可能出现“假死”情况,由于它是同步加载所要依赖的其余模块。模块化
es6 的意思是javascript 本事实现了 模块化的 不用再引入第三方库(如:require.js sea.js)函数