requireJs使用入門(mén)

requireJS

RequireJS是一個(gè)工具庫(kù),主要用于客戶(hù)端的模塊管理。它可以讓客戶(hù)端的代碼分成一個(gè)個(gè)模塊,實(shí)現(xiàn)異步或動(dòng)態(tài)加載,從而提高代碼的性能和可維護(hù)性。它的模塊管理遵守AMD規(guī)范。

使用requireJS的好處

  • 異步加載
  • 按需加載
  • 模塊依賴(lài)管理
  • 版本管理
    ... ...

requireJS的用法

一、加載require.js

首先是去官網(wǎng)下載require.js最新版本,在頁(yè)面上引入

xxx.html

<script src="js/require.js" defer async="true" data-main="js/main"></script>
  1. async屬性表明這個(gè)文件需要異步加載,避免網(wǎng)頁(yè)失去響應(yīng)。IE不支持這個(gè)屬性,只支持defer,所以把defer也寫(xiě)上。
  2. data-main屬性指定的js文件會(huì)在require.js加載成功后第一個(gè)加載,是網(wǎng)頁(yè)的入口代碼。它一般用來(lái)對(duì)requirejs進(jìn)行配置,并且載入真正的程序模塊。
  3. require.js默認(rèn)的文件后綴名是js,所以可以把main.js簡(jiǎn)寫(xiě)成main。

二、全局配置

main.js

require.config({
    paths : {
        "jquery" : ["https://cdn.bootcss.com/jquery/1.12.4/jquery.min", "js/jquery"],     // 如果第一個(gè)cdn文件加載失敗,就會(huì)加載第二個(gè)本地文件
        "a" : "js/a",
        "b" : "js/b"
    },
    shim : {
        "bootstrap": ["jquery"],        
        "bootstrapTable": {
            deps: ["bootstrap"],         // deps數(shù)組,表明該模塊的依賴(lài)性。
            exports: "bootstrapTable"    // exports值(輸出的變量名),表明這個(gè)模塊外部調(diào)用時(shí)的名稱(chēng);
        }
    }
})
require.config 常用配置參數(shù)選項(xiàng):
  • baseUrl: 用于加載模塊的根路徑。(require會(huì)默認(rèn)的將data-main指定的js為根路徑)
  • paths: 聲明模塊名稱(chēng)和文件路徑
  • shim: require.js加載的模塊,必須是按照AMD規(guī)范、用define()函數(shù)定義的模塊。但是有時(shí)候需要加載非AMD規(guī)范的js,shim參數(shù)能夠幫助我們以AMD模塊的方式,使用那些不符合AMD規(guī)范的模塊。

三、定義模塊

define方法用于定義模塊,requireJS要求每個(gè)模塊放在一個(gè)單獨(dú)的文件里。

獨(dú)立模塊

如果被定義的模塊是一個(gè)獨(dú)立模塊,不需要依賴(lài)任何其他模塊,可以直接用define方法生成。

//定義對(duì)象
define({
    num: 0,
    method: function() {}
});

// 定義方法
define(function () {
    return {
        method1: function() {},
        method2: function() {},
    };
});
非獨(dú)立模塊

如果被定義的模塊需要依賴(lài)其他模塊,則define方法必須采用下面的格式。

define(['a'], function(a){
    function foo(){
      a.fn();
    }
    return {
      foo : foo
    };
});

define()函數(shù)的第一個(gè)參數(shù),必須是一個(gè)數(shù)組,指明該模塊的依賴(lài)性。當(dāng)require()函數(shù)加載上面這個(gè)模塊的時(shí)候,就會(huì)先加載a.js文件。

命名模塊

前面兩個(gè)都是匿名模塊,可以在 requirejs.config 里,使用任意一個(gè)模塊名來(lái)引用它。某些庫(kù)(例如jquery)已經(jīng)聲明了一個(gè)確定的模塊名:

define('jquery', [], function() { ... });

所以在 requirejs.config 里配置模塊名時(shí),只能用申明好的模塊名。

自定義命名模塊
define('myMod',['jquery', 'bootstrap'], function($, undefined){
    var Controller = {
            method1: function() {},
            method2: function() {},
            method3: function() {}
       }
    return Controller;
});

四、加載模塊

require方法用于調(diào)用模塊。

require( ['myMod'], function( mod ) {
    mod.method1();
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容