1. 程式人生 > 實用技巧 >require.js 中的方法

require.js 中的方法

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>