傻瓜看的requireJS說(shuō)明書(shū)

開(kāi)始記錄...

1,我們的目錄結(jié)構(gòu)大概是這樣:

Paste_Image.png

2,index.html文件內(nèi)容,加載require庫(kù)文件,看到data-main沒(méi)有,那個(gè)就是我們整個(gè)JS邏輯的開(kāi)始編寫(xiě)地方,data-main后面的值一般都是省略.js后綴,可以也寫(xiě)成main.js。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>requireJS使用說(shuō)明書(shū)</title>
    <script data-main="main" src="require.js"></script>
</head>
<body>
    使用這個(gè)JS庫(kù),讓模塊之間加載和調(diào)用更加明確。
    1,data-main為函數(shù)入口
    2,define定義模塊
    3,通過(guò)return或者exports返回
    4,require.config為配置選項(xiàng)
</body>
</html>

3,來(lái)瞅瞅main.js里的內(nèi)容,具體看注釋?zhuān)枰⒁獾氖俏覀兊姆祷刂?,思考一下為什么是?duì)象。

//定義配置文件
requirejs.config({
    //查找所有模塊的根路徑
    baseUrl: './js',
    //設(shè)置相對(duì)路徑,映射到不能直接在baseUrl下找到的模塊名
    paths:{
        "jquery":"lib/jquery",
        "jquery-private":"lib/jquery-private"
    },
    //為那些沒(méi)有使用 define() 聲明依賴(lài)項(xiàng)、沒(méi)有設(shè)置模塊值,暴露出全局變量
    shim:{
    },
    // 對(duì)于給定的相同的模塊名,加載不同的模塊,而不是加載相同的模塊。
    map:{
        '*': { 'jquery': 'jquery-private' },
        'jquery-private': { 'jquery': 'jquery' }
    }
});

//main文件為入口,也就是我們邏輯的開(kāi)始地方
require(["a","b","c","d","e","f","jquery"], function(a,b,c,d,e,f,$) {
    //a文件,返回一個(gè)對(duì)象
    var Module_A = a;
    console.log(Module_A.size);

    //b文件,返回一個(gè)函數(shù)
    var Module_B = b;
    Module_B.sayB();

    //c文件,依賴(lài)B文件,返回一個(gè)對(duì)象
    var Module_C = c;
    Module_C.sayC();

    //d文件,引入其他的cmd規(guī)范文件,然后重新拼裝我們需要的
    var Module_D = d;
    Module_D();

    //e文件,引入require,然后調(diào)用其他模塊
    var Module_E = e;
    console.log(Module_E.e);

    //f文件,引入exports,不通過(guò)return返回
    var Module_F = f;
    console.log(Module_F.f.F);
 //查看jQuery對(duì)象
    console.dir($)
});

4,我們把這幾a,b,c,d,e,f里的JS文件內(nèi)容粘出來(lái)看看

//a.js,很顯然返回了一個(gè)對(duì)象,鍵值對(duì)。
define({
    color:"red",
    size:12
});
//b.js,定義一個(gè)匿名函數(shù)(下面還有兩個(gè)),這里隨便返回一個(gè)對(duì)象
define(function () {
    var B = "我是B中的一個(gè)字符串變量";
    function sayB(){
        console.log("我是B模塊中的sayB方法");
    }
    return {
        B:B,
        sayB:sayB
    }
});
//c.js,引入b文件依賴(lài),然后隨便返回一個(gè)對(duì)象
define(["b"],function(b){
    var B = b;
    var C = "我是C的字符串變量";
    return {
        C:C,
        sayC:B.sayB
    } 
});
//d.js,具體看匿名函數(shù)中的參數(shù),把其他模塊弄進(jìn)來(lái)在重新拼裝
define(function(require,exports,module){
    var a = require("a");
    var b = require("b");
    return function(){
        console.log(b.B);
    };
});
//e.js,引入require,再調(diào)用其他define的模塊
define(function(require){
    var a = require("a");
    return {
        e:a.color
    }
});
//f.js,引入exprots模塊,這樣我們可以不用return進(jìn)行返回了
define(['exports'],function(exports){
    exports.f = {F:"我是F的字符串"};
});

5,對(duì)于那些不沖突(重名,不依賴(lài))的庫(kù),可以通過(guò)paths(配置選項(xiàng)里)直接定義,左邊名字:右邊路徑

6,對(duì)于依賴(lài)的需要在shim里進(jìn)行重新暴露,eg:

shim: {
        'backbone': {
           //deps需要加載的依賴(lài)項(xiàng)的數(shù)組
            deps: ['underscore', 'jquery'],
           //導(dǎo)出名稱(chēng)
            exports: 'Backbone'
        },
        'underscore': {
            exports: '_'
        },
        'foo': {
            deps: ['bar'],
            exports: 'Foo',
            init: function (bar) {
                return this.Foo.noConflict();
            }
        }
    }
});

具體:http://requirejs.org/docs/api.html#config-shim

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 導(dǎo)語(yǔ): 之前一直有聽(tīng)說(shuō)RequireJS,但是一直都沒(méi)機(jī)會(huì)去了解,只知道它是一個(gè)給js做模塊化的API。最近在做R...
    wuqke閱讀 41,129評(píng)論 11 78
  • RequireJs已經(jīng)流行很久了,它提供了以下功能: 聲明不同js文件之間的依賴(lài) 可以按需、并行、延時(shí)載入js庫(kù) ...
    小豌豆書(shū)吧閱讀 652評(píng)論 1 1
  • 參考資料 RequireJS 中文網(wǎng)Javascript模塊化編程(三):require.js的用法——阮一峰 前...
    BeYanJin閱讀 7,401評(píng)論 2 12
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,836評(píng)論 25 709
  • 二十多歲不努力經(jīng)營(yíng)自己,該成長(zhǎng)的成長(zhǎng),該脫貧的脫貧,卻用來(lái)急著戀愛(ài)和嫁人,結(jié)果呢?三十多歲就被生活瑣事、孩子房子、...
    丁菇?jīng)?/span>閱讀 273評(píng)論 0 2

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