RequireJS -Javascript模塊化(二、模塊依賴)


上一篇文章中簡單介紹了RequireJs的寫法和使用,這節試着寫下依賴關系

需求描述:我們經常寫自己的js,在元素選擇器這方面,我們可能會用jquery的$("#id")id選擇器去代替document.getElementById("id")這個原生的js選擇器,那么我們的js文件就需要依賴於jquery,通常我們需要在index.html的<head>標簽中先引入jquery,然后引入我們的js文件以達到這樣的效果,那么如果放在RequireJs中我們該怎樣去添加這個依賴關系呢?

 

項目結構目錄:

 

1、編寫我們的js(js/my/sw.js),讓其不符合AMD規范,也就是不寫define()函數。

! function(window, $) {

    var sw = {};   //定義一個版本號,將jquery的版本號賦給sw的版本號
    sw.version = $().jquery;

    window.sw = sw;

    //sw不定義define()方法,讓它不符合AMD規范
    //  define(function() {
    //      return sw;
    //  });

}(window, $);

 

在sw.js中我們定義一個版本號,將jquery的版本號賦給我的版本號。

 

2、編寫RequireJs的入口main.js(js/main.js)

require.config({
    baseUrl: "js",
    paths: {
        jquery: "jq/jquery",
        dr: "my/dr",
        sw: "my/sw"
    },
    shim: { "sw": { deps: ["jquery"], exports: "sw" } }
})

require(["dr", "sw"], function(dr, sw) {
    if (dr) {
        console.info("dr.js is ready!");
        console.log("dr.version: " + dr.version)
    }
    if (sw) {
        console.info("sw is ready!");
        if (sw.version) {
            console.log("sw depend on jquery successfully!");
            console.log("sw version: " + sw.version);
        }
    }
})

 

在main.js里面,我們定義了需要使用的js API(Jquery、dr、sw),在require方法中只添加了dr和sw兩個module,那么我們在頁面中也只能使用dr和sw兩個API。

依賴關系:sw依賴於jquery,我們在config方法中添加了一個shim的屬性:這個“deps”屬性中說明了依賴關系("sw": ["jquery"],如果還需要依賴於其他的api,比如bootstarp,將bootstrap追加到數組中,類似於這樣:"sw": ["jquery","bootstrap"]),而“exports”屬性指定了module的名稱。

在require()方法中,我們的回調函數將會通知我們sw的依賴是否成功,依賴成功,打印sw版本號。

 

3、index.html

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <script type="text/javascript" src="js/require.js" data-main="js/main.js" async="async" defer="defer"></script>
        <title></title>
    </head>

    <body>
        <p>this is index.html</p>
        <!-- 點擊按鈕獲取dr和sw的版本號 -->
        <button onclick="getVersion();">獲取版本</button>
        <script>
            function getVersion() {
                console.log("index-->dr version: " + dr.version);
                console.log("index-->sw version: " + sw.version);
            }
        </script>
    </body>

</html>

 

4、測試:

dr.js is ready!
dr.version: v1.0
sw is ready!
sw depend on jquery successfully!
sw version: 1.9.1
//點擊按鈕后的輸出
index-->dr version: v1.0
index-->sw version: 1.9.1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM