RequireJS入門簡介

RequireJS 學習筆記(一)

RequireJS是一個非常小巧的JavaScript模塊載入框架,是AMD規範最好的實現者之一。

RequireJS是一個JavaScript文件和模塊加載器。requireJS允許你把你的javascript代碼獨立成文件和模塊,同時管理每個模塊間的依賴關係。

主要目的還是爲了代碼的模塊化。解決了兩個問題:
(1)實現js文件的異步加載,避免網頁失去響應;
(2)管理模塊之間的依賴性,便於代碼的編寫和維護。

1.基本API

require會定義三個變量:define,require,requirejs,其中require === requirejs,一般使用require更簡短。

  • define 用來定義一個模塊
  • require 加載依賴模塊,並執行加載完後的回調函數
  • config該函數用於配置RequireJS.

例如,define函數定義了一個模塊,然後再頁面中使用:

//a.js
define(function(){
    function fun1(){
      alert("it works");
    }

    fun1();
})
//index.js
require(["js/a"],function(){
    alert("load finished");
})

注意:require中的依賴是一個數組,即使只有一個依賴,你也必須使用數組來定義.
requir API的第二個參數是callback,一個function,是用來處理加載完畢後的邏輯.

2.加載JS文件

它鼓勵在使用腳本時以module ID替代URL地址,以一個相對於baseUrl的地址來加載所有的代碼

RequireJS默認假定所有的依賴資源都是js腳本,因此無需在module ID上再加”.js”後綴,RequireJS在進行module ID到path的解析時會自動補上後綴。

例如,要麼將所有的腳本都放置到baseUrl中,要麼分置爲項目庫/第三方庫的一個扁平結構:
這裏寫圖片描述

//index.html
<script data-main="js/app.js" src="js/require.js"></script>

//app.js
requirejs.config({ 
    baseUrl: 'js/lib',
    paths: {
        app: '../app'
    }
});

requirejs(['jquery', 'canvas', 'app/sub'],function($,canvas,sub) {

});

require函數用於加載模塊依賴但並不會創建一個模塊。

3.data-main入口點

require.js 在加載的時候會檢察data-main 屬性。require.js使用它來啓動腳本加載過程。

data-main需要給所有的腳本文件設置一個根路徑。根據這個根路徑,RequireJS將會去加載所有相關的模塊。

4.定義模塊

模塊不同於傳統的腳本文件,它良好地定義了一個作用域來避免全局名稱空間污染。它可以顯式地列出其依賴關係,並以函數(定義此模塊的那個函數)參數的形式將這些依賴進行注入

4.1 存在依懶關係的函數定義

如果模塊存在依賴:則第一個參數是依賴的名稱數組第二個參數函數,在模塊的所有依賴加載完畢後,該函數會被調用來定義該模塊。

依賴關係會以參數的形式注入到該函數上,參數列表與依賴名稱列表一 一對應。

define(["./cart", "./inventory"], function(cart, inventory) {
        //return an object to define the "my/shirt" module.
        return {
            color: "blue",
            size: "large",
            addToCart: function() {
                inventory.decrement(this);
                cart.add(this);
            }
        }
    }
);

5.shim

通過require加載的模塊一般都需要符合AMD規範(使用define來申明模塊),但是部分時候需要加載非AMD規範的js,這時候就需要用到另一個功能:shim。專門用來配置不兼容的模塊。

具體來說,每個模塊要定義:
(1)exports值(輸出的變量名),表明這個模塊外部調用時的名稱;
(2)deps數組,表明該模塊的依賴性。

require.config({
    shim: {
        "underscore" : {
            exports : "_";
        },
        "jquery.form" : {
            deps : ["jquery"]
        }
    }
})

6.require.config配置函數

  • baseUrl——用於加載模塊的根路徑。
  • paths——用於映射不存在根路徑下面的模塊路徑。
  • shims——配置在腳本/模塊外面並沒有使用RequireJS的函數依賴並且初始化函數。假設underscore並沒有使用 RequireJS定義,但是你還是想通過RequireJS來使用它,那麼你就需要在配置中把它定義爲一個shim。
  • deps——加載依賴關係數組
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章