CMD模組定義規範

2022-07-19 11:15:14 字數 3761 閱讀 5039

cmd(common module definition) 通用模組定義。在 cmd 規範中,乙個模組就是乙個檔案。

**的書寫格式如下:

define(factory);
define接受factory引數,factory可以是乙個函式,也可以是乙個物件或字串。

factory為物件、字串時,表示模組的介面就是該物件、字串。

factory為函式時,表示是模組的構造方法。執行該構造方法,可以得到模組向外提供的介面。factory方法在執行時,缺省會傳入三個引數:requireexportsmodule

define(function(require,exports,module));

define也可以接受兩個以上引數。字串id表示模組標識,陣列deps是模組依賴。比如:

define('hello',['jquery'],function(require,exports,module));

iddeps引數可以省略。省略時,可以通過構建工具自動生成。

注意:帶iddeps引數的define用法不屬於 cmd 規範,而屬於 modules/transport 規範。

define.cmd

乙個空物件,可用來判定當前頁面是否有 cmd 模組載入器:

if(typeof define==="function"&&define.cmd)
require

requirefactory函式的第乙個引數。

require是乙個方法,接受 模組標識 作為唯一引數,用來獲取其他模組提供的介面。

define(function(require,exports));

注意:在開發時,require的書寫需要遵循一些 簡單約定。
require.async

require.async方法用來在模組內部非同步載入模組,並在載入完成後執行指定**。callback引數可選。

define(function

(require,exports,module));//

非同步載入多個模組,在載入完成時,執行**require.async(['./c','./d'],function(c,d));});

注意:require是同步往下執行,require.async則是非同步**執行。require.async一般用來載入可延遲非同步載入的模組。

使用模組系統內部的路徑解析機制來解析並返回模組路徑。該函式不會載入模組,只返回解析後的絕對路徑。

define(function(require,exports));

這可以用來獲取模組路徑,一般用在外掛程式環境或需動態拼接模組路徑的場景下。

exports

exports是乙個物件,用來向外提供模組介面。

define(function(require,exports);});

除了給exports物件增加成員,還可以使用return直接向外提供介面。

define(function(require)

};});

如果return語句是模組中的唯一**,還可簡化為:

define(});

上面這種格式特別適合定義 jsonp 模組。

define(function(require,exports,module)

};});

提示exports僅僅是module.exports的乙個引用。在factory內部給exports重新賦值時,並不會改變module.exports的值。因此給exports賦值是無效的,不能用來更改模組介面。

module

module是乙個物件,上面儲存了與當前模組相關聯的一些屬性和方法。

模組的唯一標識。

define('id',,function(require,exports,module));

上面**中,define的第乙個引數就是模組標識。

根據模組系統的路徑解析規則得到的模組絕對路徑。

define(function(require,exports,module));

一般情況下(沒有在define中手寫id引數時),module.id的值就是module.uri,兩者完全相同。

dependencies是乙個陣列,表示當前模組的依賴。

當前模組對外提供的介面。

傳給factory構造方法的exports引數是module.exports物件的乙個引用。只通過exports引數來提供介面,有時無法滿足開發者的所有需求。 比如當模組的介面是某個類的例項時,需要通過module.exports來實現:

define(function(require,exports,module));

注意:對module.exports的賦值需要同步執行,不能放在**函式裡。下面這樣是不行的:

// x.jsdefine(function(require,exports,module);},0);
});

在 y.js 裡有呼叫到上面的 x.js:

// y.jsdefine(function(require,exports,module));

這就是 cmd 模組定義規範的所有內容。經常使用的 api 只有define,require,require.async,exports,module.exports這五個。其他 api 有個印象就好,在需要時再來查文件,不用刻意去記。

AMD模組定義規範

amd 即asynchronous module definition,中文名是 非同步模組定義 的意思。它是乙個在瀏覽器端模組化開發的規範,伺服器端的規範是commonjs。模組將被非同步載入,模組載入不影響後面語句的執行。所有依賴某些模組的語句均放置在 函式中。amd是requirejs在推廣過...

AMD模組定義規範

amd 即asynchronous module definition,中文名是 非同步模組定義 的意思。它是乙個在瀏覽器端模組化開發的規範,伺服器端的規範是commonjs。模組將被非同步載入,模組載入不影響後面語句的執行。所有依賴某些模組的語句均放置在 函式中。amd是requirejs在推廣過...

CMD規範學習

cmd規範全稱是common module definition。在這個規範中,主要規範了基本的書寫格式和互動規則。在cmd規範中,乙個模組就是乙個檔案。的書寫格式如下 define factory 其中define是乙個全域性函式函式,用來定義模組,define接受factory引數 factor...