CMD模塊定義規(guī)范
define(factory);
define用來定義模塊,接受factory參數(shù),factory可以是一個(gè)函數(shù)(表示模塊的構(gòu)造方法),也可以是一個(gè)對(duì)象或者是字符串(此時(shí)模塊的接口就是該對(duì)象或者字符串).
define(function(require,exports,module){
//模塊代碼
})
也可以是這樣define(id?(模塊標(biāo)識(shí)),deps?(模塊依賴數(shù)組形式),factory)
define('test',['jQuery'],function(require,exports,module){
//模塊代碼
})
require是一個(gè)方法,用來獲取其他模塊提供的接口.
var a = require('./a');//獲取模塊a的接口
a.doSomething(); //調(diào)用模塊的方法
require的書寫約定:
- 正確拼寫:factory的第一個(gè)參數(shù)命名必須是require
- 不要重新給require賦值
- 使用直接量:
require('my-module'),不要使用變量
異步加載模塊require.async(id,callback) ,當(dāng)要加載多個(gè)模塊時(shí),id可以變?yōu)閿?shù)組
exports是一個(gè)對(duì)象,用來向外提供模塊接口
difine(function(require,exports){
exports.foo = 'bar'; //對(duì)外提供foo屬性
exports.doSomething = function(){}
});
也可以不用exports,直接使用return向外提供
module string:是模塊的唯一標(biāo)識(shí),define的第一個(gè)參數(shù)id即為模塊的標(biāo)識(shí)
? module.uri:模塊的絕對(duì)路徑
? module.exports:當(dāng)前,=模塊對(duì)外提供的接口
模塊標(biāo)識(shí)
相對(duì)標(biāo)識(shí)以
.開頭,只會(huì)出現(xiàn)在define的factory里-
頂級(jí)標(biāo)識(shí)不以
.或者/開始,會(huì)相對(duì)于模塊的基礎(chǔ)路徑(base)來解析當(dāng) sea.js 的訪問路徑中含有版本號(hào)時(shí),base 不會(huì)包含 seajs/x.y.z 字串。 當(dāng) sea.js 有多個(gè)版本時(shí),這樣會(huì)很方便。 如果 sea.js 的路徑是: http://example.com/assets/seajs/1.0.0/sea.js 則 base 路徑是: http://example.com/assets/ 手動(dòng)配置base seajs.config({ base:'address' }) seajs.use()的相對(duì)路徑始終是普通路徑
模塊的加載啟動(dòng)
使用一個(gè)模塊
<script src="path/to/sea.js"></script>
<script>
seajs.use('./main');
</script>
seajs.use:用來在頁面中加載模塊,通過use方法,可以在頁面中加載任意的模塊
//加載完成時(shí)執(zhí)行回調(diào)
seajs.use('./main',function(){
main.init();
})
配置
seajs.config
seajs.config({
//別名配置,當(dāng)模塊標(biāo)識(shí)很長時(shí),可以使用alias來簡化
alias:{
'jquery':'jquery/jquery/1.1.0/jquery'
},
//路徑配置,當(dāng)目錄比較深時(shí)
path:{
'gallery': 'https://a.alipayobjects.com/gallery',
'app': 'path/to/app'
},
//變量配置
vars:{
'locale':'zh-cn'
},
//使用在:var lang = require('./i18n/{locale}.js'); vars配置的是模塊標(biāo)識(shí)的變量值,在標(biāo)識(shí)中用{key}標(biāo)識(shí)變量
//映射配置
map:{
},
//預(yù)加載,配置等到use時(shí)加載
preload:[
Function.prototype.bind ? '' : 'es5-safe',
this.JSON ? '' : 'json'
],
//基礎(chǔ)路徑
base:'',
//文件編碼
charset:'utf-8'
});