精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

快速學習Gulp并接入到項目中

開發 開發工具
gulp是一個自動化構建工具,主要用來設定程序自動處理靜態資源的工作。簡單的說,gulp就是用來打包項目的。

[[416090]]

一、gulp定位

gulp是基于流(stream)的自動化構建工具。

二、初始化

如果之前已經全局安裝了 gulp ,請通過運行以下命令來刪除舊安裝:

  1. npm rm --global gulp 

然后通過以下命令安裝獨立的gulp-cli

  1. npm i --global gulp-cli 

為什么廢棄gulp,而改用gulp-cli?

想將cli和gulp進行解耦,處理只位于gulp-cli中。目的:

  • 主要是想在減少安全安裝包的大小。
  • 與主包gulp分開,在不影響gulp-cli流程的情況下進行gulp的功能和bug修復
  • 為后續的sips主題,以及向任務中添加自定義元數據和配置文件。

看一下安裝的版本2.x

  1. gulp -v 
  2. CLI version: 2.3.0 
  3. Local version: Unknown 

三、項目中使用gulp

進入到項目中,安裝gulp

  1. npm i --save-dev gulp 

執行gulp -v

  1. chengxinsong$ gulp -v 
  2. CLI version: 2.3.0 
  3. Local version: 4.0.2 

在項目的根目錄下創建gulpfile.js文件,在文件中輸入以下內容:

  1. function defaultTask(cb) { 
  2.   cb(); 
  3. exports.default = defaultTask; 

四、gulp基本轉化流程

  1. 找到src目錄下的所有js文件
  2. 壓縮這些js文件
  3. 將壓縮js代碼輸出到dist/js目錄下
  1. const gulp = require('gulp'); 
  2. const uglify = require('gulp-uglify'); 
  3. gulp.task('gulpSaucxs'function(done) { 
  4.   gulp.src('src/*.js')   // dist與src在共同目錄下 
  5.   .pipe(uglify()) 
  6.   .pipe(gulp.dest('dist/js'));   // 相對路徑 
  7.   done(); 
  8. }) 

上面代碼中,task方法接收的是任務代碼,接收的必須有回調函數,gulp.src()方法去找src目錄下的js文件,.pipe是接收一個流的結果,并返回一個處理后流的結構,pipe方法中執行uglifg()方法用來壓縮js代碼。gulp.dest()方法輸出到指定相對目錄下。done()方法就是回調函數執行。

  • gulp.task('任務名', 回調函數),任務名也是后續gulp 任務名,執行這個任務,回調函數中處理這個任務需要處理的代碼。
  • src() 方法讀取文件生成一個Node流(stream),它將所有匹配的文件讀取到內存中并通過流(stream)進行處理。
  • Node流(stream)所提供的主要API方法pipe()方法。
  • dest()方法接收一個輸出目錄作為參數,將文件內容以及文件屬性寫入到指定的目錄中。

我們在src下新建一個index.js文件,我們來寫最長遞增子序列的方法。

  1. // 最長遞增子序列 
  2. function lis(n) { 
  3.   if (n.length === 0) return 0 
  4.   // 創建一個和參數相同大小的數組,并填充值為 1 
  5.   let array = new Array(n.length).fill(1) 
  6.   // 從索引 1 開始遍歷,因為數組已經所有都填充為 1 了 
  7.   for (let i = 1; i < n.length; i++) { 
  8.     for (let j = 0; j < i; j++) { 
  9.       if (n[i] > n[j]) { 
  10.         array[i] = Math.max(array[i], 1 + array[j]) 
  11.       } 
  12.     } 
  13.   } 
  14.   let res = 1 
  15.   for (let i = 0; i < array.length; i++) { 
  16.     res = Math.max(res, array[i]) 
  17.   } 
  18.   return res 

輸出的已經通過gulp處理的index.js的方法

我們在與gulpfile.js的同級目錄下執行gulp task的名稱

  1. gulp gulpSaucxs 

gulp后面跟著的是任務的名稱,不輸入任務名稱的話會默認找default任務,找不到會報錯

然后在與src同級新增dist/js,然后生成壓縮之后index.js文件。

五、逐漸廢棄gulp.task()

官網說是這個task的API不再是推薦的模式。

那還是簡單提2句,這個api伴隨著開發而消失。

  1. gulp.task(name[, deps], fn)  
  • name 為任務名
  • deps 是當前定義的任務需要依賴的其他任務,為一個數組。當前定義的任務會在所有依賴的任務執行完畢后才開始執行。如果沒有依賴,則可省略這個參數
  • fn 為任務函數,我們把任務要執行的代碼都寫在里面。該參數也是可選的。

六、task任務

每個gulp任務task都是一個異步的js函數。接收一個回調函數作為參數,或者是一個返回 stream,promise,event emitter、child process 或 observable 類型值的函數。

我們繼續改寫上面 gulpSaucxs 的任務。

  1. const gulp = require('gulp'); 
  2. const uglify = require('gulp-uglify'); 
  3. function gulpSaucxs(done) { 
  4.   gulp.src('src/*.js')   // dist與src在共同目錄下 
  5.   .pipe(uglify()) 
  6.   .pipe(gulp.dest('dist/js'));   // 相對路徑 
  7.   done(); 
  8. exports.gulpSaucxs = gulpSaucxs;   // gulpSaucxs函數被exports導出是公開任務,可以直接被gulp命令直接調用。 

導出的 gulpSaucxs 我們可以直接使用gulp命令來執行。

  1. gulp gulpSaucxs 

輸出跟最初是一致的。

導出任務

被gulpfile導出export的任務為公開任務,未被導出的任務會被認為是私有任務。

還是在剛才的代碼中,我們新增privateTask方法和導出組合任務。

  1. const gulp = require('gulp'); 
  2. const uglify = require('gulp-uglify'); 
  3. function gulpSaucxs(done) { 
  4.   gulp.src('src/*.js')   // dist與src在共同目錄下 
  5.   .pipe(uglify()) 
  6.   .pipe(gulp.dest('dist/js'));   // 相對路徑 
  7.   done(); 
  8. // 新增的私有任務 
  9. function privateTask(done) { 
  10.   console.log('hello 「松寶寫代碼」'
  11. exports.gulpSaucxs = gulpSaucxs;   // gulpSaucxs函數被exports導出是公開任務,可以直接被gulp命令直接調用。 
  12. exports.composeTask = gulp.series(gulpSaucxs, privateTask);  // 導出組合任務 

上面的代碼中,privateTask 方法就是沒有被直接導出的方法,稱為私有任務;gulpSaucxs 方法是被導出的方法,稱為公共任務。

私有任務的設計主要是為了內部的使用,通常作為gulp.series()和gulp.paralle()組合的組成部分。

這時候我們執行

  1. gulp composeTask 

執行結果

  1. gulp-test chengxinsong$ gulp composeTask 
  2. [16:14:52] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [16:14:52] Starting 'composeTask'... 
  4. [16:14:52] Starting 'gulpSaucxs'... 
  5. [16:14:52] Finished 'gulpSaucxs' after 8.32 ms 
  6. [16:14:52] Starting 'privateTask'... 
  7. hello 「松寶寫代碼」 
  8. [16:14:52] Finished 'privateTask' after 1.21 ms 
  9. [16:14:52] Finished 'composeTask' after 12 ms 

我們看日志,series方法是按照順序執行,同步執行。

  • 先啟動公共任務 composeTask,
  • 開啟 gulpSaucxs 任務方法
  • 完成 gulpSaucxs 任務方法
  • 然后8.32毫秒之后
  • 開啟 privateTask 任務方法
  • 輸出 hello 「松寶寫代碼」
  • 完成 privateTask 任務方法
  • 然后1.21毫秒之后
  • 完成 公共任務 composeTask,

組合任務

gulp提供了2個強大的組合方法:series() 和 parallel(),允許將多個獨立的任務組合為一個更強大的操作。

特點:

  • 都可以接受任意數目的任務Task函數或者已經組合的操作
  • series()方法和parallel()方法 可以相互嵌套任意深度

我們把上面的例子的series方法換成parallel。

  1. const gulp = require('gulp'); 
  2. const uglify = require('gulp-uglify'); 
  3. function gulpSaucxs(done) { 
  4.   gulp.src('src/*.js')   // dist與src在共同目錄下 
  5.   .pipe(uglify()) 
  6.   .pipe(gulp.dest('dist/js'));   // 相對路徑 
  7.   done(); 
  8. // 新增的私有任務 
  9. function privateTask(done) { 
  10.   console.log('hello 「松寶寫代碼」'); 
  11.   done(); 
  12. exports.gulpSaucxs = gulpSaucxs;   // gulpSaucxs函數被exports導出是公開任務,可以直接被gulp命令直接調用。 
  13. exports.composeTask = gulp.parallel(gulpSaucxs, privateTask);  // 導出組合任務,以最大的并發來運行 

執行

  1. gulp cpmposeTask 

執行結果

  1. chengxinsong$ gulp composeTask 
  2. [18:24:35] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [18:24:35] Starting 'composeTask'... 
  4. [18:24:35] Starting 'gulpSaucxs'... 
  5. [18:24:35] Starting 'privateTask'... 
  6. [18:24:35] Finished 'gulpSaucxs' after 8.24 ms 
  7. hello 「松寶寫代碼」 
  8. [18:24:35] Finished 'privateTask' after 9.71 ms 
  9. [18:24:35] Finished 'composeTask' after 12 ms 

我們可以輸出日志,可以知道parallel方法是并行的執行任務

  • 先啟動公共任務 composeTask,
  • 開啟 gulpSaucxs 任務方法
  • 開啟 privateTask 任務方法
  • 完成 gulpSaucxs 任務方法
  • 然后8.24毫秒之后
  • 輸出 hello 「松寶寫代碼」
  • 完成 privateTask 任務方法
  • 然后9.71毫秒之后
  • 完成 公共任務 composeTask

七、異步執行

當從任務(task)中返回 stream、promise、event emitter、child process 或 observable 時,成功或錯誤值將通知 gulp 是否繼續執行或結束。如果任務(task)出錯,gulp 將立即結束執行并顯示該錯誤。

1、返回stream流

  1. const gulp = require('gulp'); 
  2. const uglify = require('gulp-uglify'); 
  3. function streamTask(done) { 
  4.   return gulp.src('src/*.js'
  5.   .pipe(uglify()) 
  6.   .pipe(gulp.dest('dist/js')); 
  7.   done(); 
  8. exports.streamTask = streamTask; 

輸出:dist/js/index.js

2、返回promise

看一個返回promise的例子。

  1. const gulp = require('gulp'); 
  2. function promiseTask(done) { 
  3.   Promise.resolve('返回的值'); 
  4.   done(); 
  5. exports.promiseTask = promiseTask; 

輸出:

  1. chengxinsong$ gulp promiseTask 
  2. [19:20:37] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [19:20:37] Starting 'promiseTask'... 
  4. [19:20:37] Finished 'promiseTask' after 1.55 ms 
  5. 返回的值 「松寶寫代碼」公眾號 

3、返回 eventEmitter 事件發射器

看一個返回 eventEmitter 的例子。

  1. // 返回event emitter 
  2. const { EventEmitter } = require('events'); 
  3. function eventEmitterTask(done) { 
  4.   const emitter = new EventEmitter(); 
  5.   setTimeout(() => { 
  6.     emitter.emit('data'
  7.     console.log(emitter, '松寶寫代碼'
  8.   }, 500); 
  9.   done(); 
  10. exports.eventEmitterTask = eventEmitterTask; 

執行 gulp eventEmitterTask,結果如下:

  1. chengxinsong$ gulp eventEmitterTask 
  2. [21:42:26] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [21:42:26] Starting 'eventEmitterTask'... 
  4. [21:42:26] Finished 'eventEmitterTask' after 1.77 ms 
  5. EventEmitter { 
  6.   _events: [Object: null prototype] {}, 
  7.   _eventsCount: 0, 
  8.   _maxListeners: undefined, 
  9.   [Symbol(kCapture)]: false 
  10. } 松寶寫代碼 

4、返回 child process 子進程

看一個返回 childProcess 的例子。

  1. // 返回child_process 子進程 
  2. const { exec } = require('child_process'); 
  3. function childProcessTask(done) { 
  4.   exec('data'); 
  5.   console.log('松寶寫代碼'
  6.   done(); 
  7. exports.childProcessTask = childProcessTask; 

執行 gulp childProcessTask ,結果如下:

  1. chengxinsong$ gulp childProcessTask 
  2. [21:48:32] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [21:48:32] Starting 'childProcessTask'... 
  4. 松寶寫代碼 
  5. [21:48:32] Finished 'childProcessTask' after 7.02 ms 

5、返回 RxJS observable 觀察對象

看一個返回 observable 的例子。

  1. // 返回 observable 觀察對象 
  2. const Observable = require('rx').Observable; 
  3. function observableTask(done) { 
  4.   Observable.return('松寶寫代碼'); 
  5.   console.log('松寶寫代碼'
  6.   done(); 
  7. exports.observableTask = observableTask; 

執行 gulp observableTask ,結果如下:

  1. chengxinsong$ gulp observableTask 
  2. [21:53:14] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [21:53:14] Starting 'observableTask'... 
  4. 松寶寫代碼 
  5. [21:53:14] Finished 'observableTask' after 2.28 ms 

6、使用 callback 回調函數

看一個使用 callback 回調函數 的例子。

如果任務(task)不返回任何內容,則必須使用 callback 來指示任務已完成。

如需通過 callback 把任務(task)中的錯誤告知 gulp,將 Error 作為 callback 的參數。

  1. // 返回 callback 回調函數 
  2. function callbackTask(done) { 
  3.   console.log('松寶寫代碼'
  4.   done(new Error('拋出錯誤了')); 
  5. exports.callbackTask = callbackTask; 

執行 gulp callbackTask 結果

  1. chengxinsong$ gulp callbackTask 
  2. [21:58:22] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [21:58:22] Starting 'callbackTask'... 
  4. 松寶寫代碼 
  5. [21:58:22] 'callbackTask' errored after 2.09 ms 
  6. [21:58:22] Error: 拋出錯誤了 
  7.     at callbackTask 

7、使用 async/await

看一個使用 async/await 異步函數 的例子。

可以將任務(task)定義為一個 async 函數,它將利用 promise 對你的任務(task)進行包裝。這將允許你使用 await 處理 promise,并使用其他同步代碼。

  1. // 使用 async/await 回調函數 
  2. const fs = require('fs'); 
  3. async function asyncTask(done) { 
  4.   const { version } = fs.readFileSync('package.json'); 
  5.   console.log(version, 'version====='
  6.   const data = await Promise.resolve('松寶寫代碼'); 
  7.   console.log(data, '松寶寫代碼========='
  8.   done(); 
  9. exports.asyncTask = asyncTask; 

執行 gulp asyncTask 結果

  1. chengxinsong$ gulp asyncTask 
  2. [22:26:06] Using gulpfile ~/Desktop/coding/full_stack_knowledge_list/article/gulp/gulp-test/gulpfile.js 
  3. [22:26:06] Starting 'asyncTask'... 
  4. undefined version===== 
  5. 松寶寫代碼 松寶寫代碼========= 
  6. [22:26:06] Finished 'asyncTask' after 2.02 ms 

八、我們來看一個實例

比如我們需要

  • 首先清空dist目錄,使用series處理
  • 然后 壓縮css和壓縮js 并行進行處理,使用parallel處理
  • 輸出到dist/js和dist/css
  1. // 實例 
  2. const minifycss = require('gulp-minify-css'); //壓縮css 
  3. const del = require('del'); // 刪除目錄 
  4. // 清空目錄 
  5. function clean(done) { 
  6.   del(['dist/**']); 
  7.   done(); 
  8. // 壓縮css 
  9. function minifyCss(done) { 
  10.   gulp.src('src/*.css'
  11.   .pipe(minifycss()) 
  12.   .pipe(gulp.dest('dist/css')); 
  13.   done() 
  14. // 壓縮js 
  15. function uglifyJs(done) { 
  16.   gulp.src('src/*.js'
  17.   .pipe(uglify()) 
  18.   .pipe(gulp.dest('dist/js')); 
  19.   done(); 
  20. exports.exampleGulpTask = gulp.series(clean, gulp.parallel(minifyCss, uglifyJs));   // 執行順序 clean => 并行執行 css js 壓縮 

 

責任編輯:姜華 來源: 松寶寫代碼
相關推薦

2024-05-24 10:01:12

2017-02-13 20:22:42

Android發布項目jcenter

2022-09-28 07:18:34

服務限流部署

2022-09-28 09:43:35

服務限流

2020-03-10 22:01:54

物聯網安全物聯網IOT

2024-07-02 08:28:17

開源代碼社區

2022-07-11 09:36:38

SpringJava開發

2020-08-17 17:09:01

機器學習技術人工智能

2021-05-10 16:41:19

機器學習人工智能IT

2025-10-13 07:56:07

2019-10-10 14:48:19

深度學習人工智能

2020-09-23 07:39:59

SpringBoot項目Redis

2009-10-27 09:35:58

ADSL接入技術

2009-10-28 10:55:27

2009-10-30 09:42:39

Internet接入技

2009-10-29 10:48:51

光纖接入技術

2009-10-27 11:34:36

無線接入技術

2009-10-30 10:40:59

2019-12-03 09:31:14

編程語言程序員Python

2024-11-08 13:13:58

點贊
收藏

51CTO技術棧公眾號

91精品国产色综合久久久蜜香臀| 国产精品欧美综合在线| 欧美在线免费视频| 国产精品酒店视频| silk一区二区三区精品视频| 色综合久久九月婷婷色综合| 亚洲黄色网址在线观看| 午夜福利一区二区三区| 久久99精品久久久久久| 国模吧一区二区三区| www.av天天| 成人av影音| 欧美日韩中文一区| 久在线观看视频| jizzjizz亚洲| 欧美激情一区二区在线| 精品国产乱码久久久久软件| 伊人免费在线观看| 亚洲色诱最新| 久久91亚洲精品中文字幕奶水 | 成人性生交大合| 国产成人精品免高潮费视频| 久久综合亚洲色hezyo国产| 日韩免费一区| 国产亚洲欧洲高清一区| 18禁裸乳无遮挡啪啪无码免费| 亚洲精品在线播放| 欧美精品日韩一区| 国产三级日本三级在线播放| 极品在线视频| 亚洲成人av资源| 免费看黄色a级片| 精品国产99久久久久久| 国产欧美va欧美不卡在线 | 成人综合一区| 国产午夜精品久久久| 国产午夜在线一区二区三区| 在线精品视频一区| 91麻豆精品国产91久久久久| 国产一二三区av| 一呦二呦三呦精品国产| 欧美午夜电影在线| 久久精品国产精品亚洲色婷婷| 女同一区二区免费aⅴ| 伊人夜夜躁av伊人久久| 日本免费在线视频观看| 国产美女福利在线| 亚洲欧美日韩系列| 蜜臀av性久久久久蜜臀av| 高清免费电影在线观看| 亚洲丝袜精品丝袜在线| 综合色婷婷一区二区亚洲欧美国产| 国产系列电影在线播放网址| 国产亚洲欧美激情| 相泽南亚洲一区二区在线播放| 成人av毛片| 中文字幕一区二区三区视频| 一区二区三区四区免费视频| 国产精品久久麻豆| 一区二区三区中文免费| www.男人天堂网| av资源在线播放| 一区二区三区丝袜| 国产妇女馒头高清泬20p多| 岛国av在线播放| 一本久道久久综合中文字幕| 久久久精品麻豆| 国产美女视频一区二区| 欧美精品一区男女天堂| 免费在线观看你懂的| 欧美色女视频| 久久伊人精品视频| 日韩精品手机在线| 日韩精品1区2区3区| 国产在线观看一区二区三区| 亚洲av无码一区二区三区dv| aaa欧美日韩| 水蜜桃亚洲精品| 在线视频国产区| 欧美日韩国产丝袜另类| 最新中文字幕2018| 超碰成人在线免费| 亚洲人午夜精品| 麻豆明星ai换脸视频| 伊人影院久久| 国产精品欧美激情| 亚洲国产剧情在线观看| 久久久久久久久久美女| 91手机视频在线| 亚洲美女尤物影院| 4438x成人网最大色成网站| 国产成人精品无码片区在线| 不卡av一区二区| 高清欧美电影在线| 一级黄色片在线看| 99精品视频免费在线观看| 亚洲精品二区| 草草影院在线| 欧美日韩大陆一区二区| 中文字幕无码人妻少妇免费| 青青草综合网| 91成人精品网站| 国产av一区二区三区| 久久婷婷久久一区二区三区| 日本三日本三级少妇三级66| 成人软件在线观看| 欧美xxxxxxxxx| 免费一级suv好看的国产网站| 亚洲国产二区| 亚洲在线视频观看| 在线视频1区2区| 欧美日韩中文字幕日韩欧美| 亚洲AV成人精品| 成人羞羞动漫| 青青草成人在线| 亚洲第一视频在线播放| 中文字幕中文字幕中文字幕亚洲无线| 日本毛片在线免费观看| 一区二区三区国产好| 久久精品电影网站| 中文字幕一区二区三区免费看| 99国产精品久久久| 欧美a级免费视频| 成人黄色理论片| 色吧影院999| 中文字幕免费高清网站| 91理论电影在线观看| 久久手机在线视频| 国产美女视频一区二区| 自拍偷拍亚洲一区| 最新黄色网址在线观看| 久久久蜜桃精品| 欧美一级在线看| 鲁大师精品99久久久| 久久免费福利视频| 亚洲国产精品久久久久爰性色| 亚洲三级在线免费观看| 小早川怜子一区二区三区| 日韩欧美精品| 国产精品美女主播在线观看纯欲| 国产视频网站在线| 91极品美女在线| www.av天天| 免费美女久久99| 四虎永久国产精品| 久久精品国产福利| 日韩一区二区在线视频| 国产又粗又猛又黄| 亚洲色图制服丝袜| 亚洲精品一区二区18漫画| 合欧美一区二区三区| 国产精品二区二区三区| 欧美久久天堂| 亚洲色图美腿丝袜| 中文字幕网址在线| 国产精品久久久久国产精品日日| 手机免费看av网站| 欧美99在线视频观看| 动漫一区二区在线| 国产网站在线| 亚洲日本欧美中文幕| 中文字幕欧美在线观看| 亚洲少妇中出一区| 白嫩情侣偷拍呻吟刺激| 久久av最新网址| 亚洲一区二三| 在线精品国产亚洲| 欧美亚洲国产视频| 在线激情免费视频| 91精品国产高清一区二区三区蜜臀| 欧洲第一无人区观看| 高清不卡在线观看| av动漫在线观看| 欧美大人香蕉在线| 国产aⅴ精品一区二区三区黄| 麻豆mv在线观看| 伊人久久久久久久久久久久久| 亚洲最新av网站| 亚洲国产人成综合网站| 成年人网站免费在线观看| 久久精品国产精品青草| 男人天堂a在线| av在线不卡顿| 国产精品久久久久久免费观看| 涩涩视频在线播放| 久久久av网站| 久青青在线观看视频国产| 欧美二区在线观看| 中文字幕激情小说| 亚洲日本乱码在线观看| 97超碰在线免费观看| 国产精品一区一区三区| 国产日韩一区二区在线观看| 在线成人直播| 日韩av电影免费播放| 最新国产一区二区| 国产丝袜在线| 亚洲成a人v欧美综合天堂下载| 中文字幕一区二区久久人妻网站| 日韩精品高清不卡| 国产精品三级一区二区| 日韩欧美高清在线播放| 精品久久久久久一区| 国产一区二区三区免费观看在线| 91国内在线视频| 国产精品va在线观看视色 | 91人人澡人人爽| 日本女优在线视频一区二区| 97在线国产视频| 91九色精品| 日本一区视频在线| 久久男人av| 97超碰人人模人人爽人人看| 欧美91在线|欧美| 日本伊人精品一区二区三区介绍| 青青青国内视频在线观看软件| 最近2019中文字幕mv免费看| 黄色网址在线播放| 亚洲精品国产福利| 午夜免费福利视频| 3atv在线一区二区三区| 亚洲 国产 日韩 欧美| 欧美日韩精品二区| 久久机热这里只有精品| 亚洲人成7777| 久久久久久久久久97| 国产精品免费看片| 日本二区在线观看| 久久久久久久久久久黄色| 日本三级日本三级日本三级极| 国产成人欧美日韩在线电影| 91网址在线观看精品| 狠狠狠色丁香婷婷综合激情| www.久久91| 日韩av电影免费观看高清完整版| 日韩 欧美 高清| 欧美专区18| 日韩中文字幕组| 日韩经典中文字幕一区| 成年人网站大全| 日韩一区精品视频| 欧美aⅴ在线观看| 亚洲欧美日韩专区| 日韩少妇内射免费播放18禁裸乳| 国产一区二区高清| 色综合久久久久无码专区| 国产亚洲永久域名| 成年人视频在线免费| 日韩精品色哟哟| wwwwxxxx日韩| 精品在线观看视频| 欧美一级免费在线| 国产高清不卡二三区| 一二三区视频在线观看| 不卡的av中国片| 国产精品扒开腿做爽爽| 欧美国产成人精品| 国产精品夜夜夜爽阿娇| 一区二区三区.www| 中文字幕一区二区三区手机版| 婷婷亚洲久悠悠色悠在线播放| 久久精品国产成人av| 在线免费观看日本欧美| 国产精品人人妻人人爽| 精品国产一区二区三区四区四| 日本毛片在线观看| 亚洲视频综合网| 男女啪啪在线观看| 欧美黑人性猛交| 澳门成人av网| 成人网中文字幕| 东京久久高清| 日韩和欧美的一区二区| 香蕉精品视频在线观看| 91九色丨porny丨国产jk| 久久久久99| 天堂在线精品视频| 91在线看国产| 日本不卡一二区| 精品久久久香蕉免费精品视频| 成年人晚上看的视频| 欧美一激情一区二区三区| 牛牛热在线视频| 久久精品中文字幕免费mv| 爱啪啪综合导航| 国产精品视频资源| 精品亚洲自拍| 伊人狠狠色丁香综合尤物| 亚洲国产片色| 亚洲小视频网站| 91麻豆免费视频| 日韩欧美综合视频| 色综合天天综合狠狠| aaa级黄色片| 国产亚洲一区二区精品| 成人高潮aa毛片免费| 91精品久久久久久久久久久久久久 | 色噜噜夜夜夜综合网| 精品久久久中文字幕人妻| 精品剧情在线观看| 日韩欧美在线观看一区二区| 最近中文字幕日韩精品| 女海盗2成人h版中文字幕| 91亚洲精品久久久| 精品国产一区二区三区| 每日在线观看av| 国产一区二区免费视频| xxxx日本黄色| 日韩欧美在线视频免费观看| 亚洲欧美高清视频| 精品国内产的精品视频在线观看| 欧美艳星kaydenkross| 国产乱码一区| 欧美伊人久久| 亚洲精品午夜在线观看| 国产日产欧美一区二区视频| 欧美成人精品欧美一级乱黄| 精品久久久久99| 搞黄网站在线观看| 国产日韩中文字幕在线| 精品一区av| 国产福利一区视频| 久久综合九色综合97婷婷| 国产黄色片视频| 日韩你懂的电影在线观看| 国产在线观看a| 国产一区二区在线免费视频| 欧美三级美国一级| 黄色高清无遮挡| 国产清纯白嫩初高生在线观看91| 国产www在线| 日韩成人在线视频观看| а√天堂资源官网在线资源| 国产高清精品一区二区三区| 欧美精品观看| 在线观看欧美一区二区| 一区二区三区在线视频播放| 国产日韩一级片| 久久国产精品网站| 国产欧美视频在线| 秋霞在线一区二区| 国产精品99久久久久久似苏梦涵| 国产黄在线免费观看| 日韩亚洲欧美一区二区三区| 亚洲小说区图片| 成人久久18免费网站漫画| 黄色工厂这里只有精品| 无码人妻精品一区二区三| 亚洲狠狠爱一区二区三区| 蜜桃在线一区二区| 91精品国产99| 你懂的视频欧美| 另类小说第一页| 中文字幕视频一区| 亚洲成人77777| 欧美影院在线播放| 欧美先锋资源| 91蝌蚪视频在线| 亚洲大尺度视频在线观看| 香蕉视频免费看| 国产精品久久久久久久电影| 国产高清久久| www日本在线观看| 欧美视频在线看| 在线免费观看黄色av| 成人免费福利在线| 黄色亚洲大片免费在线观看| 中国av免费看| 欧美三级日韩三级| 51xtv成人影院| 久久av免费一区| 日本不卡一区二区三区| 免费中文字幕在线| 日韩激情av在线免费观看| 巨胸喷奶水www久久久| 国内自拍中文字幕| 91伊人久久大香线蕉| 中文字幕在线播出| 午夜精品福利视频| 日韩电影一区| 日本一区二区在线观看视频| 91福利区一区二区三区| 97caopor国产在线视频| 欧美另类一区| 国产一区二区三区观看| 五月天综合激情网| 理论片在线不卡免费观看| 欧美sss在线视频| 亚洲精品成人在线播放| 亚洲v精品v日韩v欧美v专区| 秋霞影院午夜丰满少妇在线视频| 国产精品露出视频| 久久电影网站中文字幕| 男人的天堂一区| 美女国内精品自产拍在线播放| 网红女主播少妇精品视频| 亚洲国产综合av| 欧美色老头old∨ideo| 黄在线观看免费网站ktv| 中文字幕剧情在线观看一区|