日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

requireJS 从概念到实战

發布時間:2025/3/21 javascript 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 requireJS 从概念到实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

requireJS 可以很輕易的將一個項目中的JavaScript代碼分割成若干個模塊(module)。并且requireJS推薦一個模塊就是一個文件,所以,你將獲得一些零碎的具有互相依賴關系的JS文件。模塊化的好處也淺顯意見,那就是大大增強代碼的可讀性、易維護性、可擴展性、減少全局污染等。


目錄:

基本概念
requireJS的歷史發展
模塊化的優點
require 實戰
????引入requireJS
????參數配置
????加載配置文件
????定義模塊
????簡單的值對
????非依賴的函數式定義
????依賴的函數式定義
????載入模塊
????模塊的返回值
??????????return 方式
??????????exports導出
????非標準模塊定義
????常用參數
??????????urlArgs
??????????scriptType
??????????waitSeconds
??????????deps
??????????callback
??????????config
??????????map
??????????packages
rquire 壓縮
其它問題
????1. timeout超時問題
????2. 循環依賴問題
????3. CDN回退
????4. 定義AMD插件
????5. 關于require的預定義模塊
????6. 關于R.js壓縮非本地文件的問題
????7. 關于R.js - shim功能的說明
????8. 關于require加載CSS的問題


基本概念

因為自身設計的不足,JavaScript 這門語言實際上并沒有模塊化這種概念與機制,所以想實現如JAVA,PHP等一些后臺語言的模塊化開發,那么我們必須借助 requireJS 這個前端模擬模塊化的插件,雖然我們不需要去了解它的實現原理,但是大致去了解它是如何工作的,我相信這會讓我們更容易上手。

requireJS使用head.appendChild()將每一個依賴加載為一個script標簽。 requireJS等待所有的依賴加載完畢,計算出模塊定義函數正確調用順序,然后依次調用它們。

requireJS的歷史發展

在說JavaScript模塊化之前,我們不得不提CommonJS(原名叫ServerJs),這個社區可謂大牛云集,他們為NodeJS制定過模塊化規范 Modules/1.0 ,并得到了廣泛的支持。在為JavaScript定制模塊化規范時,討論的都是在 Modules/1.0 上進行改進,但是 Modules/1.0 是專門為服務端制定的規范,所以要想套用在客服端環境的JS上,情況就會有很大的不同,例如,對于服務端加載一個JS文件,其耗費的時間幾乎都是可以忽略不計的,因為這些都是基于本地環境,而在客戶端瀏覽器上加載一個文件,都會發送一個HTTP請求,并且還可能會存在跨域的情況,也就是說資源的加載,到執行,是會存在一定的時間消耗與延遲。

所以社區的成員們意識到,要想在瀏覽器環境中也能模塊化開發,則需要對現有規范進行更改,而就在社區討論制定規范的時候內部發生了比較大的分歧,分裂出了三個主張,漸漸的形成三個不同的派別:

1.Modules/1.x派 這一波人認為,在現有基礎上進行改進即可滿足瀏覽器端的需要,既然瀏覽器端需要function包裝,需要異步加載,那么新增一個方案,能把現有模塊轉化為適合瀏覽器端的就行了,有點像“保皇派”?;谶@個主張,制定了Modules/Transport(http://wiki.commonjs.org/wiki/Modules/Transport)規范,提出了先通過工具把現有模塊轉化為復合瀏覽器上使用的模塊,然后再使用的方案。 browserify就是這樣一個工具,可以把nodejs的模塊編譯成瀏覽器可用的模塊。(Modules/Transport規范晦澀難懂,我也不確定browserify跟它是何關聯,有知道的朋友可以講一下) 目前的最新版是Modules/1.1.1(http://wiki.commonjs.org/wiki/Modules/1.1.1),增加了一些require的屬性,以及模塊內增加module變量來描述模塊信息,變動不大。 2. Modules/Async派 這一波人有點像“革新派”,他們認為瀏覽器與服務器環境差別太大,不能沿用舊的模塊標準。既然瀏覽器必須異步加載代碼,那么模塊在定義的時候就必須指明所依賴的模塊,然后把本模塊的代碼寫在回調函數里。模塊的加載也是通過下載-回調這樣的過程來進行,這個思想就是AMD的基礎,由于“革新派”與“?;逝伞钡乃枷霟o法達成一致,最終從CommonJs中分裂了出去,獨立制定了瀏覽器端的js模塊化規范AMD(Asynchronous Module Definition)(https://github.com/amdjs/amdjs-api/wiki/AMD) 3. Modules/2.0派 這一波人有點像“中間派”,既不想丟掉舊的規范,也不想像AMD那樣推到重來。他們認為,Modules/1.0固然不適合瀏覽器,但它里面的一些理念還是很好的,(如通過require來聲明依賴),新的規范應該兼容這些,AMD規范也有它好的地方(例如模塊的預先加載以及通過return可以暴漏任意類型的數據,而不是像commonjs那樣exports只能為object),也應采納。最終他們制定了一個Modules/Wrappings(http://wiki.commonjs.org/wiki/Modules/Wrappings)規范,此規范指出了一個模塊應該如何“包裝”,包含以下內容:

實際上這三個流派誰都沒有勝過誰,反而是最后的AMD,CMD 規范扎根在這三個流派之上,吸取它們提出的優點不斷得到壯大。
總的來說AMD,CMD都是從commonJS規范中結合瀏覽器現實情況,并且吸收三大流派的優點而誕生。其中CMD是國內大牛制定的規范,其實現的工具是seaJS,而AMD則是國外大牛制定的,其實現技術則是requireJS

模塊化的優點

既然我們已經詳細的了解了“前端模塊化”的歷史與發展,那么我們也要大致了解模塊開發的好處,畢竟這是我們學習的動力。

1. 作用域污染小明定義了 var name = 'xiaoming';N ~ 天之后:小王又定義了一個 var name = 'xiaowang'; 2. 防止代碼暴漏可被修改: 為了解決全局變量的污染,早期的前端的先驅們則是以對象封裝的方式來寫JS代碼: var utils = { 'version':'1.3' }; 然而這種方式不可以避免的是對象中的屬性可被直接修改:utils.version = 2.0 。 3. 維護成本的提升。 如果代碼毫無模塊化可言,那么小明今天寫的代碼,若干天再讓小明自己去看,恐怕也無從下手。 4. 復用與效率 模塊與非模塊的目的就是為了復用,提高效率

總的來說,前端的模塊化就是在眼瞎與手殘的過程進行發展的,大致我們可以總結一下幾時代:

  • 無序(洪荒時代) :自由的書寫代碼。
  • 函數時代 :將代碼關入了籠子之中。
  • 面向對象的方式。
  • 匿名自執行函數:其典型的代表作就是JQ。
  • 偽模塊開發(CMD/AMD)
  • 模塊化開發(還未誕生的ES6標準)
  • 我們相信未來必將更加光明,但是回顧現在,特別是在國內的市場環境中IE瀏覽器依然占據半壁江山,所以基于ES6的模塊特性依然任重道遠,因此,在光明還未播撒的時刻,就讓我們率先點燃一朵火苗照亮自己,而這朵火苗就是 ———— requireJS

    require 實戰

    下面我將化整為零的去講解requireJS在一個項目的具體使用方式以及需要注意的事項。

    引入requireJS

    通過?<script>?標簽,將require.js 文件引入到當前的 HTML 頁面中

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>RequireJS 實戰</title> </head> <body> <script src="js/require.js"></script> </body> </html>

    參數配置

    requireJS 常用的方法與命令也就兩個,因此requireJS使用起來非常簡單。

    • require
    • define

    其中define是用于定義模塊,而require是用于載入模塊以及載入配置文件。

    在requireJS中一個文件就是一個模塊,并且文件名就是該模塊的ID,其表現則是以key/value的鍵值對格式,key即模塊的名稱(模塊ID),而value則是文件(模塊)的地址,因此多個模塊便有多個鍵值對值,這些鍵值對再加上一些常用的參數,便是require的配置參數,這些配置參數我們通常會單獨保存在一個JS文件中,方便以后修改、調用,所以這個文件我們也稱之為“配置文件”。

    下面是requireJS的基本參數配置:

    //index.html <script> require.config({ baseUrl:'js/', paths:{ 'jquery':'http://xxxx.xxx.com/js/jquery.min', 'index':'index' } }); require(['index']); </script>

    require.config()?是用于配置參數的核心方法,它接收一個有固定格式與屬性的對象作為參數,這個對象便是我們的配置對象。
    在配置對象中?baseUrl?定義了基準目錄,它會與?paths中模塊的地址自動進行拼接,構成該模塊的實際地址,并且當配置參數是通過script標簽嵌入到html文件中時,baseUrl默認的指向路徑就是該html文件所處的地址。
    paths?屬性的值也是一個對象,該對象保存的就是模塊key/value值。其中key便是模塊的名稱與ID,一般使用文件名來命名,而value則是模塊的地址,在requireJS中,當模塊是一個JS文件時,是可以省略 .js 的擴展名,比如 “index.js” 就可以直接寫成 “index” 而當定義的模塊不需要與?baseUrl?的值進行拼接時,可以通過?"/"?與?http://?以及?.js?的形式來繞過?baseUrl的設定。
    示例:

    require.config({baseUrl:'js/', paths:{ 'jquery':'http://xxx.xxxx.com/js/jquery.min', 'index':'index' } }); require(['index']);

    實際上,除了可以在require.js加載完畢后,通過require.config()方法去配置參數,我們也可以在require.js加載之前,定義一個全局的對象變量 require 來事先定義配置參數。然后在require.js被瀏覽器加載完畢后,便會自動繼承之前配置的參數。

    <script>var require = { baseUrl: 'js/', paths: { 'jquery': 'http://xxx.xxxx.com/js/jquery.min', 'index': 'index' }, deps:[index] }; </script> <script src="js/require.js"></script>

    不論是在require.js加載之前定義配置參數,還是之后來定義,這都是看看我們需求而言的,這里我們舉例的配置參數都是放入到script標簽中,然后嵌入到HTML頁面的內嵌方式,在實際使用時,我們更多的則是將該段配置提取出來單獨保存在一個文件中,并將其取名為?app.js?,而這個?app.js?便是我們后面常說到的配置文件。

    另外還有一個“接口文件”的概念,requireJS中,所謂接口文件指的便是require.js加載完畢后第一個加載的模塊文件。

    加載配置文件

    現在我們知道require的配置有兩種加載方式,一種是放入到script標簽嵌入到html文件中,另一種則是作為配置文件?app.js?來獨立的引入。
    獨立的引入配置文件也有兩種方式,一種是通過script標簽加載外部JS文件形式:

    <script src="js/require.js"></script> <script src="js/app.js"></script>

    另一種方式則是使用 require 提供的?data-main?屬性,該屬性是直接寫在引入require.js的script標簽上,在require.js 加載完畢時,會自動去加載配置文件 app.js。

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

    通過?data-main?去加載入口文件,便會使配置對象中的?baseUrl?屬性默認指向地址改為 app.js 所在的位置,相比之下我更加推薦這種方式,因為它更可能的方便快捷。

    當我們的項目足夠的龐大時,我也會推薦將入口文件作為一個普通的模塊,然后在這個模塊中,根據業務的不同再去加載不同的配置文件。

    //define.js define(['app1','app2','app3','app4'],function(app1,app2,app3,app4){ if(page == 'app1'){ require.config(app1); }else if(page == 'app2'){ require.config(app2); }else if(page == 'app3'){ require.config(app3); }else{ require.config(app4); } })

    當然關于模塊的定義和載入我們后面會詳細的講解到,這里只需要有一個概念即可。

    定義模塊

    在我們選擇requireJS來模塊化開發我們的項目或者頁面時,就要明確的知道我們以后所編寫的代碼或者是某段功能,都是要放在一個個定義好的模塊中。
    下面是requireJS定義模塊的方法格式:

    define([id,deps,] callback);

    ID:模塊的ID,默認的便是文件名,一般無需使用者自己手動指定。
    deps:當前模塊所以依賴的模塊數組,數組的每個數組元素便是模塊名或者叫模塊ID。
    callback:模塊的回調方法,用于保存模塊具體的功能與代碼,而這個回調函數又接收一個或者多個參數,這些參數會與模塊數組的每個數組元素一一對應,即每個參數保存的是對應模塊返回值。

    根據?define()?使用時參數數量的不同,可以定義以下幾種模塊類型:

    簡單的值對

    當所要定義的模塊沒有任何依賴也不具有任何的功能,只是單純的返回一組鍵值對形式的數據時,便可以直接將要返回的數據對象寫在?define方法中:

    define({'color':'red','size':'13px', 'width':'100px' });

    這種只為保存數據的模塊,我們稱之為“值對”模塊,實際上值對模塊不僅可以用于保存數據,還可以保存我們的配置參數,然后在不同的業務場景下去加載不同的配置參數文件。

    示例:

    //app1.js define({baseUrl:'music/js/', paths:{ msuic:'music', play:'play' } }); //app2.js define({baseUrl:'video/js/', paths:{ video:'video', play:'play' } });

    非依賴的函數式定義

    如果一個模塊沒有任何的依賴,只是單純的執行一些操作,那么便可以直接將函數寫在?define方法中:

    define(function(require,exports,modules){// do something return { 'color':'red', 'size':'13px' } });

    依賴的函數式定義

    這種帶有依賴的函數式模塊定義,也是我們平時常用到的,這里我們就結合實例,通過上面所舉的?index?模塊為例:

    //index.js define(['jquery','./utils'], function($) { $(function() { alert($); }); });

    從上面的示例中我們可以看出?index?模塊中,依賴了 'jquery' 模塊,并且在模塊的回調函數中,通過?$?形參來接收?jquery模塊返回的值,除了?jquery?模塊,index模塊還依賴了?utils?模塊,因為該模塊沒有在配置文件中定義,所以這里以附加路徑的形式單獨引入進來的。

    載入模塊

    在說載入模塊之前,我們先聊聊“模塊依賴”。模塊與模塊之間存在著相互依賴的關系,因此就決定了不同的加載順序,比如模塊A中使用到的一個函數是定義在模塊B中的,我們就可以說模塊A依賴模塊B,同時也說明了在載入模塊時,其順序也是先模塊A,再模塊B。
    在require中,我們可以通過?require()?方法去載入模塊。其使用格式如下:

    require(deps[,callback]);

    deps:所要載入的模塊數組。
    callback:模塊載入后執行的回調方法。

    這里就讓我們依然使用上述的 index 模塊為例來說明
    示例:

    require.config({paths:{'index':'index' } }); require(['index']);

    requireJS 通過?require([])?方法去載入模塊,并執行模塊中的回調函數,其值是一個數組,數組中的元素便是要載入的模塊名稱也就是模塊ID,這里我們通過?require(['index'])?方法載入了 index 這個模塊,又因為該模塊依賴了 jquery 模塊,所以接著便會繼續載入jquery模塊,當jquery模塊加載完成后,便會將自身的方法傳遞給形參?$?最后執行模塊的回調方法,alert出$參數具體內容。

    這里我們可以小小的總結一下,實現模塊的載入除了?require([],fn)?的主動載入方法,通過依賴也可以間接載入對應的模塊,但是相比較而言require方式載入模塊在使用上更加靈活,它不僅可以只載入模塊不執行回調,也可以載入模塊然后執行回調,還可以在所定義的模塊中,按需載入所需要用到的模塊,并且將模塊返回的對象或方法中保存在一個變量中,以供使用。

    這種按需載入模塊,也叫就近依賴模式,它的使用要遵循一定的使用場景:
    當模塊是非依賴的函數式時,可以直接使用

    define(function(require,exports,modules){var utils = require('utils'); utils.sayHellow('hellow World') })

    當模塊是具有依賴的函數式時,只能夠以回調的形式處理。

    define(['jquery'], function($) { $(function() { require(['utils'],function(utils){ utils.sayHellow('Hellow World!'); }); }); });

    當然聰明伶俐的你,一定會想到這樣更好的辦法:

    define(['jquery','require','exports','modules'], function($,require,exports,modules) { $(function() { //方式一 require(['utils'],function(utils){ utils.sayHellow('Hellow World!'); }); //方式二: var utils = require('utils'); utils.sayHellow('hellow World') }); });

    模塊的返回值

    require中定義的模塊不僅可以返回一個對象作為結果,還可以返回一個函數作為結果。實現模塊的返回值主要有兩種方法:

    return 方式

    // utils.jsdefine(function(require,exports,modules){ function sayHellow(params){ alert(params); } return sayHellow }); // index.js define(function(require,exports,modules){ var sayHellow = require('utils'); sayHellow('hellow World'); })

    如果通過return 返回多種結果的情況下:

    // utils.jsdefine(function(require,exports,modules){ function sayHellow(params){ alert(params); } function sayBye(){ alert('bye-bye!'); } return { 'sayHellow':sayHellow, 'sayBye':sayBye } }); // index.js define(function(require,exports,modules){ var utils = require('utils'); utils.sayHellow('hellow World'); })

    exports導出

    // utils.jsdefine(function(require,exports,modules){ function sayHellow(params){ alert(params); } exports.sayHellow = sayHellow; }) // index.js define(function(require,exports,modules){ var utils = require('utils'); utils.sayHellow('hellow World'); });

    這里有一個注意的地方,那就是非依賴性的模塊,可以直接在模塊的回調函數中,加入以下三個參數:

    require:加載模塊時使用。
    exports:導出模塊的返回值。
    modules:定義模塊的相關信息以及參數。

    非標準模塊定義

    在?require.config()?方法的配置對象中有一個?shim?屬性,它的值是一個對象,可以用于聲明非標準模塊的依賴和返回值。
    所謂的 “非標準模塊” 指的是那些不符合的AMD規范的JS插件。
    下面我們先看看基本的?shim?配置參數:

    require.config({baseUrl:'js/',paths:{'jquery':'http://xxx.xxxx.com/js/jquery.min', 'index':'index', 'say':'say', 'bar':'bar', 'tools':'tools' }, shim:{ 'tools':{ deps:['bar'], exports:'tool' }, 'say':{ deps:['./a','./b'], init:function(){ return { 'sayBye':sayBye, 'sayHellow':sayHellow } } } } }); require(['index']);

    這里需要注意的是如果所加載的模塊文件是符合AMD規范,比如通過?define?進行定義的,那么require默認的優先級將是標準的,只有在不符合標準的情況下才會采用shim中定義的參數。

    在 index 模塊執行時:

    define(['jquery','tool','say'],function($,tool,say){ tool.drag(); say.sayHellow(); say.sayBye(); })

    上面的示例中,關于?shim?中有三個重要的屬性,它們分別是:
    deps:?用于聲明當前非標準模塊所依賴的其它模塊,值是一個數組,數組元素是模塊的名稱或者是ID。
    exports:用于定義非標準模塊的全局變量或者方法。值一般是一個字符串。
    init:用于初始,處理,非標準模塊的全局變量或者是方法,常用于當非標準模塊存在多個全局變量以及方法,值是一個函數。

    常用參數

    在?require.config?中還存在其他的常用屬性設置。

    urlArgs

    RequireJS獲取資源時附加在URL后面的額外的query參數。作為瀏覽器或服務器未正確配置時的“cache bust”手段很有用。使用cache bust配置的一個示例:
    javascript:;urlArgs: "bust=" + (new Date()).getTime()
    在開發中這很有用,但請記得在部署到生成環境之前移除它。

    scriptType

    指定RequireJS將script標簽插入document時所用的type=""值。默認為“text/javascript”。想要啟用Firefox的JavaScript 1.8特性,可使用值“text/javascript;version=1.8”。

    waitSeconds

    通過該參數可以設置requireJS在加載腳本時的超時時間,它的默認值是7,即如果一個腳本文件加載時長超過7秒鐘,便會放棄等待該腳本文件,從而報出timeout超時的錯誤信息,考慮到國內網絡環境不穩定的因素,所以這里我建議設置為0。當然一般不需要去改動它,除非到了你需要的時候。

    deps

    用于聲明require.js在加載完成時便會自動加載的模塊,值是一個數組,數組元素便是模塊名。

    callback

    當deps中的自動加載模塊加載完畢時,觸發的回調函數。

    config

    config屬性可以為模塊配置額外的參數設定,其使用格式就是以模塊名或者模塊ID為key,然后具體的參數為value。

    //app.js require.config({baseUrl:'js/', paths:{ 'jquery':'http://xx.xxxx.com/js/jquery.min', 'index':'index' }, config:{ 'index':{ 'size':13, 'color':'red' } } }); //index.js define(['jquery','module'],function($,module){ console.log(module.config().size) });

    這里要引起我們注意的地方就是依賴的'module'模塊,它是一個預先定義好的值,引入該值,在當前模塊下便可以調用module對象,從該對象中執行?config()?方法便可以生成改模塊的參數對象。

    map

    [略],暫時還未弄明白其具體使用方式,后續會繼續保持關注,如果你知曉其作用,麻煩你一定要與我聯系。

    packages

    [略],暫時還未弄明白其具體使用方式,后續會繼續保持關注,如果你知曉其作用,麻煩你一定要與我聯系。

    rquire 壓縮

    RequireJS 會將完整項目的JavaScript代碼輕易的分割成苦干個模塊(module),這樣,你將獲得一些具有互相依賴關系的JavaScript文件。在開發環境中,這種方式可以讓我們的代碼更具有模塊化與易維護性。但是,在生產環境中將所有的JavaScript文件分離,這是一個不好的做法。這會導致很多次請求(requests),即使這些文件都很小,也會浪費很多時間。因此我們可以通過合并這些腳本文件壓縮文件的大小,以減少請求的次數與資源的體積來達到節省加載時間的目的,所以這里我們就要提到一個關于requireJS 延伸,那就是 r.js。
    r.js 是一個獨立的項目,它作用在nodeJS環境中,可以實現對JS代碼的合并壓縮。

    使用r.js 要具有以下幾個條件:

  • r.js 源文件
  • bulid.js (即屬于r.js的配置文件)
  • nodeJS 環境
  • r.js 可以直接丟在項目的根目錄上,build.js 是 r.js 的配置文件,由開發者自己新建,與r.js同目錄。其一般的目錄結構如下:

    [project]/js/css/images index.html r.js build.js

    r.js 下載
    nodeJS環境,以及r.js都好辦,重要的就是掌握配置文件的使用 -- build.js,下面我們就詳細的說說它。

    ({//(選填)app的頂級目錄。如果指定該參數,說明您的所有文件都在這個目錄下面(包括baseUrl和dir都以這個為根目錄)。如果不指定,則以baseUrl參數為準appDir: './', // 輸出目錄。如果不指定,默認會創建一個build目錄dir: 'pack', // 模塊所在默認相對目錄,如果appDir有指定,則baseUrl相對于appDir。 baseUrl: 'js/', paths: { 'index': 'index', 'a': 'a', 'b': 'b', 'c': 'c' }, //過濾規則,匹配到的文件將不會被輸出到輸出目錄去 fileExclusionRegExp: ? /^(r|build)\.js|.*\.scss$/, /* JS 文件優化方式,目前支持以下幾種: uglify: (默認) 使用 UglifyJS 來壓縮代碼 closure: 使用 Google's Closure Compiler 的簡單優化模式 closure.keepLines: 使用 closure,但保持換行 none: 不壓縮代碼 */ optimize: 'none', /* 允許優化CSS,參數值: “standard”: @import引入并刪除注釋,刪除空格和換行。刪除換行在IE可能會出問題,取決于CSS的類型 “standard.keepLines”: 和”standard”一樣但是會保持換行 “none”: 跳過CSS優化 “standard.keepComments”: 保持注釋,但是去掉換行(r.js 1.0.8+) “standard.keepComments.keepLines”: 保持注釋和換行(r.js 1.0.8+) “standard.keepWhitespace”: 和”standard”一樣但保持空格 */ optimizeCss: ? '“standard”', // 是否忽略 CSS 資源文件中的 @import 指令 cssImportIgnore: null, //參與壓縮的主模塊,默認情況下會將paths模塊中定義的模塊都壓縮合并到改模塊中,通過exclude 可以排除參與壓縮的模塊,其中模塊的地址都是相對于baseUrl的地址。 modules: [{ name: 'index', exclude: ['c'] }], // 包裹模塊 wrap: true, // 自定義包裹模塊,顧名思義就是使用特定內容去包裹modules指定的合并模塊內容,如此一來 define/require 就不再是全局變量,在 end 中可以暴露一些全局變量供整個函數使用 wrap: { start: "(function() {", end: "}(window));" }, removeCombined: false, //如果shim配置在requirejs運行過程中被使用的話,需要在這里重復聲明,這樣才能將依賴模塊正確引入。 shim: {} // 載入requireJS 的配置文件,從而使用其中的paths 以及 shim 屬性值。通過指定該屬性,可以省去我們在bulid.js中重復定義 paths 與 shim屬性。 mainConfigFile:"js/app.js", })

    以上環節都準備好了之后,就可以在終端中允許打包壓縮命令:?node r.js -o build.js。
    當執行該命令后,r.js?會將自身所在目錄的所有資源連同目錄重新拷貝一份到輸出目錄(dir)中。然后再輸出目錄進行最后的合并與壓縮操作。

    其它問題

    timeout超時問題

    該問題一般是?waitSeconds?屬性值導致,解決的方法有兩個,一個是將?waitSeconds的值設置更長時間,比如17s,另一個就是將其值設置為0,讓其永不超時。

    循環依賴問題

    何為循環依賴?
    如果存在兩個模塊,moduleA 與 moduleB, 如果 moduleA 依賴 moduleB ,moduleB也依賴了moduleA,并且這中情況下,便是循環依賴。
    循環依賴導致的問題!
    如果兩個模塊循環依賴,并且A中有調用B中的方法,而B中也有調用A中的方法,那么此時,A調用B正常,但是B中調用A方法,則會返回?undefined?異常。
    如何解決循環依賴的問題?
    通過?require([],fn)?解決
    此時在模塊B中,我們通過引入 require 依賴,然后再通過?require()?方法去載入模塊A,并在回調中去執行。

    define(['require','jquery'],function(require,$){ function bFunction(){ alert('this is b module'); } require(['moduleA'],function(m){ m() // 執行傳遞過來方法 }); return bFunction; });

    這里要引起我們注意的地方就是依賴的'module'模塊,它是一個預先定義好的值,引入該值,在當前模塊下便可以調用?require?方法。

    通過?exports?解決

    define(['exports','jquery'],function(exports,$){ function bFunction(){ exports.aFunction(); alert('this is b module'); } exports.bFunction = bFunction; });

    相同的這里依賴的?module?模塊也是一個預先定義好的值,,引入該值,在當前模塊下便可以調用?exports?對象設定當前模塊的返回值。
    而通過?exports?所解決的循環依賴問題,有一個需要注意的地方,那就是方法的執行必須要放入到當前定義方法的回調中,因為我們不能確定 moduleA 與 moduleB的加載順序。

    CDN回退

    如果我們不確定一個模塊的加載正確,我們可以在?require.config()方法中將模塊的地址替換為一個數組,數組的元素,便是同一模塊的多個地址。

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

    定義AMD插件

    有時候我們自己編寫的一款插件,我們需要它能夠在任何環境中都能起作用,比如在引入requireJS的AMD環境下可以作為符合AMD規范的插件,進行模塊式加載調用,而在普通的瀏覽器環境中也可以正常的執行。
    想實現這一功能,其實很簡單,只需要按照下例格式去編寫插件即可。

    // say.js 基于JQ擴展的插件。(function(win, factory) { if ('function' === typeof define && define.amd) { define(['jquery'], function($) { return new factory(win, $) }); } else { factory(win, $); } }(window, function(win, $) { var say = function(value) { alert(value); } if ('function' === typeof define && define.amd) { return say; } else if ($ && 'function' === typeof $) { $.say = function(v) { return new say(v); } } else { win.say = function(v) { return new say(v); } } })); // index.js define(['say'],function(say){ say('hellow requireJS'); })

    關于require的預定義模塊

    關于這個問題,我們上面也有說到,這里就進行一次總結。
    我們可以這樣理解,對于 requireJS 來說,除了我們自己使用require.config()定義的模塊,它內部也有自己預先定義好的模塊,比如:require,exports,modules?,在使用時,我們無需在?require.config()?去中定義,而是可以直接在依賴中引入使用,比如:

    //index.js define(['jquery','config','require','exports','module'],function($,config,require,exports,module){ $(function(){ require.config(config); // 載入配置文件 exports.data = 'index Module Return Value' //定義模塊的返回值。 modules.config().color; // 接受在配置文件中為該模塊配置的參數數據。 }) });

    關于R.js壓縮非本地文件的問題

    在?r.js?中是無法合并壓縮遠程文件的,它只能操作本地文件,因此這就帶來一個問題,當我們進行模塊的壓縮合并時,若某個模塊存在著對遠程模塊(文件)的依賴時,使用?r.js?進行操作便會報錯,雖然可以將這個遠程文件拷貝到本地來解決這一問題,但是如果像一些公用的資源例如JQ插件等,如果讓每個項目都在本地放入一個?common?資源包,這就脫離了我們的實際意義。

    ({paths:{jquery:'http://xxx.com/js/jquery.min'} })

    此時進行打包的時候在就會報錯。但是如果我們不在?paths?中去聲明?jquery模塊,當打包的時候,r.js?發現其它模塊有依賴?jquery的,但是你又沒有在?build.js中聲明,依然會報錯阻礙運行。
    那么有沒有一個好的辦法呢?比如雖然聲明了?jquery?模塊,但是值卻不是遠程的文件,本地也不存在該文件,更不會報錯。答案是有的,那就是對(不需要參與壓縮合并的)遠程的資源模塊設置值為 empty:。 ```javascript:; ({ paths:{ jquery:'empty:' } }) ``` 或者是在執行命令時,指定參數值為空:node r.js -o build.js paths.jquery=empty:`

    關于R.js - shim功能的說明

    R.js 用于合并多個模塊(多個文件),以及壓縮文件中的JS代碼,也就是說在這個合并后的文件中會包含多個?define定義的模塊,而這個合并后的文件也就是這個頁面的入口文件,并且rquire的config配置也會在其中。

    模塊的合并,對于R.js來言,它會以?build.js?中?paths屬性定義的模塊為參考,然后到要合并的模塊只能中去匹配依賴,匹配到了就合并到當前文件中。如果參與合并的所有模塊有某些依賴順序上的調整,則可以通過?shim?屬性去調整合并時的前后順序。

    //build.js ({'paths':{'a':'a', 'b':'b' }, 'shim':{ 'a':{ 'deps':['b'] } }, wrapShim:true })

    此時合并到主文件后,b?模塊的內容就會在?a?模塊之前。

    define('b',[],function(){}), define('a',[],function(){})

    最后強調一點,對于通過?exclude?屬性排除合并的模塊,使用?shim?并不會產生作用,因為它只對合并在一個文件中的模塊有效。

    關于require加載CSS的問題

    requireJS不僅僅只加載JS文件,實際上它還可以加載CSS樣式文件,但是這需要借助一個requireJS插件才能實現。
    下載地址:require-css.js

    使用上,有兩種方式,一種在配置參數中進行聲明:

    var require = {baseUrl:'js/', paths:{ 'index':'index', 'a':'a' }, shim:{ 'a':{ deps:['css!../css/a.css'] } }, deps:['index'] }; //index.js define(['a']); // 載入模塊不執行任何操作。

    另一種是直接在模塊中進行依賴聲明

    define(['css!../css/a.css']);

    最后說下我個人對?css!../css/index.css?的理解吧,首先?!?是插件與插件參數的分割符號,因此"css"就是插件的模塊名,requireJS會先去檢查?css?這個模塊是否有在配置文件中聲明,如果沒有則會默認在?baseUrl?指向的路徑下去載入,而分隔符右邊的 '../css/a.css' 就是插件要使用的參數,這里便是要載入的css文件地址。


    http://requirejs.org/docs/api.html // 這是require的英文版官網,建議來這里學習,中文版太多翻譯問題。
    https://segmentfault.com/a/1190000002401665 //對require的配置參數講解的很詳細

    ?

    原文:https://www.cnblogs.com/HCJJ/p/6611669.html

    ?

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/ljbkyBlog/p/10190473.html

    總結

    以上是生活随笔為你收集整理的requireJS 从概念到实战的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日韩欧美在线中文字幕 | 国产在线不卡精品 | 亚洲欧美va| av福利网址导航大全 | 久久免费成人网 | 五月婷香 | 伊人五月在线 | 久久无码精品一区二区三区 | 成人毛片在线观看视频 | 99激情网| 欧美另类高清 videos | 久草99| 天堂久久电影网 | 久久综合毛片 | 免费黄色网止 | 亚洲综合婷婷 | 国产精品一区二区果冻传媒 | 一区二区三区高清在线观看 | 亚洲激情在线播放 | 免费精品久久久 | 久久高清av | 91视频网址入口 | 在线激情网 | 久久精品国产一区二区 | 丝袜制服天堂 | 99精品国自产在线 | 丁香婷婷色综合亚洲电影 | 国产精品99久久久久的智能播放 | 久久精品视频免费播放 | 婷婷国产v亚洲v欧美久久 | 精品中文字幕在线 | 日韩欧美高清 | 美国人与动物xxxx | 九九热1 | 在线观看中文字幕亚洲 | 亚洲永久国产精品 | 91成人免费观看视频 | 日韩网站一区二区 | 2023亚洲精品国偷拍自产在线 | 国产在线播放一区 | 国产成人在线精品 | 丁香久久久 | 久久精品视频在线看 | 在线观看视频99 | 激情五月六月婷婷 | 欧美激情综合五月 | 黄色成品视频 | 亚洲日本韩国一区二区 | 中文字幕国产视频 | 就操操久久 | 天天激情综合 | 一区二区三区 中文字幕 | 狠狠色丁香婷婷 | 天天综合网久久综合网 | 精品中文字幕在线观看 | 国产精品热视频 | 天天干亚洲 | 狠狠操狠狠干天天操 | 国产高清视频在线播放一区 | 免费久久99精品国产 | 中文字幕黄色av | 欧美巨大荫蒂茸毛毛人妖 | 色99在线| 国产一线二线三线在线观看 | 日韩精品免费一区二区三区 | 99r在线| 日韩黄色中文字幕 | 正在播放亚洲精品 | 婷婷伊人综合亚洲综合网 | 久草五月| 日本三级久久久 | 国产精品毛片久久久久久久 | 久草91视频| 日韩特黄av | 久久综合久久综合这里只有精品 | 亚洲精品一区二区久 | 欧美成年人在线观看 | 国产精品久久久久久久久久白浆 | 天天爱天天舔 | 色婷婷激情电影 | 国产精品久久久av | 久久精品这里热有精品 | 久久99热国产 | 精品国产一区二区三区免费 | 毛片基地黄久久久久久天堂 | 一本色道久久精品 | 99精品久久久久久久 | 久久都是精品 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 日本久久久久久久久久 | 欧美日韩在线精品一区二区 | 国产高清日韩欧美 | av一区二区三区在线播放 | 国产99久久精品一区二区300 | 亚洲黄色成人网 | 日韩精品国产一区 | 特级a毛片 | 人人射网站 | 九九九九九精品 | 色综合久久久久综合体桃花网 | 亚洲精品欧美成人 | 四虎成人免费观看 | 午夜在线看| 在线看片91| 亚洲五月婷 | 国产精品免费久久久久久久久久中文 | 天天色天天上天天操 | 成人在线免费观看网站 | 免费日韩在线 | 亚洲涩涩网| 国产999精品久久久久久麻豆 | 久久99最新地址 | 久久综合操 | 午夜精品一区二区三区视频免费看 | 精品国产欧美一区二区 | 欧美日韩国产精品一区二区亚洲 | 国产中文字幕视频 | 久久这里只有精品1 | 色噜噜在线观看 | 久久午夜精品视频 | 97涩涩视频 | 国产精品中文字幕在线观看 | 亚洲三级黄 | 国产高清 不卡 | 色综合天天视频在线观看 | 91精品小视频 | 99国产精品免费网站 | 国产韩国精品一区二区三区 | 久久久久女教师免费一区 | 天天干天天操天天入 | 国产韩国日本高清视频 | 国产精品综合久久 | 亚洲激情精品 | 中文区中文字幕免费看 | 91精品视频在线 | 国产精品成人久久久久久久 | 日韩免费电影在线观看 | 看国产黄色大片 | 国产高清免费av | 又色又爽又激情的59视频 | 日韩理论在线播放 | 免费福利视频网 | 99精品免费久久久久久久久 | 欧美黄色免费 | 精品福利网 | 亚洲欧美少妇 | 夜色资源网 | 麻豆一级视频 | 毛片美女网站 | 91激情视频在线 | 狠狠色丁香婷婷综合久小说久 | 最新日韩在线观看 | 亚洲欧美乱综合图片区小说区 | 一区二区三区福利 | 欧美成人精品欧美一级乱黄 | 亚洲影院一区 | 国产资源在线观看 | 日韩视频免费观看高清完整版在线 | 亚洲 中文 在线 精品 | 亚洲精品视频网站在线观看 | 色婷婷激情电影 | 国产精品亚洲a | 六月丁香婷婷在线 | 久久精品99国产精品酒店日本 | 亚洲精品欧美视频 | 99国产一区二区三精品乱码 | 久久久 精品 | 激情伊人五月天 | 99视频偷窥在线精品国自产拍 | 中文字幕第一页在线播放 | 久久新视频 | 亚洲夜夜网 | 99免费精品| 91麻豆网 | 亚洲最大成人免费网站 | 欧美一级片在线观看视频 | 国产精品一区二区免费在线观看 | 日韩网站在线看片你懂的 | 欧美色精品天天在线观看视频 | 91香蕉亚洲精品 | 久久视频在线观看 | www.香蕉视频在线观看 | 四虎在线免费观看 | 日本一区二区三区免费观看 | 免费网址在线播放 | 久久久久久蜜桃一区二区 | 国产成人在线免费观看 | 日韩特黄av | 一区二区三区四区五区在线 | 在线看一区| 香蕉手机在线 | 欧美日产在线观看 | 亚洲一区视频免费观看 | www.神马久久| 欧美激情精品久久久久久免费 | 日本精品一区二区三区在线播放视频 | 亚洲码国产日韩欧美高潮在线播放 | 精品国产一区二区三区男人吃奶 | a级国产乱理论片在线观看 特级毛片在线观看 | 国产精品成人国产乱一区 | 国产免费又粗又猛又爽 | 日本精品中文字幕 | 久久精品看片 | 不卡在线一区 | 91精品国产一区二区在线观看 | 黄色片网站大全 | 99精品视频免费看 | a亚洲视频 | 成年人视频在线免费观看 | 久久久国产一区二区三区四区小说 | 国产夫妻自拍av | 日韩电影中文,亚洲精品乱码 | 成人免费色| 色综合久久综合中文综合网 | 亚洲欧美日韩国产 | 亚洲视频 在线观看 | 国产精品久久嫩一区二区免费 | 亚洲欧洲一区二区在线观看 | 天堂久久电影网 | 国产盗摄精品一区二区 | 精品国产一区在线观看 | 中文字幕在线播放视频 | 精品福利视频在线 | 日本一区二区不卡高清 | 麻豆综合网 | 国产中年夫妇高潮精品视频 | 日韩两性视频 | 久久成 | 久久精品永久免费 | .精品久久久麻豆国产精品 亚洲va欧美 | 婷婷激情在线观看 | 国产高清不卡 | 国产精品久久久久久久久久 | 久久午夜电影 | 九九精品视频在线观看 | 成人a v视频 | 国产精品一区二区三区免费视频 | 深爱五月激情五月 | 欧美日韩久久不卡 | 91九色精品女同系列 | 国产精品毛片久久久久久久久久99999999 | 在线免费观看国产精品 | 成人午夜电影网站 | 亚洲日韩欧美一区二区在线 | 国产精品理论片在线观看 | 日韩欧美高清一区二区三区 | 久久99亚洲精品久久久久 | 久久久久久久99精品免费观看 | 日韩中文字幕电影 | 中文视频在线看 | 国产精品美女免费看 | 91免费在线 | 啪啪资源 | 91成人精品观看 | 国产精品欧美久久久久久 | 日韩三级.com | 欧美一区二区三区特黄 | 狠狠gao | 国内精品99| 久久免费视频播放 | 日本黄色黄网站 | 久草在线视频免费资源观看 | 一级免费看视频 | 亚洲国产精品va在线看黑人动漫 | 日韩av有码在线 | 少妇按摩av | 国产高清不卡一区二区三区 | 亚洲日本一区二区在线 | 国产一级特黄电影 | 国产免费黄色 | 日韩激情中文字幕 | 97国产| 四虎在线免费观看 | 91久久久久久久一区二区 | 国产不卡高清 | 国产精品久久久视频 | 亚洲美女在线一区 | 色综合夜色一区 | 亚洲成人av一区 | 亚洲一区日韩精品 | 国产高清视频在线 | 国产一级久久 | 九九免费在线观看视频 | 亚洲成人精品影院 | 午夜精品一区二区三区在线播放 | 日韩色av色资源 | 色综合天天天天做夜夜夜夜做 | 狠狠色香婷婷久久亚洲精品 | 成人午夜片av在线看 | 日韩丝袜 | 免费欧美高清视频 | 丁香在线观看完整电影视频 | 亚洲午夜在线视频 | 色91在线 | 日韩电影在线观看中文字幕 | 婷婷夜夜| 精品资源在线 | 久久在线影院 | 亚洲高清视频一区二区三区 | 日韩精品中文字幕在线观看 | 亚洲激情视频在线观看 | 日韩黄色免费 | 久久精品一二三区 | 在线一区av | 欧美激情第八页 | 97超级碰碰碰视频在线观看 | 久久手机精品视频 | 日韩免费播放 | 福利片视频区 | 亚洲视频观看 | 欧美另类成人 | 亚洲第一中文字幕 | 波多野结衣理论片 | 你操综合 | 夜夜躁日日躁狠狠躁 | 国产精品一区二区免费看 | 国产精品视频观看 | 精品久久久久久国产91 | 网址你懂的在线观看 | 中字幕视频在线永久在线观看免费 | 黄色片网站av| 国产一级视频在线 | 亚洲精品国产精品国自产观看浪潮 | 免费在线观看成人小视频 | 中文字幕在线观看第三页 | 337p日本大胆噜噜噜噜 | 精品国产乱码久久久久久1区二区 | 国产视频2区| 91麻豆国产福利在线观看 | 国产又粗又硬又爽的视频 | 日韩精品一区二区在线 | av中文电影 | 亚洲成人av片 | 亚洲片在线资源 | 9在线观看免费高清完整 | 国产精品一二三 | 91新人在线观看 | 久草精品在线播放 | 午夜电影久久 | 国产一级免费电影 | 日韩中文字幕亚洲一区二区va在线 | 99爱视频在线观看 | 亚洲欧洲xxxx| 五月天色网站 | 久草电影免费在线观看 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产精品高清在线观看 | 中文在线天堂资源 | 成年人在线视频观看 | 一区二区不卡 | 亚洲天堂网在线视频 | 亚洲播播 | 婷婷综合伊人 | 久久www免费人成看片高清 | 91香蕉国产在线观看软件 | 在线观看香蕉视频 | 欧美日韩在线视频一区二区 | 亚洲国产剧情av | 国产精品亚洲片在线播放 | 91精品色 | 色婷婷激情电影 | 国产色爽 | 99在线精品视频在线观看 | 欧美91片 | 久久国产经典视频 | 日日夜夜干 | 在线观看成年人 | 亚洲精品一区二区三区新线路 | 国产精品久久久免费看 | 久久久精品国产一区二区电影四季 | 超碰人人在线观看 | 日本爱爱片 | 亚洲成人av电影 | 成人精品99| 国产精品精品国产色婷婷 | 在线观看第一页 | 97超碰人人澡 | 欧美日韩午夜 | 福利视频 | 国产xx视频 | 国产91九色视频 | 久草在线综合网 | 成人a免费看 | 日韩网站一区二区 | 日韩高清 一区 | 一区二区三区免费播放 | 在线观看一区二区精品 | 丁香六月av| 99久热在线精品视频成人一区 | 一区二区三区精品在线视频 | 欧洲色吧 | 人操人| 亚洲成人免费在线 | 毛片网站在线看 | 天天综合中文 | 日韩精品一区二区在线观看视频 | 国产精品久久久久久久午夜片 | 伊人开心激情 | www.久草视频 | 中国一区二区视频 | 丁香花中文在线免费观看 | 丁香花在线视频观看免费 | 日韩在线观看小视频 | 日韩女同一区二区三区在线观看 | 安徽妇搡bbbb搡bbbb | 中文字幕影片免费在线观看 | 激情网站免费观看 | 国产精品永久免费观看 | 在线免费观看羞羞视频 | 色偷偷人人澡久久超碰69 | 青草视频在线 | 毛片区| 九九精品视频在线 | 欧美久久久久久久久久久久 | 国产精品久久久久久久久毛片 | 免费看成年人 | 亚洲精品高清视频在线观看 | 99久久99久久免费精品蜜臀 | 高清免费在线视频 | 日韩成人在线免费观看 | 亚洲欧美日韩一区二区三区在线观看 | 日韩电影在线观看中文字幕 | 欧美xxxx性xxxxx高清 | 国产成人福利在线 | 欧美成人性战久久 | 成年人免费在线观看 | 国产一级a毛片视频爆浆 | 日韩精品在线免费观看 | 欧美国产日韩在线观看 | 久久免费在线观看视频 | 久久综合免费视频影院 | 久久久国产一区二区 | 在线观看免费黄视频 | 国产区在线看 | 麻豆播放 | 97人人澡人人爽人人模亚洲 | 中文字幕在线观看视频一区 | 91av色 | 日韩动漫免费观看高清完整版在线观看 | 色婷婷综合成人av | 久草在线视频网 | 欧美-第1页-屁屁影院 | 99免费在线| 在线免费黄网站 | 免费a一级 | 久久久久亚洲天堂 | 久久国产精品影片 | 日韩在线高清视频 | 天天干天天干天天干天天干天天干天天干 | 久久亚洲美女 | 911精品美国片911久久久 | 又黄又爽又湿又无遮挡的在线视频 | 伊人久久影视 | 国产精品美女久久久久久久 | 亚州av免费| 精品在线播放视频 | 日日天天 | 午夜在线免费观看视频 | 国产成人精品亚洲日本在线观看 | 久久视频在线观看 | 九九色在线观看 | 亚洲 中文 欧美 日韩vr 在线 | 成人在线免费观看网站 | 91社区国产高清 | 亚洲国产中文字幕在线观看 | 91人人射| 免费观看全黄做爰大片国产 | 天天操天天是 | 天堂资源在线观看视频 | 中文字幕字幕中文 | 91麻豆精品国产91久久久久 | 免费污片| 日本中文乱码卡一卡二新区 | 色网站在线免费观看 | 5月丁香婷婷综合 | av网站大全免费 | 亚洲天堂自拍视频 | 国产精品 日韩 欧美 | 国产精品永久免费在线 | 国产精品一二 | 久久精品这里热有精品 | 一区免费观看 | 免费看污黄网站 | 国产精品成人一区二区 | 欧美日韩在线免费观看 | 国产美女视频 | 五月婷网站| 中文字幕乱在线伦视频中文字幕乱码在线 | 中文字幕乱码一区二区 | 亚洲综合成人专区片 | 韩国一区二区三区在线观看 | 热re99久久精品国产66热 | 久久精品国产第一区二区三区 | 不卡国产在线 | 天天爱天天操 | 成人一区二区在线观看 | 婷婷六月天在线 | 国产在线一线 | 日韩激情免费视频 | 亚洲国产免费 | 最近中文字幕大全中文字幕免费 | 国产高清在线视频 | 四虎成人免费观看 | 精品国产乱码久久久久久1区二区 | 在线亚洲成人 | 日韩理论 | 中文字幕精品一区二区三区电影 | 久久国产精品久久国产精品 | 色偷偷人人澡久久超碰69 | 国产成人精品一区二区 | 在线免费91 | 成人在线免费小视频 | 9999在线视频 | 亚洲成aⅴ人在线观看 | 久草在线视频首页 | 亚洲精品456在线播放 | 亚洲人久久 | 精品在线视频观看 | 激情五月婷婷丁香 | 亚洲国产中文在线观看 | 国产精品不卡在线播放 | 伊人伊成久久人综合网小说 | 国产亲近乱来精品 | 国产黄色片免费在线观看 | av电影不卡在线 | 午夜av在线免费 | 精品国产一二三 | 五月婷网站 | 2021国产在线| 66av99精品福利视频在线 | 日日夜夜精品视频天天综合网 | 国产成年人av | 国产精品激情偷乱一区二区∴ | 久久久久一区二区三区 | 9999免费视频| 国产中文字幕在线观看 | 久久视频国产精品免费视频在线 | 日本一区二区三区免费观看 | 一区二区三区在线不卡 | 亚洲视频在线观看免费 | 色综合久久精品 | 永久免费的啪啪网站免费观看浪潮 | 久久免费在线观看视频 | 在线黄色免费 | 国产91精品看黄网站 | 99精品久久久久久久久久综合 | 亚洲精品乱码久久久一二三 | 狠狠狠狠狠操 | 精品国产网址 | 国产日本在线观看 | 久在线观看 | 中文字幕亚洲精品在线观看 | 精油按摩av | 日本性xxx | 国产一区二区在线播放 | 亚洲一区日韩精品 | www国产亚洲精品久久麻豆 | 久久久久久久久久久黄色 | 中文在线免费看视频 | 日韩电影一区二区三区在线观看 | 亚洲免费在线播放视频 | 香蕉精品视频在线观看 | 欧美日韩在线视频一区 | 涩涩网站在线看 | 久草剧场 | 爱av在线网 | 国产免费叼嘿网站免费 | 国产精品入口66mio女同 | 在线免费观看的av网站 | 国产精品毛片久久久 | 久草在线视频国产 | 日日夜夜天天干 | 97成人精品区在线播放 | 最新av免费在线观看 | www.91成人| 成人久久国产 | 国产精品久久网站 | 182午夜在线观看 | 国产69精品久久99不卡的观看体验 | 在线黄色av电影 | 国产99久久久精品 | 欧美精品一区二区免费 | 丁香激情综合久久伊人久久 | 精品日本视频 | 精品黄色在线观看 | 日韩手机视频 | 国产中文字幕亚洲 | av免费在线网 | 天天噜天天色 | 激情久久久久久久久久久久久久久久 | 91在线国内视频 | 999成人免费视频 | 在线免费看片 | 日韩精品一区二区三区电影 | 国产在线p | 97爱爱爱 | 亚洲精品国精品久久99热一 | 久久看片网站 | 美女国内精品自产拍在线播放 | 久久一区二区三区超碰国产精品 | 中文字幕在线看视频 | 国产在线国偷精品产拍 | 中文区中文字幕免费看 | 国产精品久久久久久久久久直播 | 波多野结衣视频一区二区三区 | 国产精品乱码久久久久久1区2区 | 狠狠色狠狠色综合日日92 | 国产精品18毛片一区二区 | 国产精品美女久久久网av | 色狠狠久久av五月综合 | 一级成人免费视频 | 久热免费在线 | 久久国产精品久久久 | 久久久久久久久久网 | 亚洲视频第一页 | a电影免费看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 超级碰视频 | 欧美激情亚洲综合 | www黄com| 手机av网站| 在线免费观看视频a | www最近高清中文国语在线观看 | 久久综合在线 | 国产五月 | av先锋中文字幕 | 91精品在线免费视频 | 91九色在线视频观看 | www.成人sex| 成人福利在线观看 | 国产精品一二 | 国产va精品免费观看 | 久久成人国产精品入口 | 91完整视频| av一区二区三区在线播放 | 99精品在线 | 久草网在线观看 | 精品欧美一区二区精品久久 | 亚洲日本精品视频 | 色婷婷影视| 久久色网站 | 日韩一级片观看 | 99久久成人 | 欧洲视频一区 | 狠狠色丁香九九婷婷综合五月 | 免费av影视| 在线中文字幕视频 | 五月天婷婷丁香花 | 97天堂网 | 欧美激情综合网 | 91精品婷婷国产综合久久蝌蚪 | 911久久香蕉国产线看观看 | 热久久这里只有精品 | 日日夜夜噜噜噜 | 欧美性春潮 | 国产一区欧美一区 | 免费在线播放黄色 | 91精品专区 | 久久久久亚洲天堂 | 精品96久久久久久中文字幕无 | 国产资源免费在线观看 | 草久久影院| 国产午夜麻豆影院在线观看 | 国产精品毛片久久久久久久 | 国产精品高 | 97视频免费观看 | 国产在线小视频 | 国产91精品看黄网站 | 九九精品视频在线观看 | av最新资源| 911精品视频 | 深夜免费小视频 | 色婷婷av国产精品 | 欧美成人精品三级在线观看播放 | 久久久国产精品人人片99精片欧美一 | 成人免费观看在线视频 | 天天操天天操天天操天天 | 欧美激情精品久久久久久 | 国产精品一区二区三区久久久 | 国产精品色婷婷 | 九九99| 成人精品亚洲 | 丁香六月在线 | 日韩视频区 | 西西444www| 久久国产精品久久国产精品 | 久久久久久久久影院 | 中文字幕视频三区 | 91激情视频在线 | 久久国产精品一区二区三区 | av3级在线| 久久久久女人精品毛片九一 | 亚洲精品美女 | 久久综合九色综合久99 | 97av.com| www.亚洲视频 | 91成版人在线观看入口 | 欧美久久精品 | 国产精品一区二区视频 | 97超碰中文字幕 | 欧美成人黄色 | 久草精品视频在线播放 | 日韩sese| 久久视屏网 | 欧美一级在线观看视频 | 在线观看色视频 | 精品国产电影一区二区 | 视频一区二区在线 | 成人av网站在线观看 | 亚洲成a人片在线观看网站口工 | 色姑娘综合 | 日韩视频一区二区三区在线播放免费观看 | 国内精品久久久久影院一蜜桃 | 在线观看中文字幕第一页 | 欧美日韩免费一区 | 97人人澡人人添人人爽超碰 | 五月天亚洲综合 | 亚洲片在线资源 | 天天夜操 | 免费视频 三区 | 激情 婷婷 | 精品久久久久久电影 | 成人亚洲精品久久久久 | 国产专区视频在线 | 亚洲九九精品 | 欧美另类交在线观看 | 国产精品资源在线观看 | 国产精品久久久久久久99 | 中文字幕在线观看你懂的 | 欧美视频在线观看免费网址 | 又黄又刺激视频 | 久久99电影 | 免费www视频 | 欧美激情第一区 | 欧美 亚洲 另类 激情 另类 | 中文字幕超清在线免费 | 日日夜夜天天干 | 一区二区三区四区五区在线 | 国产毛片久久久 | 成人性生爱a∨ | 99综合视频 | 波多野结衣一区二区三区中文字幕 | 久久午夜电影网 | 亚洲精品tv久久久久久久久久 | 97理论电影 | 日韩中文字幕免费视频 | 69av网| 97av在线 | 亚洲激情在线观看 | 免费在线精品视频 | 国产成人久久精品77777 | 色噜噜在线观看视频 | 在线视频免费观看 | 国产一区欧美日韩 | 99精品视频在线播放观看 | 亚洲精品综合在线观看 | 免费观看成人av | 亚洲国产精品成人女人久久 | 国产黄色一级大片 | 日韩欧美在线观看一区二区 | 久久久久久国产精品999 | 一区二区不卡视频在线观看 | 91高清免费| 日韩激情片在线观看 | 国产精品福利无圣光在线一区 | 日韩久久久久久久久 | 黄色毛片在线看 | 亚洲国产播放 | 亚洲精品资源在线 | 在线观看久久久久久 | 五月婷婷综合网 | 97精品国产97久久久久久 | 亚洲黄色激情小说 | 狠狠的日日| 中文字幕在线观看亚洲 | 亚洲 欧洲 国产 日本 综合 | 99综合电影在线视频 | 日韩欧美高清视频在线观看 | 国产手机视频在线 | 午夜影院一级 | 久久天天综合网 | 综合天堂av久久久久久久 | 丰满少妇在线观看资源站 | 成年人在线免费看视频 | 欧美日韩视频在线观看免费 | 狠狠干成人综合网 | 久久99中文字幕 | 亚洲精品中文字幕在线观看 | 精品国产电影一区 | 国产视频一区在线免费观看 | av一本久道久久波多野结衣 | 精品一二三区 | 日韩在线观看视频中文字幕 | 人人精久 | 99久久精品国产亚洲 | 中文字幕av最新 | 日韩xxxbbb| 久久人91精品久久久久久不卡 | 日韩欧美黄色网址 | 免费a视频| av黄免费看 | 久久三级视频 | 欧美一级免费在线 | 天天操夜夜做 | 成人app在线免费观看 | 丁香婷婷综合色啪 | 久久国产高清 | 国产 欧美 日韩 | 在线看片91 | 91香蕉视频黄 | 91在线观看视频 | 国产999精品久久久久久 | 精品久久毛片 | 国产一区二区三精品久久久无广告 | 狠狠干天天色 | 欧美精品在线观看免费 | 国产黄色片免费观看 | 一本一道久久a久久精品 | 久久国产精品99久久人人澡 | 欧洲高潮三级做爰 | www黄色av| 黄色毛片大全 | 精品一区免费 | 国产精品白丝av | 五月天色丁香 | 久草精品视频 | 天天夜夜亚洲 | 日韩在线观 | 成人黄色在线观看视频 | 亚洲综合精品在线 | 免费在线观看91 | 狠狠激情中文字幕 | 成人国产电影在线观看 | 欧美一区二区在线 | 久久免费播放视频 | 五月天婷婷丁香花 | 激情电影在线观看 | 日韩精品久久久久久中文字幕8 | 亚洲毛片视频 | av色图天堂网 | 成人久久综合 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产小视频在线观看免费 | 欧美一区在线观看视频 | 亚洲成年人在线播放 | 国产一区二区高清视频 | 日韩电影中文字幕在线观看 | 日韩av在线高清 | 成人黄色大片 | 日韩一区二区免费视频 | 黄色国产精品 | 天天爽天天摸 | 在线视频a | japanesexxx乱女另类 | 在线观看视频一区二区 | 日韩网 | 亚洲手机天堂 | 国产精品9999 | 中文字幕视频一区 | 亚洲伊人av | 91在线porny国产在线看 | 香蕉蜜桃视频 | 国产九色在线播放九色 | av一级片网站| 亚洲无吗av | 久久久精品日本 | 中文字幕在线观看完整版电影 | 99色视频 | 涩涩爱夜夜爱 | 免费观看的av网站 | 江苏妇搡bbbb搡bbbb | 日韩视频在线观看视频 | 婷婷久久一区二区三区 | 国产综合福利在线 | 毛片888| 国产精品久久久久久久久久久久 | 日韩一区二区三区免费视频 | 国产成人61精品免费看片 | 色综合天天在线 | 97成人在线观看 | 欧洲精品一区二区 | 日韩精品一区二区不卡 | 亚洲五月综合 | 国际精品网 | 99tvdz@gmail.com| 亚洲成a人片综合在线 | 成人在线一区二区三区 | 国产亚洲精品久久久久久久久久 | 日韩精品久久中文字幕 | 国产一级精品在线观看 | 啪啪凸凸 | 亚洲影院国产 | 国内免费的中文字幕 | 九九热视频在线 | 国产黄色片在线免费观看 | 在线观看理论 | 久艹视频免费观看 | 五月婷婷视频在线 | 婷婷色站 | 国产一区自拍视频 | 日本午夜在线观看 | 久草在线视频在线 | 日韩精品一区二区三区水蜜桃 | 亚洲国产高清在线 | 国产一卡二卡四卡国 | 在线免费高清视频 | 九九综合在线 | 亚洲精品视频免费看 | av888.com| 国产精品原创 | 狠狠色伊人亚洲综合网站色 | 国产黄a三级三级 | 国产探花视频在线播放 | 五月婷婷视频在线 | 国产精品久久久久永久免费观看 | 国产成人免费在线 | 在线观看日韩 | 成人三级网站在线观看 | 黄色精品网站 | 日韩区欠美精品av视频 | 欧美精品在线一区二区 | 丁香五婷| 免费观看黄色12片一级视频 | 久久久久久免费 | 美女很黄免费网站 | www.xxxx欧美 | 韩国av免费观看 | 国产剧情一区在线 | 国产精品日韩在线播放 | 久久久99精品免费观看app | 一区二区理论片 | 成人资源网 | 日韩亚洲国产中文字幕 | 精品久久久久国产 | 久久久久国产精品厨房 | av免费在线免费观看 | 黄色性av | 亚洲综合激情小说 | 国产成人一区二区三区久久精品 | 天天操天天操天天操天天操天天操 | 欧美成人黄色片 | 日韩久久精品一区二区 | 日韩性网站| 免费在线成人av | 人人澡超碰碰97碰碰碰软件 | 麻豆视频免费观看 | 狠狠狠色丁香婷婷综合久久五月 | 欧美精品午夜 | 很黄很色很污的网站 | 日韩高清免费在线观看 | 天天插伊人 | 亚洲mv大片欧洲mv大片免费 | 久久夜视频| 久久久人人爽 | 国产 视频 高清 免费 | 国产精品视频线看 | www色综合| 国产a国产| 国际精品久久久 | 免费在线观看国产黄 | 欧美在线观看视频一区二区 | 免费观看成人网 | a在线观看视频 | 久久国产精品一区二区三区四区 | 精品久久久久久一区二区里番 | 天天人人| 婷婷新五月 | 国产91精品一区二区麻豆亚洲 | 日韩性色| 久久精品99久久久久久 | 久久99精品国产麻豆宅宅 | 中文在线免费观看 | 国产亚洲激情视频在线 | 国产精品成久久久久三级 | 美女在线免费观看视频 | 免费久久99精品国产 | 亚洲综合狠狠干 | 亚洲天天在线日亚洲洲精 | 天天人人综合 | 亚洲国产影院 | 欧美国产一区在线 | 伊人www22综合色 | 黄色www在线观看 | 亚洲欧美日韩国产一区二区 | 欧美一级网站 | 亚州精品在线视频 | 丁香六月激情婷婷 | 亚洲天天做 | 日日摸日日碰 | 久久久久夜色 | 久久视频精品在线 | 国产理论影院 | 国产日产高清dvd碟片 | 99久久精品久久久久久清纯 | 天天干天天爽 | 久久96国产精品久久99漫画 | 国产精品一区二区免费 | 视频福利在线 |