上一篇文章中簡單介紹了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