seajs.config 用來對 SeaJS 進行配置。jquery
CMD 規範中,一個模塊就是一個文件。代碼的書寫格式以下:define(factory);
define 接受 factory 參數,factory 能夠是一個函數,也能夠是一個對象或字符串。
factory 爲對象、字符串時,表示模塊的接口就是該對象、字符串。數組
factory 爲函數時,表示是模塊的構造方法。
用來定義模塊。SeaJS 推崇一個模塊一個文件,遵循統一的寫法:函數
define(function(require, exports, module) {
// 模塊代碼
});工具
也能夠手動指定模塊 id 和依賴,require, exports 和 module 三個參數可酌情省略,具體用法以下。ui
define 也能夠接受兩個以上參數。字符串 id 表示模塊標識,數組 deps 是模塊依賴。在開發階段,推薦不要手寫 id 和 deps 參數,由於這兩個參數能夠在構建階段經過工具自動生成。spa
define(id, deps, factory)
define(‘hello’, [‘jquery’], function(require, exports, module) {
// 模塊代碼
});對象
require 是一個方法,接受模塊標識做爲惟一參數,用來獲取其餘模塊提供的接口。接口
define(function(require, exports) {作用域
// 獲取模塊 a 的接口
var a = require(‘./a’);開發
// 調用模塊 a 的方法
a.doSomething();
});
在書寫模塊代碼時,必須遵循這些規則。其實只要把 require 看作是語法關鍵字 就好啦。require 的參數值 必須 是字符串直接量。不要重命名 require 函數,或在任何做用域中給 require 從新賦值。模塊 factory 構造方法的第一個參數 必須 命名爲 require 。
exports 是一個對象,用來向外提供模塊接口。
define(function(require, exports) {
// 對外提供 foo 屬性
exports.foo = ‘bar’;
// 對外提供 doSomething 方法
exports.doSomething = function() {};
});
除了給 exports 對象增長成員,還可使用 return 直接向外提供接口。
define(function(require) {
// 經過 return 直接提供接口
return {
foo: ‘bar’,
doSomething: function() {};
};
});
若是 return 語句是模塊中的惟一代碼,還可簡化爲:
define({
foo: ‘bar’,
doSomething: function() {};
});
提示:exports 僅僅是 module.exports 的一個引用。在 factory 內部給 exports 從新賦值時,並不會改變 module.exports 的值。所以給 exports 賦值是無效的,不能用來更改模塊接口。
module 是一個對象,上面存儲了與當前模塊相關聯的一些屬性和方法。
module.id 模塊的惟一標識。
define(‘id’, [], function(require, exports, module) {
// 模塊代碼
});
上面代碼中,define 的第一個參數就是模塊標識。
module.exports 當前模塊對外提供的接口。
傳給 factory 構造方法的 exports 參數是 module.exports 對象的一個引用。只經過 exports 參數來提供接口,有時沒法知足開發者的全部需求。 好比當模塊的接口是某個類的實例時,須要經過 module.exports 來實現:
define(function(require, exports, module) {
// exports 是 module.exports 的一個引用
console.log(module.exports === exports); // true
// 從新給 module.exports 賦值
module.exports = new SomeClass();
// exports 再也不等於 module.exports
console.log(module.exports === exports); // false
});