AMD 規範在這裏:https://github.com/amdjs/amdjs-api/wiki/AMD
CMD 規範在這裏:https://github.com/seajs/seajs/issues/242git
AMD 是 RequireJS 在推廣過程當中對模塊定義的規範化產出。
CMD 是 SeaJS 在推廣過程當中對模塊定義的規範化產出。
相似的還有 CommonJS Modules/2.0 規範,是 BravoJS 在推廣過程當中對模塊定義的規範化產出。
還有很多⋯⋯github
這些規範的目的都是爲了 JavaScript 的模塊化開發,特別是在瀏覽器端的。
目前這些規範的實現都能達成瀏覽器端模塊化開發的目的。api
區別:瀏覽器
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()
...
}) ui
雖然 AMD 也支持 CMD 的寫法,同時還支持將 require 做爲依賴項傳遞,但 RequireJS 的做者默認是最喜歡上面的寫法,也是官方文檔裏默認的模塊定義寫法。spa
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/277RequireJS 和 Sea.js 都是模塊加載器,倡導模塊化開發理念,核心價值是讓 JavaScript 的模塊化開發變得簡單天然。
二者的主要區別以下:
還有很多差別,涉及具體使用方式和源碼實現,歡迎有興趣者研究並發表見解。
總之,若是說 RequireJS 是 Prototype 類庫的話,則 Sea.js 致力於成爲 jQuery 類庫。
最後,向 RequireJS 致敬!RequireJS 和 Sea.js 是好兄弟,一塊兒努力推廣模塊化開發思想,這纔是最重要的。