Seajs使用實(shí)例入門(mén)介紹

seajs是啥衙传,可以看看這篇前端模塊化(CommonJs,AMD和CMD)
點(diǎn)我點(diǎn)我--項(xiàng)目源碼地址:https://github.com/linwalker/seajs-demo

本文所用例子的代碼目錄結(jié)構(gòu):

seajs example
    |--sea-module      //存在依賴(lài)文件
        |--jquery
            |--jqeury.js
        |--sea.js   
    |--static         //存放自定義模塊js
        |--main.js
    |--index.html     //調(diào)用頁(yè)面

seajs頁(yè)面引入

下面開(kāi)始,首先看下index:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>seajs example</title>
</head>
<body>
<h1 id="title">seajs demo</h1>
<script src="sea-module/sea.js"></script>
<script>
    seajs.use('./static/main.js');
</script>
</body>
</html>

首先引入sea.js文件蒙保,然后通過(guò)seajs.use加載main.js文件革骨。我們?cè)賮?lái)看看main.js:


define(function(require,exports,module) {
    var title= document.getElementById('title');
    title.innerHTML = "yes it works"
})

define()用來(lái)定義模塊文件仿荆,具體參數(shù)等介紹可以參考文章開(kāi)頭介紹的文章朱躺。此處雇锡,頁(yè)面會(huì)輸出yes it works,是main.js修改了id為title的標(biāo)簽的文本內(nèi)容箫锤,并沒(méi)有引用其他模塊文件贬蛙。

模塊文件引入

我們自定一個(gè)模塊changeText.js:


define(function (require, exports, module) {
    var textContent = 'yes it works';
    exports.text = textContent;
    //or
    //module.exports = {
        //text: textContent
    //}
})

changeText模塊輸出了一個(gè)text變量,然后我們?cè)趍ain中引用它:


define(function (require, exports, module) {
    var changeText = require('../static/changeText.js');
    var title = document.getElementById('title');
    title.innerHTML = changeText.text;
})

我們通過(guò)require將changText模塊的輸出對(duì)象賦值給changeText變量麻汰,然后將對(duì)象的text屬性賦值給節(jié)點(diǎn)的文本值,此時(shí)頁(yè)面輸出效果是一樣的速客。

別名設(shè)置

引入一個(gè)模塊要寫(xiě)他的相對(duì)路徑,我們可以給它取個(gè)別名五鲫,在seajs.use()上面加入這一段代碼:

<script>
    seajs.config({
        alias:{
            'changeText':'../static/changeText.js'
        }
    });
    seajs.use('./static/main.js');
</script>

通過(guò)config中alias給'../static/changeText.js'設(shè)置了別名changeText溺职,現(xiàn)在main中引用changeText模塊就可以直接寫(xiě)成這樣了var changeText = require('changeText')

模塊調(diào)用

下面試著引入一個(gè)模塊的方法位喂,將changeText改為:

define(function (require, exports, module) {
    var init= function() {
        var textContent = [
            'yes it works',
            'seajs demo',
            'it is a lucky day',
            'wish this help you',
            'thank you for reading'
        ];
        var index = Math.floor(Math.random()*textContent.length);
        return textContent[index];
    }
    module.exports = {
        init:init
    }
})

模塊中定義了一個(gè)init方法浪耘,它隨機(jī)返回?cái)?shù)組中的一條。然后我們將main修改下:

define(function (require, exports, module) {
    var changeText = require('changeText');
    var title = document.getElementById('title');
    title.innerHTML = changeText.init();
})

這時(shí)候我們每次刷新頁(yè)面都會(huì)隨機(jī)出現(xiàn)一條文字塑崖。

第三方文件引用

下載一個(gè)jquery源文件七冲,按如下修改:

define(function (require, exports, module) {
    jquery 源碼
})

使其模塊化,能被外部調(diào)用规婆。

然后再設(shè)置別名:

seajs.config({
     alias:{
         'changeText':'../static/changeText.js',
          'jquery':'jquery/jquery',
          'main':'./static/main.js'
     }
});
seajs.use('./static/main.js');

在main中引入jquery澜躺,并使用:

define(function (require, exports, module) {
    var changeText = require('changeText');
    var $ = require('jquery');
    $('#title').text(changeText.init());
})

回調(diào)函數(shù)

seajs.use([module],callback),加載一個(gè)或多個(gè)模塊,并執(zhí)行回調(diào)函數(shù)抒蚜。我們將main修改下:


define(function (require, exports, module) {
    var changeText = require('changeText');
    var $ = require('jquery');
    var showText = function () {
        $('#title').text(changeText.init());
    }
    exports.showText = showText;
})

然后增加回調(diào)函數(shù):

seajs.use(['main','jquery'],function(main,$) {
    $('#title').after('<button id="show">showText</button>');
    $('#show').on('click',function() {
         main.showText()
    })
});

上述代碼我們加載了兩個(gè)模塊掘鄙,并把它們輸出的對(duì)象傳參給main和$變量,通過(guò)點(diǎn)擊事件調(diào)用main中的showText方法,而showText方法調(diào)用了changeText中的init方法嗡髓。

路徑問(wèn)題

我們先來(lái)搞清幾個(gè)問(wèn)題:

  1. ./是表示當(dāng)前目錄操漠;../是上級(jí)目錄;
  2. seajs.configalias的別名設(shè)置只是給路徑取個(gè)別名饿这,減少書(shū)寫(xiě)浊伙;
  3. seajs里主要兩個(gè)用到路徑的地方:一個(gè)是seajs.use();一個(gè)是require()长捧。
  4. base路徑是seajs文件所在目錄嚣鄙,本例子為 (file:///Users/linyuhua/code/seajs/sea-module/)

先來(lái)講seajs.use()路徑

seajs.use()調(diào)用模塊文件的路徑默認(rèn)是seajs文件的父文件夾目錄;以本例子來(lái)解釋?zhuān)?br> 首先來(lái)回看下我們的目錄結(jié)構(gòu):

seajs example
|--seajs
    |--sea-module       //存在依賴(lài)文件
        |--jquery
            |--jqeury.js
        |--sea.js    
    |--static         //存放自定義模塊js
        |--main.js
        |--changeText.js
    |--index.html     //調(diào)用頁(yè)面

調(diào)用main可以通過(guò)以下路徑:

seajs.config({
     alias:{
         'changeText':'../static/changeText.js',
          'jquery':'jquery/jquery',
          'main':'./static/main.js'
     }
});
seajs.use(['main','jquery'],function(main,$) {
      ...
    })
});
//  ./表示當(dāng)前路徑,seajs.use的默認(rèn)路徑是seajs文件的父文件夾的目錄串结;即file:///Users/linyuhua/code/seajs/拗慨;
//  因此廓八,此時(shí)main的調(diào)用路徑為file:///Users/linyuhua/code/seajs/static/main.js

在舉個(gè)例子來(lái)證明,這次我們使用../來(lái)設(shè)置路徑:

seajs.config({
     alias:{
         'changeText':'../static/changeText.js',
          'jquery':'jquery/jquery',
          'main':'../seajs/static/main.js'
     }
});
seajs.use(['main','jquery'],function(main,$) {
      ...
    })
});
// ../表示上級(jí)目錄赵抢,seajs.use()的目錄為file:///Users/linyuhua/code/seajs/;
// 他的上級(jí)目錄為file:///Users/linyuhua/code/声功,因此此時(shí)main的別名設(shè)置為../seajs/static/main.js;
// 合并之后就是file:///Users/linyuhua/code/seajs/static/main.js

最后再來(lái)看看jquery的調(diào)用烦却,直接以文件名開(kāi)頭,在seajs中直接以文件名開(kāi)頭的路徑是相對(duì)于base路徑先巴,也就是說(shuō)當(dāng)把jquery別名設(shè)置為'jquery':'jquery/jquery',時(shí)其爵,他的調(diào)用路徑為
base+‘jquery/jquery’(.js可以省略);即file:///Users/linyuhua/code/seajs/sea-module/+jquery/jquery;

require()調(diào)用路徑

下面我們來(lái)看看require調(diào)用的路徑

首先是./../
在define(function (){ }), 則是相對(duì)于當(dāng)前的js文件所在目錄伸蚯,還記得main中怎么調(diào)用changeText.js和jquery的嗎:

//對(duì)照別名設(shè)置
seajs.config({
     alias:{
          'changeText':'../static/changeText.js',
          'jquery':'jquery/jquery',
          'main':'../seajs/static/main.js'
     }
});

define(function (require, exports, module) {
    var changeText = require('changeText');
    var $ = require('jquery');
    var showText = function () {
        $('#title').text(changeText.init());
    }
    exports.showText = showText;
})

由于在define(function (){ }), 則是相對(duì)于當(dāng)前的js文件所在目錄摩渺,所以../表示changeText.js的上級(jí)目錄即file:///Users/linyuhua/code/seajs,加上別名就是file:///Users/linyuhua/code/seajs/static/changText.js;

我們也可以直接require('./changeText.js')來(lái)調(diào)用剂邮,./表示當(dāng)前目錄摇幻,而changeText.jsmain.js在同一個(gè)目錄下;

如果路徑以文件名開(kāi)頭則是相對(duì)base路徑,與前面seajs.use()一樣挥萌,jquery:jqeury/jquery就是相對(duì)base路徑調(diào)用的绰姻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市引瀑,隨后出現(xiàn)的幾起案子狂芋,更是在濱河造成了極大的恐慌,老刑警劉巖憨栽,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帜矾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡屑柔,警方通過(guò)查閱死者的電腦和手機(jī)屡萤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)锯蛀,“玉大人灭衷,你說(shuō)我怎么就攤上這事∨缘樱” “怎么了翔曲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)劈愚。 經(jīng)常有香客問(wèn)我瞳遍,道長(zhǎng),這世上最難降的妖魔是什么菌羽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任掠械,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猾蒂。我一直安慰自己均唉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布肚菠。 她就那樣靜靜地躺著舔箭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚊逢。 梳的紋絲不亂的頭發(fā)上层扶,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音烙荷,去河邊找鬼镜会。 笑死,一個(gè)胖子當(dāng)著我的面吹牛终抽,可吹牛的內(nèi)容都是我干的戳表。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拿诸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扒袖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起亩码,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤季率,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后描沟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體飒泻,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年吏廉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泞遗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡席覆,死狀恐怖史辙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佩伤,我是刑警寧澤聊倔,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站生巡,受9級(jí)特大地震影響耙蔑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孤荣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一甸陌、第九天 我趴在偏房一處隱蔽的房頂上張望须揣。 院中可真熱鬧,春花似錦钱豁、人聲如沸耻卡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)劲赠。三九已至,卻和暖如春秸谢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霹肝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工估蹄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沫换。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓臭蚁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親讯赏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垮兑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • GitChat技術(shù)雜談 前言 本文較長(zhǎng),為了節(jié)省你的閱讀時(shí)間漱挎,在文前列寫(xiě)作思路如下: 什么是 webpack系枪,它要...
    蕭玄辭閱讀 12,679評(píng)論 7 110
  • 一、seajs.config配置說(shuō)明: 1.base說(shuō)明: base是字符串類(lèi)型磕谅,表示基礎(chǔ)或叫做根路徑(最好絕對(duì)地...
    檸檬樹(shù)__閱讀 1,125評(píng)論 0 5
  • JavaScript 模塊化編程 網(wǎng)站越來(lái)越復(fù)雜私爷,js代碼、js文件也越來(lái)越多膊夹,會(huì)遇到什么問(wèn)題衬浑? 命名沖突; 文件...
    magic_pill閱讀 1,411評(píng)論 0 1
  • gulpjs是一個(gè)前端構(gòu)建工具放刨,與gruntjs相比工秩,gulpjs無(wú)需寫(xiě)一大堆繁雜的配置參數(shù),API也非常簡(jiǎn)單进统,學(xué)...
    小裁縫sun閱讀 922評(píng)論 0 3
  • gulpjs是一個(gè)前端構(gòu)建工具助币,與gruntjs相比,gulpjs無(wú)需寫(xiě)一大堆繁雜的配置參數(shù)麻昼,API也非常簡(jiǎn)單奠支,學(xué)...
    井皮皮閱讀 1,292評(píng)論 0 10