AMD 是 RequireJS 在推廣過程中對模組定義的規範化產出。CMD 是 SeaJS 在推廣過程中對模組定義的規範化產出。類似的還有 CommonJS Modules/2.0 規範,是 BravoJS 在推廣過程中對模組定義的規範化產出。還有不少⋯⋯這些規範的目的都是為了 JavaScript 的模組化開發,特別是在瀏覽器端的。目前這些規範的實現都能達成瀏覽器端模組化開發的目的。區別:
1. 對於依賴的模組,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從
2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.2. CMD 推崇依賴就近,AMD 推崇依賴前置。看程式碼:// CMDdefine(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 都簡單純粹。
AMD 是 RequireJS 在推廣過程中對模組定義的規範化產出。CMD 是 SeaJS 在推廣過程中對模組定義的規範化產出。類似的還有 CommonJS Modules/2.0 規範,是 BravoJS 在推廣過程中對模組定義的規範化產出。還有不少⋯⋯這些規範的目的都是為了 JavaScript 的模組化開發,特別是在瀏覽器端的。目前這些規範的實現都能達成瀏覽器端模組化開發的目的。區別:
1. 對於依賴的模組,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從
2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.2. CMD 推崇依賴就近,AMD 推崇依賴前置。看程式碼:// CMDdefine(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 都簡單純粹。