AMD 和 CMD 的區別有哪些?

來源:互聯網
上載者:User

標籤:

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()
// 此處略去 100 行
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

參考:http://www.zhihu.com/question/20351507/answer/14859415

AMD 和 CMD 的區別有哪些?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.