CommonJS、AMD和CMD

來源:互聯網
上載者:User

標籤:

CommonJS是用在伺服器端的,同步的,如nodejs ;AMD,CMD是用在瀏覽器端的,AMD是非同步模組載入,如requirejs;CMD是通用模組載入,如seajs 。其中,AMD先提出,CMD是根據CommonJS和AMD基礎上提出的。CommonJSCommonJs 是伺服器端模組的規範,Node.js採用了這個規範。根據CommonJS規範,一個單獨的檔案就是一個模組。載入模組使用require方法,該方法讀取一個檔案並執行,最後返迴文件內部的exports對象。 例如:foobar.js
/私人變數 var test = 123;  //公有方法 function foobar () {      this.foo = function () {         // do someing ...     }     this.bar = function () {         //do someing ...     } }  //exports對象上的方法和變數是公有的 var foobar = new foobar(); exports.foobar = foobar; 

使用foobar.js

//require方法預設讀取js檔案,所以可以省略js尾碼 var test = require(‘./boobar‘).foobar; test.bar();

CommonJS 載入模組是同步的,所以只有載入完成才能執行後面的操作。像Node.js主要用於伺服器的編程,載入的模組檔案一般都已經存在本地硬碟,所以載入起來比 較快,不用考慮非同步載入的方式,所以CommonJS規範比較適用。但如果是瀏覽器環境,要從伺服器載入模組,這是就必須採用非同步模式。所以就有了 AMD  CMD 解決方案。

AMD(Asynchromous Module Definition)

AMD 是 RequireJS 在推廣過程中對模組定義的正常化產出。AMD非同步載入模組。它的模組支援對象 函數 構造器 字串 JSON等各種類型的模組。

適用AMD規範適用define方法定義模組。如下:

//通過數組引入依賴 ,回呼函數通過形參傳入依賴 define([‘someModule1‘, ‘someModule2’], function (someModule1, someModule2) {      function foo () {         /// someing         someModule1.test();     }      return {foo: foo} }); 

AMD規範允許輸出模組相容CommonJS規範,這時define方法如下:

define(function (require, exports, module) {          var reqModule = require("./someModule");     requModule.test();          exports.asplode = function () {         //someing     } }); 
CMD

CMD是SeaJS 在推廣過程中對模組定義的正常化產出。CMD和AMD的區別有以下幾點:

1.對於依賴的模組AMD是提前執行,CMD是順延強制。不過RequireJS從2.0開始,也改成可以順延強制(根據寫法不同,處理方式不通過)。

2.CMD推崇依賴就近,AMD推崇依賴前置。

//AMD define([‘./a‘,‘./b‘], function (a, b) {      //依賴一開始就寫好     a.test();     b.test(); }); 
//CMD define(function (requie, exports, module) {          //依賴可以就近書寫     var a = require(‘./a‘);     a.test();          ...     //軟依賴     if (status) {              var b = requie(‘./b‘);         b.test();     } }); 

雖然 AMD也支援CMD寫法,但依賴前置是官方文檔的預設模組定義寫法。

3.AMD的api預設是一個當多個用,CMD嚴格的區分推崇職責單一。例如:AMD裡require分全域的和局部的。CMD裡面沒有全域的 require,提供 seajs.use()來實現模組系統的載入啟動。CMD裡每個API都簡單純粹。

 

 

參考其他博主的經驗以及部分個人總結,如有侵權,請及時聯絡本人,QQ:435641688,謝謝

 

CommonJS、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.