AMD 是 RequireJS 在推廣過程中對模塊定義的規範化產出。
CMD 是 SeaJS 在推廣過程中對模塊定義的規範化產出。
類似的還有 CommonJS Modules/2.0 規範,是 BravoJS 在推廣過程中對模塊定義的規範化產出。
還有不少⋯⋯
這些規範的目的都是爲了 JavaScript 的模塊化開發,特別是在瀏覽器端的。
目前這些規範的實現都能達成,瀏覽器端模塊化開發的目的。
區別:
- AMD在做依賴開發時,提倡的是依賴前置 ,而CMD則是延遲執行。(從RequireJS2.0開始,也改成可以延遲執行。根據寫法不同,處理方式不同)
- CMD提倡依賴就近原則,而AMD提倡依賴前置
在CMD中 一個依賴項可以在代碼內聲明,而在AMD中必須在代碼開始時首先聲明
雖然 AMD 也支持 CMD 的寫法,同時還支持將 require 作爲依賴項傳遞,但 RequireJS 的作者默認是最喜歡上面的寫法,也是官方文檔裏默認的模塊定義寫法。
AMD的 API 默認是一個當多個用, CMD的 API 嚴格區分,推崇職責單一。比如 AMD
裏,require
分全局 require
和局部 require
,都叫 require
。CMD 裏,沒有全局 require
,而是根據模塊系統的完備性,提供 seajs.use
來實現模塊系統的加載啓動。 CMD 裏,每個 API 都簡單純粹。