require.js 中的方法
阿新 • • 發佈:2021-01-09
require.config
require.config({ baseUrl: "js/lib", paths: { "jquery": "jquery.min", "underscore": "underscore.min", "backbone": "backbone.min" }
//直接改變基目錄(baseUrl)
//如果某個模組在另一臺主機上,也可以直接指定它的網址,比如:
require.config({
paths: {
"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
}
});
define
具體來說,就是模組必須採用特定的define()函式來定義。如果一個模組不依賴其他模組,那麼可以直接定義在define()函式之中。
假定現在有一個math.js檔案,它定義了一個math模組。那麼,math.js就要這樣寫:
// math.js define(function (){ var add = function (x,y){ return x+y; }; return { add: add }; });
現在載入
// main.js require(['math'], function (math){ alert(math.add(1,1)); });
如果這個模組還依賴其他模組,那麼define()函式的第一個引數,必須是一個數組,指明該模組的依賴性。
define(['myLib'], function(myLib){ function foo(){ myLib.doSomething(); } return { foo : foo }; });
載入非規範的模組
這樣的模組在用require()載入之前,要先用require.config()方法,定義它們的一些特徵。
舉例來說,underscore和backbone這兩個庫,都沒有采用AMD規範編寫。如果要載入它們的話,必須先定義它們的特徵。
require.config({ shim: { 'underscore':{ exports: '_' }, 'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' } } });
require.config()接受一個配置物件,這個物件除了有前面說過的paths屬性之外,還有一個shim屬性,專門用來配置不相容的模組。具體來說,每個模組要定義(1)exports值(輸出的變數名),表明這個模組外部呼叫時的名稱;(2)deps陣列,表明該模組的依賴性。
全域性配置
上面的例子中重複出現了require.config
配置,如果每個頁面中都加入配置,必然顯得十分不雅,requirejs提供了一種叫"主資料"的功能,我們首先建立一個main.js:
require.config({
paths : {
"jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery", "js/jquery"],
"a" : "js/a"
}
})
然後再頁面中使用下面的方式來使用requirejs:
<script data-main="js/main" src="js/require.js"></script>