看到不少人傻傻的分不清楚 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)函數