seajs筆記

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的書寫約定:

  1. 正確拼寫:factory的第一個(gè)參數(shù)命名必須是require
  2. 不要重新給require賦值
  3. 使用直接量: 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í)

  1. 相對(duì)標(biāo)識(shí)以. 開頭,只會(huì)出現(xiàn)在define的factory里

  2. 頂級(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'
    })
    
  3. 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'
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是模塊化開發(fā)? 前端開發(fā)中,起初只要在script標(biāo)簽中嵌入幾十上百行代碼就能實(shí)現(xiàn)一些基本的交互效果,后來js...
    半世韶華憶闌珊閱讀 722評(píng)論 0 0
  • 為什么要使用模塊化? 最主要的目的:解決命名沖突依賴管理 其他價(jià)值提高代碼可讀性代碼解耦,提高復(fù)用性 CMD、AM...
    Eazer閱讀 769評(píng)論 3 1
  • 隨著前端業(yè)務(wù)復(fù)雜度的增加,模塊化成為一個(gè)大的趨勢(shì)。而在ES6還未被瀏覽器所支持的情況下,commonjs作為ES6...
    吳高亮閱讀 1,102評(píng)論 0 3
  • 1 個(gè)人理解;有錯(cuò)希望大家指出;稍后更新拖拽上傳文件; 2、commonJS commonjs的目標(biāo)是制定一個(gè)js...
    吳高亮閱讀 1,639評(píng)論 0 2
  • ArraySlice 的內(nèi)存結(jié)構(gòu) 基本操作 設(shè)計(jì)一個(gè)去重的Array函數(shù) 檢查CopyOnWrite 高階函數(shù)
    小萬叔叔閱讀 280評(píng)論 0 0

友情鏈接更多精彩內(nèi)容