AMD模塊定義規范


AMD 即Asynchronous Module Definition,中文名是“異步模塊定義”的意思。它是一個在瀏覽器端模塊化開發的規范,服務器端的規范是CommonJS。
 
模塊將被異步加載,模塊加載不影響后面語句的運行。所有依賴某些模塊的語句均放置在回調函數中。
 
AMD 是 RequireJS 在推廣過程中對模塊定義的規范化的產出。
 

define() 函數

AMD規范只定義了一個函數 define,它是全局變量。函數的描述為:

define(id?, dependencies?, factory);
id:指定義中模塊的名字,可選;如果沒有提供該參數,模塊的名字應該默認為模塊加載器請求的指定腳本的名字。如果提供了該參數,模塊名必須是“頂級”的和絕對的(不允許相對名字)
 
          

模塊名的格式

 
          
模塊名是用正斜杠分割的有意義單詞的字符串 單詞須為駝峰形式,或者".",".." 模塊名不允許文件擴展名的形式,如“.js” 模塊名可以為 "相對的" 或 "頂級的"。如果首字符為“.”或“..”則為相對的模塊名 頂級的模塊名從根命名空間的概念模塊解析 相對的模塊名從 "require" 書寫和調用的模塊解析
模塊名用來唯一標識定義中模塊,它們同樣在依賴性數組中使用:
依賴dependencies:是一個當前模塊依賴的,已被模塊定義的模塊標識的數組字面量。 依賴參數是可選的,如果忽略此參數,它應該默認為["require", "exports", "module"]。然而,如果工廠方法的長度屬性小於3,加載器會選擇以函數的長度屬性指定的參數個數調用工廠方法。
工廠方法factory:模塊初始化要執行的函數或對象。依賴模塊必須根據模塊的工廠方法優先級執行,並且執行的結果應該按照依賴數組中的位置順序以參數的形式傳入(定義中模塊的)工廠方法中。如果為函數,它應該只被執行一次。如果是對象,此對象應該為模塊的輸出值。

例子

創建一個名為"alpha"的模塊,使用了require,exports,和名為"beta"的模塊:
 
define("alpha", ["require", "exports", "beta"], function (require, exports, beta) {
       exports.verb=function() {
           return beta.verb();
           //Or:returnrequire("beta").verb();
       }
   });
一個返回對象的匿名模塊:
   define(["alpha"], function (alpha) {
       return {
         verb:function(){
           return alpha.verb() +2;
         }
       };
   });
一個沒有依賴性的模塊可以直接定義對象:
   define({
     add:function(x, y){
       return x + y;
     }
   });
一個使用了簡單CommonJS轉換的模塊定義:
   define(function (require, exports, module) {
     var a =require('a'),
         b =require('b');

     exports.action=function () {};
   });

require API 介紹: https://github.com/amdjs/amdjs-api/wiki/require

AMD規范中文版:https://github.com/amdjs/amdjs-api/wiki/AMD-(%E4%B8%AD%E6%96%87%E7%89%88)

目前,實現AMD的庫有RequireJS 、curl 、Dojo 、Nodules 等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM