国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

前端構(gòu)建這十年

共 8439字,需瀏覽 17分鐘

 ·

2021-09-28 13:37

作者 |  李十三
https://segmentfault.com/a/1190000040496020


◆  寫在前面

前端模塊化/構(gòu)建工具從最開始的基于瀏覽器運行時加載的 RequireJs/Sea.js 到將所有資源組裝依賴打包 webpack/rollup/parcelbundle類模塊化構(gòu)建工具,再到現(xiàn)在的bundleless基于瀏覽器原生 ES 模塊的 snowpack/vite,前端的模塊化/構(gòu)建工具發(fā)展到現(xiàn)在已經(jīng)快 10 年了。

本文主要回顧 10 年間,前端模塊化/構(gòu)建工具的發(fā)展歷程及其實現(xiàn)原理。

看完本文你可以學(xué)到以下知識:

  • 模塊化規(guī)范方案

  • 前端構(gòu)建工具演變,對前端構(gòu)建有一個系統(tǒng)性認(rèn)識

  • 各個工具誕生歷程及所解決的問題

  • webpack/parcel/vite 的構(gòu)建流程及原理分析

(因涉及一些歷史、趨勢,本文觀點僅代表個人主觀看法)


◆  基于瀏覽器的模塊化

· CommonJS

一切的開始要從CommonJS規(guī)范說起。

CommonJS 本來叫ServerJs,其目標(biāo)本來是為瀏覽器之外javascript代碼制定規(guī)范,在那時NodeJs還沒有出生,有一些零散的應(yīng)用于服務(wù)端的JavaScript代碼,但是沒有完整的生態(tài)。

之后就是 NodeJs 從 CommonJS 社區(qū)的規(guī)范中吸取經(jīng)驗創(chuàng)建了本身的模塊系統(tǒng)。

· RequireJs 和 AMD

CommonJs 是一套同步模塊導(dǎo)入規(guī)范,但是在瀏覽器上還沒法實現(xiàn)同步加載,這一套規(guī)范在瀏覽器上明顯行不通,所以基于瀏覽器的異步模塊 AMD(Asynchronous Module Definition)規(guī)范誕生。

define(id?, dependencies?, factory);


AMD規(guī)范采用依賴前置,先把需要用到的依賴提前寫在 dependencies 數(shù)組里,在所有依賴下載完成后再調(diào)用factory回調(diào),通過傳參來獲取模塊,同時也支持require("beta")的方式來獲取模塊,但實際上這個require只是語法糖,模塊并非在require的時候?qū)?,而是跟前面說的一樣在調(diào)用factory回調(diào)之前就被執(zhí)行,關(guān)于依賴前置和執(zhí)行時機(jī)這點在當(dāng)時有很大的爭議,被 CommonJs社區(qū)所不容。

在當(dāng)時瀏覽器上應(yīng)用CommonJs還有另外一個流派 module/2.0, 其中有BravoJS的 Modules/2.0-draft 規(guī)范和 FlyScript的 Modules/Wrappings規(guī)范。

代碼實現(xiàn)大致如下:


奈何RequireJs如日中天,根本爭不過。

關(guān)于這段的內(nèi)容可以看玉伯的 前端模塊化開發(fā)那點歷史。

· Sea.js 和 CMD

在不斷給 RequireJs 提建議,但不斷不被采納后,玉伯結(jié)合RequireJsmodule/2.0規(guī)范寫出了基于 CMD(Common Module Definition)規(guī)范的Sea.js。

define(factory);


在 CMD 規(guī)范中,一個模塊就是一個文件。模塊只有在被require才會被執(zhí)行。
相比于 AMD 規(guī)范,CMD 更加簡潔,而且也更加易于兼容 
CommonJS 和 Node.js 的 Modules 規(guī)范。

· 總結(jié)

RequireJsSea.js都是利用動態(tài)創(chuàng)建script來異步加載 js 模塊的。

在作者還是前端小白使用這兩個庫的時候就很好奇它是怎么在函數(shù)調(diào)用之前就獲取到其中的依賴的,后來看了源碼后恍然大悟,沒想到就是簡單的函數(shù) toString 方法


通過對factory回調(diào)toString拿到函數(shù)的代碼字符串,然后通過正則匹配獲取require函數(shù)里面的字符串依賴

這也是為什么二者都不允許require更換名稱或者變量賦值,也不允許依賴字符串使用變量,只能使用字符串字面量的原因

規(guī)范之爭在當(dāng)時還是相當(dāng)混亂的,先有CommonJs社區(qū),然后有了 AMD/CMD 規(guī)范和 NodeJs 的 module 規(guī)范,但是當(dāng)那些CommonJs的實現(xiàn)庫逐漸沒落,并隨著NodeJs越來越火,我們口中所說的CommonJs 好像就只有 NodeJs所代表的modules了。


◆  bundle 類的構(gòu)建工具

· Grunt

隨著NodeJs的逐漸流行,基于NodeJs的自動化構(gòu)建工具Grunt誕生

Grunt可以幫我們自動化處理需要反復(fù)重復(fù)的任務(wù),例如壓縮(minification)、編譯、單元測試、linting 等,還有強(qiáng)大的插件生態(tài)。

Grunt采用配置化的思想:

基于 nodejs 的一系列自動化工具的出現(xiàn),也標(biāo)志著前端進(jìn)入了新的時代。

· browserify

browserify致力于在瀏覽器端使用CommonJs,他使用跟 NodeJs 一樣的模塊化語法,然后將所有依賴文件編譯到一個bundle文件,在瀏覽器通過<script>標(biāo)簽使用的,并且支持 npm 庫。


當(dāng)時RequireJs(r.js)雖然也有了 node 端的 api 可以編譯AMD語法輸出到單個文件,但主流的還是使用瀏覽器端的RequireJs。

AMD / RequireJS:


CommonJS:

相比于 AMD 規(guī)范為瀏覽器做出的妥協(xié),在服務(wù)端的預(yù)編譯方面CommonJs的語法更加友好。

常用的搭配就是 browserify + Grunt,使用Gruntbrowserify插件來構(gòu)建模塊化代碼,并對代碼進(jìn)行壓縮轉(zhuǎn)換等處理。

· UMD

現(xiàn)在有了RequireJs,也有了browserify但是這兩個用的是不同的模塊化規(guī)范,所以有了 UMD - 通用模塊規(guī)范,UMD 規(guī)范就是為了兼容AMDCommonJS規(guī)范。就是以下這坨東西:


· Gulp

上面說到Grunt是基于配置的,配置化的上手難度較高,需要了解每個配置的參數(shù),當(dāng)配置復(fù)雜度上升的時候,代碼看起來比較混亂。
gulp 基于代碼配置和對 Node.js 流的應(yīng)用使得構(gòu)建更簡單、更直觀??梢耘渲酶訌?fù)雜的任務(wù)。

以上是一個配置browserify的例子,可以看出來非常簡潔直觀。

· webpack

在說webpack之前,先放一下阮一峰老師的吐槽


webpack1支持CommonJsAMD模塊化系統(tǒng),優(yōu)化依賴關(guān)系,支持分包,支持多種類型 script、image、file、css/less/sass/stylus、mocha/eslint/jshint 的打包,豐富的插件體系。

以上的 3 個庫 Grunt/Gulp/browserify 都是偏向于工具,而 webpack將以上功能都集成到一起,相比于工具它的功能大而全。

webpack的概念更偏向于工程化,但是在當(dāng)時并沒有馬上火起來,因為當(dāng)時的前端開發(fā)并沒有太復(fù)雜,有一些 mvc 框架但都是曇花一現(xiàn),前端的技術(shù)棧在 requireJs/sea.js、grunt/gulp、browserify、webpack 這幾個工具之間抉擇。

webpack真正的火起來是在2015/2016,隨著ES2015ES6)發(fā)布,不止帶來了新語法,也帶來了屬于前端的模塊規(guī)范ES module,vue/react/Angular三大框架打得火熱,webpack2 發(fā)布:支持ES module、babel、typescript,jsx,Angular 2 組件和 vue 組件,webpack搭配react/vue/Angular成為最佳選擇,至此前端開發(fā)離不開webpack,webpack真正成為前端工程化的核心。

webpack的其他功能就不在這里贅述。

· 原理

webpack主要的三個模塊就是,后兩個也是我們經(jīng)常配置的:

  • 核心流程

  • loader

  • plugins

webpack依賴于Tapable做事件分發(fā),內(nèi)部有大量的hooks鉤子,在Compilercompilation 核心流程中通過鉤子分發(fā)事件,在plugins中注冊鉤子,實際代碼全都由不同的內(nèi)置 plugins 來執(zhí)行,而 loader 在中間負(fù)責(zé)轉(zhuǎn)換代碼接受一個源碼處理后返回處理結(jié)果content string -> result string。

因為鉤子太多了,webpack 源碼看起來十分的繞,簡單說一下大致流程:

  1. 通過命令行和 webpack.config.js 來獲取參數(shù)

  2. 創(chuàng)建compiler對象,初始化plugins

  3. 開始編譯階段,addEntry添加入口資源

  4. addModule 創(chuàng)建模塊

  5. runLoaders 執(zhí)行 loader

  6. 依賴收集,js 通過acorn解析為 AST,然后查找依賴,并重復(fù) 4 步

  7. 構(gòu)建完依賴樹后,進(jìn)入生成階段,調(diào)用compilation.seal

  8. 經(jīng)過一系列的optimize優(yōu)化依賴,生成 chunks,寫入文件

webpack的優(yōu)點就不用說了,現(xiàn)在說一下 2 個缺點:

  • 配置復(fù)雜

  • 大型項目構(gòu)建慢

配置復(fù)雜這一塊一直是webpack被吐槽的一點,主要還是過重的插件系統(tǒng),復(fù)雜的插件配置,插件文檔也不清晰,更新過快插件沒跟上或者文檔沒跟上等問題。

比如現(xiàn)在 webpack 已經(jīng)到 5 了網(wǎng)上一搜全都是 webpack3 的文章,往往是新增一個功能,按照文檔配置完后,誒有報錯,網(wǎng)上一頓查,這里拷貝一段,那里拷貝一段,又來幾個報錯,又經(jīng)過一頓搞后終于可以運行。

后來針對這個問題,衍生出了前端腳手架,react出了create-react-app,vue出了vue-cli,腳手架內(nèi)置了webpack開發(fā)中的常用配置,達(dá)到了 0 配置,開發(fā)者無需關(guān)心 webpack 的復(fù)雜配置。

· rollup

2015 年,前端的ES module發(fā)布后,rollup應(yīng)聲而出。

rollup編譯ES6模塊,提出了Tree-shaking,根據(jù)ES module靜態(tài)語法特性,刪除未被實際使用的代碼,支持導(dǎo)出多種規(guī)范語法,并且導(dǎo)出的代碼非常簡潔,如果看過 vue 的dist 目錄代碼就知道導(dǎo)出的 vue 代碼完全不影響閱讀。

rollup的插件系統(tǒng)支持:babelCommonJs、tersertypescript等功能。

相比于browserifyCommonJsrollup專注于ES module。
相比于
webpack大而全的前端工程化,rollup專注于純javascript,大多被用作打包tool工具或library庫。

react、vue 等庫都使用rollup打包項目,并且下面說到的vite也依賴rollup用作生產(chǎn)環(huán)境打包 js。

· Tree-shaking


以上代碼最終打包后 b 的聲明就會被刪除掉。

這依賴ES module的靜態(tài)語法,在編譯階段就可以確定模塊的導(dǎo)入導(dǎo)出有哪些變量。

CommonJs 因為是基于運行時的模塊導(dǎo)入,其導(dǎo)出的是一個整體,并且require(variable)內(nèi)容可以為變量,所以在ast編譯階段沒辦法識別為被使用的依賴。

webpack4中也開始支持tree-shaking,但是因為歷史原因,有太多的基于CommonJS代碼,需要額外的配置。

· parcel

上面提到過webpack的兩個缺點,而parcel的誕生就是為了解決這兩個缺點,parcel 主打極速零配置

打包工具時間
browserify22.98s
webpack20.71s
parcel9.98s
parcel - with cache2.64s

以上是 parcel 官方的一個數(shù)據(jù),基于一個合理大小的應(yīng)用,包含 1726 個模塊,6.5M 未壓縮大小。在一臺有 4 個物理核心 CPU 的 2016 MacBook Pro 上構(gòu)建。

parcel 使用 worker 進(jìn)程去啟用多核編譯,并且使用文件緩存。

parcel 支持 0 配置,內(nèi)置了 html、babel、typescript、less、sass、vue等功能,無需配置,并且不同于webpack只能將 js 文件作為入口,在 parcel 中萬物皆資源,所以 html 文件 css 文件都可以作為入口來打包。

所以不需要webpack的復(fù)雜配置,只需要一個parcel index.html命令就可以直接起一個自帶熱更新的server來開發(fā)vue/react項目。

parcel 也有它的缺點:

  • 0 配置的代價,0 配置是好,但是如果想要配置一些復(fù)雜的配置就很麻煩。

  • 生態(tài),相比于webpack比較小眾,如果遇到錯誤查找解決方案比較麻煩。

· 原理

  1. commander 獲取命令

  2. 啟動 server 服務(wù),啟動 watch監(jiān)聽文件,啟動 WebSocket 服務(wù)用于 hmr,啟動多線程

  3. 如果是第一次啟動,針對入口文件開始編譯

  4. 根據(jù)擴(kuò)展名生成對應(yīng)asset資源,例如jsAsset、cssAsset、vueAsset,如果parcel識別 less 文件后項目內(nèi)如果沒有 less 庫會自動安裝

  5. 讀取緩存,如果有緩存跳到第 7 步

  6. 多線程編譯文件,調(diào)用 asset 內(nèi)方法parse -> ast -> 收集依賴 -> transform(轉(zhuǎn)換代碼) -> generate(生成代碼),在這個過程中收集到依賴,編譯完結(jié)果寫入緩存

  7. 編譯依賴文件,重復(fù)第 4 步開始

  8. createBundleTree 創(chuàng)建依賴樹,替換 hash 等,package打包生成最終代碼

  9. 當(dāng)watch文件發(fā)生變化,重復(fù)第 4 步,并將結(jié)果 7 通過WebSocket發(fā)送到瀏覽器,進(jìn)行熱更新。

一個完整的模塊化打包工具就以上功能和流程。


◆  基于瀏覽器 ES 模塊的構(gòu)建工具

browserify、webpackrollup、parcel這些工具的思想都是遞歸循環(huán)依賴,然后組裝成依賴樹,優(yōu)化完依賴樹后生成代碼。
但是這樣做的缺點就是慢,需要遍歷完所有依賴,即使 
parcel 利用了多核,webpack 也支持多線程,在打包大型項目的時候依然慢可能會用上幾分鐘,存在性能瓶頸。

所以基于瀏覽器原生 ESM 的運行時打包工具出現(xiàn):



僅打包屏幕中用到的資源,而不用打包整個項目,開發(fā)時的體驗相比于 bundle類的工具只能用極速來形容。
(實際生產(chǎn)環(huán)境打包依然會構(gòu)建依賴方式打包)

· snowpack 和 vite

因為 snowpack 和 vite 比較類似,都是bundleless所以一起拿來說,區(qū)別可以看一下 vite 和 snowpack 區(qū)別,這里就不贅述了。

bundleless類運行時打包工具的啟動速度是毫秒級的,因為不需要打包任何內(nèi)容,只需要起兩個server,一個用于頁面加載,另一個用于HMRWebSocket,當(dāng)瀏覽器發(fā)出原生的ES module請求,server收到請求只需編譯當(dāng)前文件后返回給瀏覽器不需要管依賴。

bundleless工具在生產(chǎn)環(huán)境打包的時候依然bundle構(gòu)建所以依賴視圖的方式,vite 是利用 rollup 打包生產(chǎn)環(huán)境的 js 的。

原理拿 vite 舉例:

vite在啟動服務(wù)器后,會預(yù)先以所有 html 為入口,使用 esbuild 編譯一遍,把所有的 node_modules 下的依賴編譯并緩存起來,例如vue緩存為單個文件。

當(dāng)打開在瀏覽器中輸入鏈接,渲染index.html文件的時候,利用瀏覽器自帶的ES module來請求文件。


vite 收到一個src/main.js的 http 文件請求,使用esbuild開始編譯main.js,這里不進(jìn)行main.js里面的依賴編譯。

瀏覽器獲取到并編譯main.js后,再次發(fā)出 2 個請求,一個是 vue 的請求,因為前面已經(jīng)說了 vue 被預(yù)先緩存下來,直接返回緩存給瀏覽器,另一個是App.vue文件,這個需要@vitejs/plugin-vue來編譯,編譯完成后返回結(jié)果給瀏覽器(@vitejs/plugin-vue會在腳手架創(chuàng)建模板的時候自動配置)。

因為是基于瀏覽器的ES module,所以編譯過程中需要把一些 CommonJs、UMD 的模塊都轉(zhuǎn)成 ESM

Vite 同時利用 HTTP 頭來加速整個頁面的重新加載(再次讓瀏覽器為我們做更多事情):源碼模塊的請求會根據(jù) 304 Not Modified 進(jìn)行協(xié)商緩存,而依賴模塊請求則會通過 Cache-Control: max-age=31536000,immutable 進(jìn)行強(qiáng)緩存,因此一旦被緩存它們將不需要再次請求,即使緩存失效只要服務(wù)沒有被殺死,編譯結(jié)果依然保存在程序內(nèi)存中也會很快返回。

上面多次提到了esbuild,esbuild使用 go 語言編寫,所以在 i/o 和運算運行速度上比解釋性語言 NodeJs 快得多,esbuild 號稱速度是 node 寫的其他工具的 10~100 倍。

ES module 依賴運行時編譯的概念 + esbuild + 緩存 讓 vite 的速度遠(yuǎn)遠(yuǎn)甩開其他構(gòu)建工具。

· 總結(jié)

簡單的匯總:

  • 前端運行時模塊化

    • RequireJs AMD 規(guī)范

    • sea.js CMD 規(guī)范

  • 自動化工具

    • Grunt 基于配置

    • Gulp 基于代碼和文件流

  • 模塊化

    • browserify 基于CommonJs規(guī)范只負(fù)責(zé)模塊化

    • rollup 基于ES module,tree shaking優(yōu)化代碼,支持多種規(guī)范導(dǎo)出,可通過插件集成壓縮、編譯、commonjs 語法 等功能

  • 工程化

    • webpack 大而全的模塊化構(gòu)建工具

    • parcel 極速 0 配置的模塊化構(gòu)建工具

    • snowpack/vite ESM運行時模塊化構(gòu)建工具

這 10 年,前端的構(gòu)建工具隨著 nodejs 的逐漸成熟衍生出一系列的工具,除了文中列舉的還有一些其他的工具,或者基于這些工具二次封裝,在nodejs出現(xiàn)之前前端也不是沒有構(gòu)建工具雖然很少,只能說nodejs的出現(xiàn)讓更多人可以參與進(jìn)來,尤其是前端可以使用本身熟悉的語言參與到開發(fā)工具使用工具中,npm 上至今已經(jīng)有 17 萬個包,周下載量 300 億。

在這個過程中也有些模塊化歷史遺留問題,我們現(xiàn)在還在使用著 UMD 規(guī)范庫來兼容這 AMD 規(guī)范,npm 的包大都是基于CommonJs,不得不兼容ESMCommonJs。

webpack統(tǒng)治前端已經(jīng) 5 年,人們提到開發(fā)項目只會想到 webpack,而下一個 5 年會由誰來替代?snowpack/vite嗎,當(dāng)打包速度達(dá)到 0 秒后,未來有沒有可能出現(xiàn)新一代的構(gòu)建工具?下一個 10 年前端又會有什么變化?

瀏覽 52
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 青青草超碰在线| 51毛片| 人人草人人舔| 久久国产精| 99re视频在线观看| 性无码一区二区三区无码免费| 欧美熟妇BBB搡BBB| 欧美日韩色视频| 午夜成人三级| 久久久91| 日韩另类视频| 国产AV无码高清| 99国产一区| 亚洲一级二级片| 天天操夜夜操| 一区二区三区电影高清电影免费观看| 中文字幕乱码中文字幕电视剧| 北条麻妃三区| 午夜福利AV电影| 免费中文字幕视频| 人妻少妇视频| 国产精品久久久久久久久久久免费看| 日批视频在线观看| 青青草成人在线观看| 久久久久久久久久久久国产精品| 偷拍九九热| 国产黄色免费看| 午夜免费视频1000| 91抽插| 美女网站黄色| 91乱了伦国产乱子伦| av在线资源网站| 精品无码一区二区三区爱与| 婷婷无码视频| 另类老太婆性BBWBBw| 停停六综合| 在线h网站| 国产一区亚洲| 中文字幕高清免费看| 中文字幕+乱码+中文乱码91| 99热在线看| 亚洲天码中字| 欧美三级一级| 亚洲黄色视频免费观看| 在线不卡无码| 黄色插逼视频| 蜜桃一区二区中午字幕| 青青草超碰| 大荫蒂HD大荫蒂视频| 深爱五月激情网| 精品视频网| 免费在线观看一区| 激情五月天av| 人人澡人人妻人人爽| 欧美性猛交一区二区三区| 五月天婷婷丁香| 日韩在线视频网站| 天天干中文字幕| 91人妻综合| 精品码产区一区二亚洲国产| A级免费视频| 特黄特色一级特黄大片| 日产久久久久久| 国产欧美在线综合| 操逼视频在线观看| 成人AV无码| jiujiuav| 中文字幕亚洲区| 超碰在线观看99| 日韩精品在线免费| 人成无码| 日韩一级免费在线观看| 国产精品1区2区3区| 97人人爽人人爽人人爽| 一本色道久久综合狠狠躁| 午夜无码鲁丝片午夜精品一区二区 | 91官网在线观看| 国产欧美综合一区| 无码人妻丰满熟妇区毛片蜜桃麻豆 | 欧美mv日韩mv国产| 亚洲秘无码一区二区三区电影 | 国产g蝌蚪| 欧美视频免费操逼图。| 91国黄色毛片在线观看| 豆花视频在线| 在线免费看黄片| 福利视频网站| 强伦轩人妻一区二区电影| 国产黄色三级| 翔田AV无码秘三区| 日韩小电影免费观看高清完整版在线观 | 亚洲免费视频在线观看| 台湾无码| 高清无码网站| 丁香五月天婷婷| 插逼网站| 中文字幕三区| 四川BBBB擦BBBB| 大香蕉手机视频| 97在线超碰| 国产高清一区二区| 一级黄色电影免费看| 操天天操| av资源免费观看| 成人无码区免费A片久久| 午夜男人天堂| 中文无码日本一级A片人| 丁香社区五月天| 在线观看免费黄色| 激情综合久久| 日韩黄色片网站| 成人久久久久一级大黄毛片中国| 欧美1区2区| 成人电影久久久| 一起草在线视频| 久久久91精品国产一区苍井空| 久久婷婷网| 久久av片| 国产综合久久久7777777| 欧美一级在线视频| 国产精品久久精品| 五月激情综合| 久热精品视频在线观看| 欧美色道| 大香蕉在线观看视频| 18禁网址| 操一炮在线视频| 翔田千里无码流出两部| 色色色999| 色狠狠AV| 国产女人水真多18毛片18精品| 色婷婷AV在线| 最近中文字幕无码| 日韩无码av电影| 影音先锋久久久| 日本高清视频免费观看| 99热在线观看免费| 欧洲成人免费视频| 激情AV在线| 污视频在线免费观看| 日本操B| 亚洲天天干| 成人AV在线电影| 亚洲影视中文字幕| 97人妻一区二区精品免费视频| 亚洲无码理论片| 成人精品一区二区无码| 亚洲国产成人一区二区| 四虎影院在线| 成人性爱免费视频| 无码视频在线观看免费| 不卡在线视频| 99热| 色色视频免费看| 亚洲av综合在线| 先锋AV资源网| 嗯嗯啊啊网站| 黄色视频在线观看免费网站| 99热热久久| 欧美视频二区| 日韩超碰| 美女做爱在线观看| 好爽~要尿了~要喷了~同桌 | 国产成人秘免费观看一区二区三区| 尤物视频在线播放| 美日韩一区二区| 最好看2019中文在线播放电影 | 午夜福利大香蕉| 强伦轩一区二区三区四区| 97人人草| 日韩一区二区三区在线观看| 国产一级a毛一级a做免费的视频l| 日本色情视频网站| 国产成人片在线观看| 大黑人荫蒂BBBBBBBBB| 中文字幕人妻在线中文乱码怎么解决| 91黄色在线视频| 操逼动漫| 色综合一区二区三区| 免费在线观看黄片视频| 亚洲av二区| 久久久一区二区三区四曲免费听| 欧美第1页| 久久亚洲综合| 无码人妻一区二区三区在线视频不卡 | 欧美综合网在线观看| 69毛片| 日韩激情在线| 最新一区二区三区| 人人操AV| 国产精品一区二区毛片A片婊下载 99久久99九九99九九九 | 成人性爱AV| 91免费福利视频| 亚洲精品鲁一鲁一区二区三区| H片在线观看| 免费a视频在线观看| 男女乱伦视频| 中文字幕在线观看二区| 黄色免费福利视频| 先锋影音一区二区三区| 91国产爽黄在线相亲| 国产成人视频免费观看| 在线观看视频免费无码免费视频| 91x色| 国产91在线拍揄自揄拍无码九色| 国产黄色视频观看| 91亚洲精品久久久久蜜桃| 天天爽天天操| 都市激情亚洲| 97在线观看免费| 国产av不卡| 毛片网站免费| 天天艹天天干| 黄色一级片免费| 影音先锋三区| 三级日韩视频| 成人免费A片视频| 欧美精品无码久久久精品酒店| 久操视频一区二区三区| 麻豆一区二区三区| 精品操逼| 免费无码成人片在线观看在线| 国产女人18毛片水真多18精品| 狠狠干狠狠色| 伊人福利导航| 久操无码| 欧美女人操逼| 免费无码婬片AAAA片直播| 久久五月丁香| 九九九免费| 国产无码中文| 欧美亚洲日韩成人| 色射网| 国产99久久九九精品无码免费| 骚逼黄片| 69国产在线| 成人午夜福利视频| 日韩成人观看| 婷婷五月天色色| 精品一区二区三区视频| 激情综合久久| 欧美A黄| 国产精品1区2区| 伊人狠狠蜜桃亚洲综合| 一级片久久| 大香蕉伊人在线网| 亚洲视频中文字幕在线观看| 干干日日| 91无码精品国产| 中文字幕无码Av在线看| 特级西西444www高清| 欧美后门菊门交| 久久性爱网站| 99精品视频免费观看| 三级网站在线| 亚洲欧洲有码在线| 欧美性久久久久| 老太奶性BBwBBw侧所| 精品中文一区二区三区| 天天插综合| 在线欧美日| AV黄色网| 无码AV网| 久福利| 久久福利电影| 国产内射久久| 一级黄色录相片| 一级黄色影片| 波多野结衣福利视频| 国产av小电影| av大片在线观看| 日韩AV在线免费观看| 人人妻人人爽人人澡人人精品| 免费观看黄色片| 毛片在线免费| 亚洲中文免费视频| 免费AV大全| 日韩黄色电影网站| 国产无套在线观看| 艹B视频| 波多野结衣一区二区| 444444免费高清在线观看电视剧的注意 | eeuss久久| 91视频高清无码| 2018人人操| 黄色片网站在线观看| 毛片69| 午夜天堂在线| 成人av中文字幕| 9118禁| 女同三区| 成人毛片在线大全免费| 亚洲无码乱码精品| 天堂av在线免费观看| 久久精品视频网站| 国产在线无码视频| 99人妻视频| 欧美日韩午夜福利视频| 国产精品啪啪啪| 草久热| 狠狠狠狠狠狠狠狠狠| 老婆中文字幕乱码中文乱码 | 日本黄色影视| 性爱AV网| 亚洲AV一二三区| 特级西西444www精品视频| 无码人妻精品一区二区三千菊电影| 成人在线视频网| www.大吊视频| 国产人人爽| 国产无码AV成在线| 影音先锋色先锋| V天堂在线| 高清无码在线免费观看| 亚州AV在线| 久久一二三| 嫰BBB槡BBBB槡BBBB| 青青草精品视频| 国产欧美日韩| 亚洲欧美在线一区| 日日99| 国产91网| 国产黄片在线免费观看| 亚洲国产精品久久久久婷婷老年 | 日屄视频免费看| 久久国产精品电影| 欧美亚洲综合在线| 国产精品片| 蜜桃一区二区中午字幕| 五月天黄色电影网站| 丁香五月婷婷中文字幕| 日韩在线成人| 亚洲无码偷拍| 国产精品一| 国产毛片基地| 免费观看日韩无码视频| 热久久免费| 在线观看免费完整版中文字幕视频 | 国产老女人操逼视频| 欧美久久久久久| 欧美性爱小说| 高清毛片AAAAAAAAA郊外| 日韩av在线电影| www.99| 人妻体内射精| 拍真实国产伦偷精品| 国产视频福利| 7x7x7x人成免费观学生视频| 日本超碰在线| 午夜福利av在线| 欧美日韩国产性爱| 三级AV在线观看| 日本高清无码视频| 二区三区不卡| 悠悠色导航| 亚洲欧美日韩电影| 欧美性爱XXXX| 无码人妻精品一区二区三区蜜桃91 | 黄色视频免费观看国产| 青青操逼视频| 超碰午夜| 超碰啪啪| 黄色成年人视频在线观看| 国产a片免费看| 东方美美高清无码一区| 人妻精品一二三| 欧美污视频在线观看| 国产精品A片守望| 北条麻妃A片在线播放| 99国产精品免费视频观看8| 亚洲日韩欧美国产| 青草无码视频| 安微妇搡BBBB搡BBBB日| 黄色国产av| 黄色视频大全免费看| 欧美综合在线观看| 91视频首页| 欧美自拍偷拍| 99色在线视频| 黄色激情av| 狠狠干狠狠艹| 九九热精品视频在线播放| 中文字幕成人av| 无码窝在线观看| www.18禁| 无码任你操| 操逼电影| 成人在线18| 丁香五月激情视频| 91.xxxx| 大香蕉操逼视频| 97人妻一区二区精品视频| 中文字幕亚洲视频| 日韩国产| 木下凛凛子AV888AV在线观看 | 久久亚洲婷婷| 欧美大屌网站| 91无码人妻传媒tv| 91伊人| 91久久久精品| 日韩一级免费毛片| 国产91在线一区| 伊人大香蕉视频| 亚洲午夜在线| 日日騒av无码| 国产性爱AV| 99热这里只有精品7| 国产人妻一区二区三区欧美毛片| 8x8x黄色| 国产黄色片在线免费观看| 精产国品一区二区区别| 9热在线视频| 青青娱乐亚洲无| 91中文字幕网| 午夜成人福利| 偷拍精品视频| 欧美性爱XXXX| 天堂中文资源在线| 人人看人人插| 国产成人在线视频| 五月天成人网址| 久久思热国产| 影音先锋天堂| 中文字幕在线免费观看电影| 亚洲欧美性爱视频| 国产福利电影在线| 综合+++夜夜| 久久永久视频| 久久久久亚洲AV无码成人片| 天a堂8在线www| 九九色网| 夜夜夜夜撸| 97在线观看视频| 自拍做爱视频| 国产精品v欧美精品v日韩精品| 女毛片| V在线| 亚洲色婷婷在线| 99热大香蕉| 大香蕉精品在线视频| 99久久亚洲精品日本无码| 日韩中文视频| A在线| 国产一级生活片| 中文字幕操逼网站| 婷婷伊人大香蕉| 国产一区二区三区免费观看| 性做久久久久久久久| 色图15p| 中文字幕观看| 91丨PORNY丨丰满人妻网站| 99久久人妻无码中文字幕系列| 99视频网站| 日韩成人小说| av无码免费在线观看| 中文字幕综合网| 午夜精品视频在线观看| 夜夜嗨av一区二区三区| 欧美中文字幕在线| 国产在线拍揄自揄拍无码男男 | 免费日韩AV| 五月丁香综合网| A片黄色电影网站| 高清毛片AAAAAAAAA郊外| 波多野结衣高清无码| 成人h视频| 亚洲丝袜av| 永久免费看A人片无码精| 在线视频一区二区三区| 欧一美一婬一伦一区二区三区自慰, | 五月天丁香婷婷视频| 一区二区三区不卡视频| 成人精品水蜜桃| 国产小视频在线免费观看| 国产91探花系列在线观看| 午夜操逼视频| 日皮视频在线免费观看| 免费视频久久久| 狠狠综合| 亚洲成人电影无码| 超碰天天干天天摸| 国产黄色在线播放| av影片在线播放| 亚洲欧美高清视频| 精品三区| 午夜成人鲁丝片午夜精品| 日韩無码专区| 草久精品| 免费看无码一级A片在线播放| 日本电影一区二区| 精品交换一区二区三区无码| 国产黄色性爱视频| 国产精品秘国产精品88| 99re6热在线精品视频功能| 黄片免费看| 精品无码人妻一区二区| 國產精品777777777| 六月天av| 五月丁香六月| 亚洲精品无码久久久| 俺来射| 亚洲精品aaa| 中文字幕日韩无码电影| 911亚洲精品| 在线无码一区二区三区| 蜜桃视频日韩| 日本性爱网址| 欧洲黑种人日P视频| 日韩极品视频| 国产夫妻自拍AV| 欧美国产在线观看| 精品乱子伦一区二区三区毛| 特级西西444www大胆免费看| 操逼电影| 99在线看| 国产免费性爱| 大香蕉中文在线| AV无码免费一区二区三区不卡| 欧洲无码精品| 伊人久久大综合中文无码| 国产传媒三级| 91麻豆精品国产91久久久吃药| jt33免费观看高清| 国产免费网址| 国产熟妇码视频黑料| 五月婷丁香| 青娱乐成人在线| AV黄色网| 伊人网在线免费视频| 亚洲性爱影院| av无码精品一区| 东北骚妇大战黑人视频| 无码任你躁久久久久| 探花av| 91人人妻人人澡人人爽| 亚洲激情在线观看| 2024国产精品| 无码毛片在线观看| 久久亚洲日韩天天做日日做综合亚洲 | 天天干天天摸| 欧美日韩国产一区二区三区| 欧美色色色色色| 66久久| 4438黄色| 宅男噜| 中国一级黄色A片| 黃色一级一片免费播放| 超碰人人操人人| 操碰视频在线| 色欲久久久| 国产激情欧洲在线观看一区二区三区| 国产精品国产成人国产三级| 超碰人人91| 九九九九九九精品| 色情综合| 日韩va亚洲va欧美va高清| 久久精品免费| 国产熟女乱伦视频| 亚洲精品成人av无码| 中文字幕在线播放视频| 亚洲色图第一页| 蜜桃视频成人版网站| 久久视频理论| 国产尤物视频| 成人黄网站免费视频| 超碰在线观看免费版| 日本三级片免费| 国产欧美精品成人在线观看| 99久久99| 国产丨熟女丨国产熟女视频| 蜜芽成人在线| 国产精品高潮无套内谢| 精品视频在线观看免费| 精品伊人久久| www.青草视频| 天天插综合| 国产女人免费| 少妇人妻偷人精品无码视频新浪| 无码中文字幕在线观看| 国产精品扒开腿做爽爽爽A片唱戏| 草莓视频在线播放| 国产综合婷婷| 操操色| 日本乱伦网站| 九九九九九精品| 亚洲一二三四区| 日韩三级视频在线观看| 日本色情网| 中文字幕视频一区日日骚| 日韩性爱视频| 超碰超碰| 日本成人黄色电影| 无码一区二区高清| 亚洲国产中文字幕在线播放| 亚洲vs无码蜜桃少妇| 国产亚洲欧美一区二区| 日韩三级电影| 500部大龄熟乱4K视频| 在线激情| 尹人成人| 色综合天天综合| 无码黄漫| 永久精品| 欧美久操| 一级a一级a免费观看免免黄‘/| 欧美A∨| 日日干天天操| 97人妻人人澡人人爽人人精品| 国产精品人妻AⅤ在线看| 你懂的网址在线观看| 国产丝袜无码| 豆花天天吃最新视频| 无码在线高清| 五月婷婷六月婷婷| 竹菊传媒一区二区三区| 蜜桃视频无码区在线观看| 精品人妻在线| 天堂网资源| 国产亚洲欧美日韩高清| 亚洲天堂美女| 一级a一级a爰片免费免免在线| 怡春院日韩| 久久er视频| 免费无码A片在线观看全| 久久任你操| 九九草影院| 日皮做爱视频网站| 色操人| 8050午夜| 亚洲无码电影在线观看| 男女爱爱动态图| 超碰99在线| 欧美一区二区在线观看| 91无码人妻传媒tv| V在线| 国产丝袜人妖TS系列| 亚洲精品成人一二三区| 欧美成人看片黄a免费看| a级片在线观看| 91国在线| 91看片看婬黄大片Videos | 大鸡巴免费视频| 日韩不卡AV| 91成人视频在线免费观看| 精品亚洲一区二区三区四区五区 | 国产综合av| 欧美三级大片| 国产一级a免一级a免费| 97午夜福利视频| 亚洲无码中文视频| 欧美成在线视频| 亚洲www视频| 亚洲色操| 美女视频毛片| 狠狠躁日日躁夜夜躁A片小说免费| 一级特黄录像免费播放下载软件| 亚洲欧美卡通| 国产香蕉精品视频| 九色PORN视频成人蝌蚪自拍 | 日韩无码视频播放| 国产无码自拍偷拍| 大香蕉伊人综合在线| 久久九九电影| 亚洲免费a| 欧美性爱导航| 亚洲成色A片77777在线小说| 黄色电影中文字幕| 黄色A片一级| 色天堂网站| 国产Av一区二区三区| 91黄色电影| 久久精品免费观看| 九色在线视频| 丁香五月天婷婷| 无码东京热国产| 黄色视频在线免费观| 岛国精品在线播放| 亚洲小视频在线观看| 人人妻人人草| 露脸丨91丨九色露脸| 一区二区三区AV| 中文字幕日韩精品人妻| 天天操天天操免费视频| 最近中文字幕2022在线观看A| 国产熟女一区二区视频网站| 久久久www| 天天日夜夜撸| 狠狠操夜夜操| 日本久久久久| 好吊妞在线观看| 超碰成人在线免费观看| 国产亚洲色婷婷久久99精品| 91在线观看免费视频| 人妻体内射精| 99精品视频免费在线观看| 狠狠干狠狠艹| 少妇bbb搡bbbb搡bbbb| 国产av不卡| 亚洲色图一区二区三区| 人人操人人摸人人| 91精品人妻一区二区三区蜜桃| 国产综合自拍| 九九中文字幕| 青青免费视频| 国精自拍| 激情午夜av| 综合天天| 国产一级A片久久久免费看快餐| 果冻传媒一区二区三区| 久色| 久久午夜无码鲁丝片午夜精品偷窥 | 国产一级婬片A片免费妖精视频| 天天摸天天摸| 日韩不卡中文字幕| 国产乱子伦一区二区三区免看| 欧美日韩不卡视频| 熟女视频91| 人人操在线观看| 看毛片的网站| 视频一视频二在线视频| 天堂无码视频在线播放| 亚洲色婷婷在线| 手机看片福利视频| 欧美成人福利视频| 免费在线观看黄色网址| 成人无码精品亚洲| 亚洲欧美成人网站| 亚洲国产精品成人久久蜜臀| 国产—a毛—a毛A免费| 午夜国产在线观看| 天天干天天插| 中国免费看片| 乱伦一级黄片| 日韩AV自拍| BBB搡BBB搡BBB搡BBB| 探花视频在线观看| 亚洲人在线| 亚洲AV成人无码| 日韩TV| 少妇搡BBBB搡BBB搡打电话| 亚洲一级片| 欧美黄片免费视频| 亚洲天堂电影网| 九一亚洲精品| 日韩啪啪网站| 免费AV大全| 伊人大香蕉网| 人人爽网站| 成人精品秘久久久按摩下载| 2021天天操| 国产灬性灬淫灬欲水灬| 91av在线看| 婷婷开心色四房播播在线| xxxx亚洲| 久久国产亚洲| 刘玥无码| 午夜福利毛片| 不迷路福利视频| 亚洲欧洲视频在线观看| 91视频网站免费观看| 国产亚洲久一区二区三区| 青青操逼视频| 成人免费黄片| 国产精品一品二区三区的使用体验 | henhengan| 无码免费毛片一区二区三区古代| 国产黄片免费在线观看| 成人黄片网站| 婷婷综合缴情亚洲另类在线| 99天天视频| 草逼动态图| 91网址| 天堂一区二区| 中字无码av| 激情淫荡少妇| 国产99久久久精品| 极品少妇久久久| 一道本一区二区三区| 成人无码区免费AV片| 人人摸人人摸| 蝌蚪窝免费在线视频| 国产高清a| 青青国产在线| 无码视频免费看| 日韩操逼| 国产又粗又大又黄视频| 亚洲欧美久久久| 精品国产污污免费网站入口| a视频在线免费观看| 青操av| 丝瓜污视频| 嫩BX区二区三区的区别| 伊人久久免费视频| 在线精品福利| 一本道高清无码视频| 亚洲午夜久久久之蝌蚪窝| 欧美一区二区三区系列电影| 翔田千里无码播放| av水果派| 黄色特级aaa片| 天天做天天日| 青娱乐在线视频精品| 亚洲V视频| 国产人国产视频成人免费观看…| 香蕉中文在线| 亚洲av无码乱码| 成人黄片免费看| 日韩黄色A级片| 人妻夜夜爽天天爽| 中文无码一区二区三区| 久久久精品人妻| 欧美成人五月天| 久久精品久久久久久久| 七十路の高齢熟妇无码| 偷偷操穴| 俺来也俺去www色情网| 国产日韩一区二区| 操逼视频在线免费观看| 国产精品福利视频| 手机免费Av| 一区二区三区水蜜桃| 中文字幕不卡视频| 国产乱子伦日B视频| 精品吃奶一区二区三区视频 | 中文字幕AV一区| 亚洲xxxxx| 欧美成人伦理片网| 婷婷五月综合激情| 美女免费网站| 午夜福利视频网| 午夜九九| 亚洲婷婷丁香| 操逼逼片| 久久区| 中文字幕成人| 先锋资源日韩| 精品无码久久久| 国产精品久久久久永久免费看| 蜜桃视频网站在线观看| 国产精品无码激情| 无码人妻精品一区二区三千菊电影| 豆花视频在线观看| 黑人精品XXX一区一二区| 日韩精品久久久| 日韩精品人妻一区二区| 操逼网站在线| 内射老熟女| 中文字幕无码Av在线看| 精品中文字幕在线播放| 亚洲无| 超碰97久久| 激情导航| 中文字幕在线成人| 日本综合在线| 加勒比DVD手机在线播放观看视频 日韩精品一区二区三区四区蜜桃视频 | 特黄特色免费大片| 艹逼91| 99超碰在线观看| 99热精品免费在线观看| 欧美性猛交ⅩXXX乱大交| 免费无人区一码二码乱码怎么办| 中文字幕乱码亚洲中文在线| 在线观看欧美黄片| 国产精品主播| 欧美成人在线观看| 在线观看操逼| 欧美亚洲日韩中文字幕| 乱码中文字幕日韩欧美在线| 欧美亚洲国产一区二区三区| AV天堂无码| 日韩国产欧美精品一区| 天天草天天草| 网址你懂得| 激情AV在线观看| 国产夫妻AV| 四虎一区二区| 午夜亚洲福利视频| 爱搞逼综合| 亚洲第一国产黄AV动漫软件| 欧美成人精品A片免费一区99| 欧亚AV| 中日韩欧美一级A片免费| 欧美十区| 肏屄视频免费| 黄色操逼视频| 日韩成人AV毛片| 91在线一区二区| 国产不卡网| 色婷婷在线综合| 日韩人妻无码一区二区| 福利大香蕉| 日本国产在线| 国产AV大全| 欧美18成人| 亚洲xxxxx| 女人高潮天天躁夜夜躁| 午夜资源网| 五月天成人社区| 一起操影院| 怡红院一区|