亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

require.js深入了解 require.js特性介紹

2019-11-20 14:11:04
字體:
來源:轉載
供稿:網友

現在,Require.js是我最喜歡的Javascript編程方式。它可以使代碼化整為零,并易于管理。而Require.js Optimizer能幫助我們將一個較大的應用分散成多個較小的應用,并通過依賴串聯起來,最后在編譯打包時合并起來。這些原因促使我們使用require.js。

那么,讓我們來看看require.js有什么牛逼的特性吧!

與CommonJS兼容

AMD (異步模塊定義規范) 出現自CommonJS工作組。CommonJS旨在創造Javascript的生態系統。 CommonJS的一個重要部分是transport/c, 即AMD的前身,而require.js則是該規范的一個實現。

CommonJS模塊和AMD模塊的語法差異,主要由于AMD需要支持瀏覽器的異步特性。而CommonJS模塊則需要同步進行,例如:

復制代碼 代碼如下:

var someModule = require( "someModule" );
var anotherModule = require( "anotherModule" );   
 
exports.asplode = function() {
    someModule.doTehAwesome();
    anotherModule.doMoarAwesome();
};

AMD模塊是異步加載模塊的,故而模塊定義需要一個數組作為第一個參數,而模塊加載完畢后回調的函數作為第二個參數傳入。
復制代碼 代碼如下:

define( [ "someModule"],  function( someModule ) {  
    return {
        asplode: function() {
            someModule.doTehAwesome();
 
            // 這將會異步執行
            require( [ "anotherModule" ], function( anotherModule ) {
                anotherModule.doMoarAwesome();
            });
        }
    };
});

然而,在require.js中AMD亦能兼容CommonJS語法。通過AMD的define函數包裝CommonJS模塊,你也可以再AMD中擁有一個CommonJS模塊,例如:
復制代碼 代碼如下:

define(function( require, exports, module )
    var someModule = require( "someModule" );
    var anotherModule = require( "anotherModule" );   
 
    someModule.doTehAwesome();
    anotherModule.doMoarAwesome();
 
    exports.asplode = function() {
        someModule.doTehAwesome();
        anotherModule.doMoarAwesome();
    };
});

實際上,require.js通過函數.toString解釋回調函數的模塊內容,找到其正確的依賴,將其變成一個通常的AMD模塊。需要注意,如果你使用這種方式編寫模塊,可能會發生與其他AMD加載器不兼容的情況,因為這違背了AMD規范,但它能很好的理解這種格式的寫法。

這里發生了什么,require.js實際上做了function.toString的回調函數解析模塊的內容,找到正確的依賴,就像它,如果它是一個正常的AMD模塊。重要的是要注意,如果您選擇這樣寫模塊,他們將最有可能不兼容與其他AMD模塊裝載機,因為這違背了AMD規范,但它是很好的了解這個格式存在!

CDN回退

另一個隱藏的require.js瑰寶是,其支持當CDN加載不正確時,回退加載本地相應的庫。我們可以通過require.config達到這個目的:

復制代碼 代碼如下:

requirejs.config({
    paths: {
        jquery: [
            '//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js',
            'lib/jquery'
        ]
    }
});

沒有依賴?對象字面量?沒問題!

當你寫一個沒有任何依賴的模塊,并且只是返回一個對象包含一些功能函數,那么我們可以使用一種簡單的語法:

復制代碼 代碼如下:

define({
    forceChoke: function() {
 
    },
    forceLighting: function() {
 
    },
    forceRun: function() {
 
    }   
});

很簡單,也很有用,如果該模塊僅僅是功能的集合,或者只是一個數據包。

 循環依賴

在一些情況中,我們可能需要模塊moduleA和moduleA中的函數需要依賴一些應用。這就是循環依賴。

復制代碼 代碼如下:

// js/app/moduleA.js
define( [ "require", "app/app"],
    function( require, app ) {
        return {
            foo: function( title ) {
                var app = require( "app/app" );
                return app.something();
            }
        }
    }
);

得到模塊的地址

如果你需要得到模塊的地址,你可以這么做……

復制代碼 代碼如下:

var path = require.toUrl("./style.css");

BaseUrl

通常,在進行的單元測試時,你的源代碼可能放在類似src的文件夾里,同時,可能你的測試放在類似tests的文件夾里。這可能比較難讓測試配置正確。

比如我們在tests文件夾有一個index.html文件,并需要本地加載tests/spec/*.js。并假設,所有源代碼在為src/js/*.js,并有一個main.js在該文件夾。

index.html中,不在加載require.js時設置data-main。

復制代碼 代碼如下:

<script src="src/js/vendor/require.js"></script>
<script>
require( [ "../src/js/main.js" ], function() {
    require.config({
        baseUrl: "../src/js/"
    });
 
    require([
        "./spec/test.spec.js",
        "./spec/moar.spec.js"
    ], function() {
        // start your test framework
    });
});
</script>

你可以發現main.js被加載。然而由于沒有設置data-main,所欲我們需要制定一個baseUrl。而當使用data-main時,baseUrl會根據其設定的文件來自動設置。

在這里,你可以看到main.js被載入。然而,由于它沒有加載數據主要腳本標記,那么您必須指定一個base即可。當數據主要是用于baseURL時從主文件中的位置推斷。通過自定義baseUrl我們可以很容易將測試代碼和應用代碼分開存放。

JSONP

我們可以這樣處理JSONP終端:

復制代碼 代碼如下:

require( [
    "http://someapi.com/foo?callback=define"
], function (data) {
    console.log(data);
});

對于非AMD庫,使用shim來解決

在很多請款下,我們需要使用非AMD庫。例如Backbone和Underscore并未適應AMD規范。而jQuery實際上只是將自己定義成一個名為jQuery全局變量,所以對于jQuery什么都不用做。

幸運的是,我們可以使用shim配置來解決這一問題。

復制代碼 代碼如下:

require.config({
    paths: {
        "backbone": "vendor/backbone",
        "underscore": "vendor/underscore"
    },
    shim: {
        "backbone": {
            deps: [ "underscore" ],
            exports: "Backbone"
        },
        "underscore": {
            exports: "_"
        }
    }
});

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人乱人伦精品视频在线观看| 欧美一级免费看| 91精品国产自产在线观看永久| 亚洲欧美制服另类日韩| 国产精品日韩欧美综合| 国产视频久久久久久久| 8x海外华人永久免费日韩内陆视频| 日韩在线免费视频观看| 成人天堂噜噜噜| 国产精品1区2区在线观看| 国产亚洲视频在线观看| 日韩免费av片在线观看| 欧美一级大片在线免费观看| 亚洲国内精品视频| 国外成人在线视频| 久久久人成影片一区二区三区| 欧美激情一区二区三区在线视频观看| 亚洲综合自拍一区| 日本一区二三区好的精华液| 人妖精品videosex性欧美| 亚洲性无码av在线| 国产欧美婷婷中文| 成人网页在线免费观看| 久久精品欧美视频| 69av视频在线播放| 欧美放荡办公室videos4k| 4444欧美成人kkkk| 精品精品国产国产自在线| 97视频在线观看免费| 91久久精品美女高潮| 成人写真福利网| 国产精品揄拍一区二区| 成人网在线免费观看| 欧美天天综合色影久久精品| 精品国偷自产在线视频99| 欧美高清视频一区二区| 日韩综合视频在线观看| 中文字幕精品av| 欧美日韩国产精品一区| 亚洲一品av免费观看| 欧美午夜美女看片| 国产精品6699| 国产精品视频公开费视频| 精品无人区太爽高潮在线播放| 亚洲欧美福利视频| 日韩精品亚洲精品| 欧美日韩aaaa| 久久久精品影院| 久久亚洲精品中文字幕冲田杏梨| 亚洲国产天堂久久综合| 精品呦交小u女在线| 最近2019年日本中文免费字幕| 国产成人久久久| 欧美黑人又粗大| 午夜精品久久久久久久99热| 亚洲午夜激情免费视频| 免费97视频在线精品国自产拍| 国产ts人妖一区二区三区| 亚洲国产精品福利| 久久精品福利视频| 91美女高潮出水| 国产午夜精品麻豆| 日韩av理论片| 亚洲aⅴ日韩av电影在线观看| 欧美激情精品久久久久久蜜臀| 国产精品大陆在线观看| 久久国产精彩视频| 91av视频在线观看| 欧美日韩成人在线视频| 成人黄色免费网站在线观看| 久久免费视频这里只有精品| 久久激情视频免费观看| 狠狠干狠狠久久| 美女性感视频久久久| 亚洲国产日韩欧美在线动漫| 日韩精品中文字幕久久臀| 92福利视频午夜1000合集在线观看| 91久久综合亚洲鲁鲁五月天| 2019最新中文字幕| 97在线免费观看| 国产精品视频一区二区三区四| 97碰在线观看| 成人在线观看视频网站| 亚洲男人av在线| 欧美性xxxxx| 国内精品在线一区| 久久综合国产精品台湾中文娱乐网| 欧美日韩黄色大片| 久久久视频免费观看| 久久夜色精品国产欧美乱| 在线观看亚洲视频| 国产精品久久久久久久午夜| 久久视频这里只有精品| 欧美日韩国产精品一区| 久久激情视频免费观看| 久久精品99久久香蕉国产色戒| 亚洲美女av在线| 欧美富婆性猛交| 亚洲福利影片在线| 亚洲欧美精品一区二区| 亚洲黄页视频免费观看| 亚洲欧美激情在线视频| 亚洲人线精品午夜| 九九热精品视频| 91免费欧美精品| 国产精品7m视频| 日韩av123| 国产精品网站大全| 97超级碰碰碰| 日韩免费精品视频| 伊人一区二区三区久久精品| 精品亚洲夜色av98在线观看| 国产啪精品视频| 成人福利网站在线观看11| 亚洲大尺度美女在线| 欧美第一黄色网| 亚洲人在线观看| 高清在线视频日韩欧美| 秋霞av国产精品一区| 成人精品在线视频| 精品国内亚洲在观看18黄| 国产美女直播视频一区| 成人黄色免费片| 欧美插天视频在线播放| 亚洲视频在线免费看| xxxx欧美18另类的高清| 亚洲人av在线影院| 日韩欧美高清视频| 亚洲福利在线播放| 国产精品网站大全| 精品亚洲va在线va天堂资源站| 日韩av电影手机在线观看| 国产精品久久久久久搜索| 久久久久久尹人网香蕉| 国产精品亚洲片夜色在线| 欧美xxxx做受欧美| 亚洲一区二区三区四区在线播放| 欧美日韩美女在线| 日韩av免费看| 欧美一性一乱一交一视频| 成人免费视频在线观看超级碰| 91久久久久久久| 亚洲一区二区三区毛片| 91欧美精品成人综合在线观看| 91情侣偷在线精品国产| 国产一区二区三区在线视频| 亚洲欧洲黄色网| 中文字幕亚洲一区二区三区| 国产日产久久高清欧美一区| 日韩免费高清在线观看| 精品av在线播放| 日本久久久久亚洲中字幕| 亚洲精品suv精品一区二区| 78m国产成人精品视频| 成人福利免费观看| 欧美亚洲成人精品| 日韩欧美中文免费| 2020欧美日韩在线视频| 国产精品69精品一区二区三区| 97免费中文视频在线观看| 欧美重口另类videos人妖| 亚洲乱码一区二区| 亚洲欧洲日产国码av系列天堂| 国产欧美日韩专区发布|