cmd
(common module definition) 通用模組定義。在 cmd 規範中,乙個模組就是乙個檔案。
**的書寫格式如下:
define(factory);
define
接受factory
引數,factory
可以是乙個函式,也可以是乙個物件或字串。
factory
為物件、字串時,表示模組的介面就是該物件、字串。
factory
為函式時,表示是模組的構造方法。執行該構造方法,可以得到模組向外提供的介面。factory
方法在執行時,缺省會傳入三個引數:require
、exports
和module
:
define(function(require,exports,module));
define
也可以接受兩個以上引數。字串id
表示模組標識,陣列deps
是模組依賴。比如:
define('hello',['jquery'],function(require,exports,module));
id
和deps
引數可以省略。省略時,可以通過構建工具自動生成。
注意:帶id
和deps
引數的define
用法不屬於 cmd 規範,而屬於 modules/transport 規範。
define.cmd
乙個空物件,可用來判定當前頁面是否有 cmd 模組載入器:
if(typeof define==="function"&&define.cmd)
require
require
是factory
函式的第乙個引數。
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...