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

從零開始打造個人專屬命令行工具集——yargs完全指南

運維 系統運維 前端
熟練使用命令行工具能極大的提高開發效率,linux自帶的命令行工具都非常的有用,但是這些工具都是按照通用需求開發出來的 ,如果有一些特別的需求,還是需要自己寫腳本來完成一些比如文件批量重命名,文件內容批量替換等任務來提供工作效率。

[[169849]]

【引自ideras.me的博客】前言

使用命令行程序對程序員來說很常見,就算是前端工程師或者開發gui的,也需要使用命令行來編譯程序或者打包程序

熟練使用命令行工具能極大的提高開發效率,linux自帶的命令行工具都非常的有用,但是這些工具都是按照通用需求開發出來的 ,如果有一些特別的需求,還是需要自己寫腳本來完成一些比如文件批量重命名,文件內容批量替換等任務來提供工作效率。

在node.js出來之前,python經常被用來開發一些腳本完成特殊的任務,比如python爬蟲,python相關的教程有很多,有興趣的自己google。

得益于node.js的異步io特性,使用node開發io密集類任務變得非常簡單,這篇文章就為大家講講怎么使用node.js的yargs模塊來開發自己的命令行工具集合。

命令行參數解析

yargs是一個npm模塊用來完成命令行參數解析的,回到使用shell開發命令行的時代,getopts是***代命令行參數解析工具,經過shell => python => node.js 的迭代,命令行參數解析程序其實沒有多大的進化,它們的目的始終是把用戶從命令行傳入的參數解析成指定的格式,供程序使用

雖然沒有多大變化,但是由于開發一個命令行參數解析模塊比較簡單,所以目前node社區存在很多類似yargs的開源項目,這里簡單列舉一下,有興趣的可以自己去了解一下, 然后選擇自己喜歡的項目來使用。

  • minimist 源自
  • optimist 模仿python的optimist項目
  • commander.js tj是node.js大神,co的作者, commander.js源自ruby的commander項目,作者也是tj
  • nopt npm項目中使用
  • nomnom 不再維護,不建議使用

yargs

讀過阮一峰的Node.js 命令行程序開發教程之后開始使用yargs開發自己命令行工具, 用過一段時間發現非常的好用。

自阮大神的文章發布以來,yargs有了一些改動,添加有很多有用的功能,特別是.commandDir(directory, [opts])這個功能,對打造命令行工具集合非常有用,所以寫一個新版本的yargs教程還是有必要的。

yargs的用法還算比較簡單,對英文有自信的可以去首頁閱讀原版:yargs

簡單模式

yargs默認使用兩個--作為參數的前綴,中間使用空格或者=都可以

下面的代碼展示了yargs最簡單的用法,你只需要引入yargs,就能讀取命令行參數,不需要寫任何的配置,非常的簡單

  1. #!/usr/bin/env node 
  2. var argv = require('yargs').argv; 
  3.  
  4. if (argv.ships > 3 && argv.distance < 53.5) { 
  5.     console.log('Plunder more riffiwobbles!'); 
  6. else { 
  7.     console.log('Retreat from the xupptumblers!'); 
  8.  
  1. $ ./plunder.js --ships=4 --distance=22 
  2. Plunder more riffiwobbles! 
  3.  
  4. $ ./plunder.js --ships 12 --distance 98.7 
  5. Retreat from the xupptumblers! 

 示例代碼都來自官網:yargs

簡單模式還能讀取短變量如-x 4相當于argv.x = 4

簡單模式還能讀取布爾類型-s相當于argv.s = true

簡單模式還能讀取非-開始的變量,這種類型的變量保存在argv._數組里面

參數配置

簡單模式的功能都只用一行代碼就能實現

  1. var argv = require('yargs').argv; 

但是如果你想統計變量出現的次數怎么辦? 答案就是添加參數配置選項。

  1. #!/usr/bin/env node 
  2. var argv = require('yargs'
  3.     .count('verbose'
  4.     .alias('v''verbose'
  5.     .argv; 
  6.  
  7. VERBOSE_LEVEL = argv.verbose; 
  8.  
  9. function WARN()  { VERBOSE_LEVEL >= 0 && console.log.apply(console, arguments); } 
  10. function INFO()  { VERBOSE_LEVEL >= 1 && console.log.apply(console, arguments); } 
  11. function DEBUG() { VERBOSE_LEVEL >= 2 && console.log.apply(console, arguments); } 
  12.  
  13. WARN("Showing only important stuff"); 
  14. INFO("Showing semi-important stuff too"); 
  15. DEBUG("Extra chatty mode"); 

 上面的程序能統計verbose參數出現的次數,縮寫-v也會統計進去,具體調用例子參考下面的代碼

  1. $ node count.js 
  2. Showing only important stuff 
  3.  
  4. $ node count.js -v 
  5. Showing only important stuff 
  6. Showing semi-important stuff too 
  7.  
  8. $ node count.js -vv 
  9. Showing only important stuff 
  10. Showing semi-important stuff too 
  11. Extra chatty mode 
  12.  
  13. $ node count.js -v --verbose 
  14. Showing only important stuff 
  15. Showing semi-important stuff too 
  16. Extra chatty mode 

 yargs提供很多接口用來幫助完善命令行程序,

提示用法

  1. var argv = require('yargs'
  2.     .usage('Usage: $0 -w [num] -h [num]'
  3.     .argv; 

 必選參數

  1. #!/usr/bin/env node 
  2. var argv = require('yargs'
  3.     .usage('Usage: $0 -w [num] -h [num]'
  4.     .demand(['w','h']) 
  5.     .argv; 

 提供參數默認值

  1. #!/usr/bin/env node 
  2. var argv = require('yargs'
  3.     .default('x', 10) 
  4.     .default('y', 10) 
  5.     .argv 
  6. console.log(argv.x + argv.y); 

 打印幫助信息

  1. #!/usr/bin/env node 
  2. var argv = require('yargs'
  3.     .usage('Usage: $0 <command> [options]'
  4.     .help('h'
  5.     .alias('h''help'
  6.     .epilog('copyright 2015'
  7.     .argv; 

 使用別名

  1. var argv = require('yargs'
  2.     .usage('Usage: $0 <command> [options]'
  3.     .alias('h''help'
  4.     .argv; 

 訪問argv.h相當于訪問argv.help

參數數組

  1. var argv = require('yargs'
  2.     .usage('Usage: $0 <command> [options]'
  3.     .alias('n''name'
  4.     .array('n'
  5.     .argv; 
  6.  
  7. console.log(argv.n); 

 調用

  1. node array_test.js -n abc test 

設置參數范圍

  1. var argv = require('yargs'
  2.   .alias('i''ingredient'
  3.   .describe('i''choose your sandwich ingredients'
  4.   .choices('i', ['peanut-butter''jelly''banana''pickles']) 
  5.   .help('help'
  6.   .argv 

 上述代碼設定argv.i的值只能是['peanut-butter', 'jelly', 'banana', 'pickles']數組中的一個

上面是yargs比較簡單的用法,如果想閱讀完整版,建議去github上閱讀

子命令

yargs適合開發復雜的命令行程序的另一個原因是它支持子命令,而且子命令可以嵌套,這意味著你也可以開發出類似git這樣擁有上百個命令的程序

yargs的子命令有兩種模式:.command(*)和.commandDir(directory, [opts])

.command

  1. .command方法有三個接口 
  2.  
  3. .command(cmd, desc, [builder], [handler]) 
  4.  
  5. .command(cmd, desc, [module]) 
  6.  
  7. .command(module) 

其實它們的用法都差不多,可以把它們都看作傳遞一個module給yargs,這個module必須導出四個變量cmd, desc [builder], [handler],其中builder和handler是方法,另外兩個是字符串

使用***個接口的示例 

  1. yargs 
  2.   .command( 
  3.     'get'
  4.     'make a get HTTP request'
  5.     function (yargs) { 
  6.       return yargs.option('u', { 
  7.         alias: 'url'
  8.         describe: 'the URL to make an HTTP request to' 
  9.       }) 
  10.     }, 
  11.     function (argv) { 
  12.       console.log(argv.url) 
  13.     } 
  14.   ) 
  15.   .help() 
  16.   .argv  

使用第三個接口需要把這個模塊在單獨的文件,然后用require引入

這是模塊的代碼

  1. // my-module.js 
  2. exports.command = 'get <source> [proxy]' 
  3.  
  4. exports.describe = 'make a get HTTP request' 
  5.  
  6. exports.builder = { 
  7.   banana: { 
  8.     default'cool' 
  9.   }, 
  10.   batman: { 
  11.     default'sad' 
  12.   } 
  13.  
  14. exports.handler = function (argv) { 
  15.   // do something with argv. 
  16.  

引入的時候這樣使用

  1. yargs.command(require('my-module')) 
  2.   .help() 
  3.   .argv 

 當額外的模塊沒有定義cmd和desc的時候可以使用第二個接口

  1. yargs.command('get <source> [proxy]''make a get HTTP request', require('my-module')) 
  2.   .help() 
  3.   .argv 

 這里建議使用第三個接口,這樣能保持模塊的內聚,這種模塊你能掛載在任何命令下面,遷移的時候不需要修改模塊代碼,只需要修改引入模塊的代碼就能實現

.commandDir

如果有大量的命令都使用上面的.command(module)來開發的話,這些模塊都有相同的結構,應該能有方法簡化這些命令的引入過程,把這個過程自動化,基于 這個目的yargs提供了.commandDir接口

下面參考一個我自己寫的項目pit

下面是這個項目的目錄結構

  1.  
  2. ├── pit 
  3.  
  4. │ ├── douban 
  5.  
  6. │ │ └── movie.js 
  7.  
  8. │ ├── douban.js 
  9.  
  10. │ ├── gg 
  11.  
  12. │ │ ├── client.js 
  13.  
  14. │ │ ├── login.js 
  15.  
  16. │ │ ├── scope.js 
  17.  
  18. │ │ ├── scope.json 
  19.  
  20. │ │ ├── secret.json 
  21.  
  22. │ │ ├── token.json 
  23.  
  24. │ │ └── upload.js 
  25.  
  26. │ ├── gg.js 
  27.  
  28. │ ├── git 
  29.  
  30. │ │ ├── commit.js 
  31.  
  32. │ │ ├── create.js 
  33.  
  34. │ │ ├── deploy.js 
  35.  
  36. │ │ ├── push.js 
  37.  
  38. │ │ └── token.json 
  39.  
  40. │ ├── git.js 
  41.  
  42. │ ├── gm.js 
  43.  
  44. │ ├── md5.js 
  45.  
  46. │ ├── news 
  47.  
  48. │ │ ├── bing.js 
  49.  
  50. │ │ ├── funs.js 
  51.  
  52. │ │ ├── funs.json 
  53.  
  54. │ │ ├── games.js 
  55.  
  56. │ │ ├── games.json 
  57.  
  58. │ │ ├── google.js 
  59.  
  60. │ │ ├── newsall.json 
  61.  
  62. │ │ ├── shops.js 
  63.  
  64. │ │ ├── shops.json 
  65.  
  66. │ │ ├── videos.js 
  67.  
  68. │ │ └── videos.json 
  69.  
  70. │ └── news.js 
  71.  
  72. └── pit.js 

 pit.js:命令行的入口

  1. #!/usr/bin/env node 
  2.  
  3. require('yargs'
  4.   .commandDir('pit'
  5.   .demand(1) 
  6.   .help() 
  7.   .locale('en'
  8.   .showHelpOnFail(true'Specify --help for available options'
  9.   .argv 
  10. ··· 

這段代碼只指定讀取同目錄下同名文件夾`pit`下面的命令加載為子命令

> **注意**:commandDir默認只會加載目錄下***級的文件,不會遞歸加載,如果想遞歸加載需要這樣寫`.commandDir('pit', {recurse: true})`

接著來看git子命令,因為git項目每次提交都要重復幾個相同的步驟,所有想開發一個更簡單的命令進行打包提交

git.js

  1. exports.command = 'git '
  2.  
  3. exports.desc = 'github command list'
  4.  
  5. exports.builder = function (yargs) { return yargs.commandDir('git') } 
  6.  
  7. exports.handler = function (argv) {} 

 git也是加載一個目錄作為自己的子命令:以commit為例

commit.js

  1. 'use strict'
  2.  
  3. var fs = require('fs'); var path = require('path'); 
  4.  
  5. require('shelljs/global'); 
  6.  
  7. var Q = require('q'); 
  8.  
  9. function _exec(cmd) { var deferred = Q.defer(); exec(cmd, function (code, stdout, stderr) { deferred.resolve(); }); return deferred.promise; } 
  10.  
  11. exports.command = 'commit'
  12.  
  13. exports.desc = 'commit repo local'
  14.  
  15. exports.builder = function (yargs) { return yargs .help('h'); }; 
  16.  
  17. exports.handler = function (argv) { var repo = process.cwd(); var name = path.basename(repo); Q.fcall(function () { }) .then(() => _exec(git add .)) .then(() => _exec(git commit -m 'd')) .catch(function (err) { console.log(err); }) .done(() => { console.log(commit ${repo} done); }); 
  18.  
  19. } ``` 

 這個命令默認運行在git項目的根目錄,和git命令不太一樣,git可以在項目根目錄下的任意子目錄里面運行。

使用shelljs來運行子命令,然后用Q進行promise封裝,保證命令的執行順序,同時把命令行輸出和錯誤信息都打印到 控制。

一個很簡單能節省時間的命令行程序,作為拋磚引玉之用

延伸

高手都是擅長使用命令行(電影里面的高手也一樣),當你習慣使用命令行完成日常任務之后,慢慢的會形成一種依賴。繼續下去,你會考慮把所有的事情都用來命令行來完成,當然這個 目的不能實現,因為能自動完成所有任務的命令行不叫命令行——它叫AI

雖然不能開發一臺高智能ai,但是還是有很多任務能用命令行來完成的,這里寫下我的思路,供大家參考

api命令行

大型網站都提供自己的api接口配上oauth2.0認證,如果你想使用命令行來調用這些api接口,你完全可以做到

像aws,google cloud,aliyun這種云主機,使用命令行能節省很多運維的時間

另外你也可以參考上面pit.js寫的douban.js來抓取豆瓣的數據,豆瓣的公共api不需要認證就能訪問,用來做一些測試非常方便

命令行爬蟲

使用node.js開發爬蟲就像使用python一樣簡單,但是一個功能齊全的爬蟲必然少不了命令行接口,你不可能每次有新的需求都來修改代碼,下次再給大家分享我寫的一個簡單的基于 node.js的爬蟲項目

表單提交

對一些不提供api接口但是又想使用命令來進行交互的網站,你可以使用表單提交來進行登錄,然后做一些登錄之后才能做的事情:例如發表文章

現在很多的網站都支持使用markdown編輯文章,然后發布,對這一類網站你都可以開發自己的命令行統一進行管理,當你寫完文章之后,只需要一個簡單 的命令,就能把文章同時推送到各大網站

責任編輯:龐桂玉 來源: ideras.me微博
相關推薦

2025-08-05 07:52:41

man 命令Linux命令行

2013-12-30 17:04:00

2025-07-23 09:06:00

2025-08-05 07:26:06

2024-03-01 19:53:37

PyBuilderPython開發

2023-03-21 07:35:43

2025-07-23 05:42:04

pwdLinux命令行

2022-02-16 22:57:57

Mitmproxy抓包工具

2024-05-17 17:29:00

CurdlingPython開發

2020-12-11 06:44:16

命令行工具開發

2020-12-10 16:16:08

工具代碼開發

2020-11-01 20:00:26

命令行ShellLinux

2019-06-10 15:00:27

node命令行前端

2020-11-05 09:30:59

命令行Linux

2023-06-09 07:45:29

Kuberneteskubectl

2025-05-12 08:14:39

2011-05-05 11:03:34

jQueryjavascript

2015-11-17 16:11:07

Code Review

2018-04-18 07:01:59

Docker容器虛擬機

2019-01-18 12:39:45

云計算PaaS公有云
點贊
收藏

51CTO技術棧公眾號

国产亚洲精品久久久久久777| 亚洲成人资源在线| 亚洲一区二区三区乱码aⅴ| 日韩a级片在线观看| 激情亚洲另类图片区小说区| 欧洲在线/亚洲| 黄色特一级视频| 你懂的免费在线观看| 国模少妇一区二区三区| 91av在线免费观看| 人人干在线观看| 欧美freesex8一10精品| 欧美日韩免费不卡视频一区二区三区 | av在线播放不卡| 国产精品视频区1| 日本熟女一区二区| 欧美一级精品片在线看| 精品电影一区二区| 国产福利精品一区二区三区| 少妇视频在线观看| 亚洲男人的天堂一区二区| 免费观看国产成人| 亚洲第一页视频| 久久精品国产一区二区三| 51视频国产精品一区二区| 欧产日产国产v| 成人一区而且| 亚洲四色影视在线观看| 香蕉在线观看视频| 99久久这里有精品| 在线观看av一区二区| 97国产在线播放| 欧美黄色视屏| 亚洲精品亚洲人成人网在线播放| 日本精品免费| 欧美孕妇性xxxⅹ精品hd| 成人免费视频网站在线观看| 成人亚洲欧美一区二区三区| 欧美性受xxx黑人xyx性爽| 亚洲免费网址| 欧美在线亚洲在线| aaa人片在线| 亚洲片区在线| 久久久久久综合网天天| 在线免费日韩av| 久久久久久久久99精品大| 中文字幕亚洲欧美日韩2019| 波多野结衣一二三四区| 国产探花一区二区| 亚洲人午夜色婷婷| 国产小视频自拍| 视频国产一区| 一本色道久久88亚洲综合88| 亚洲第一综合网| 精品av一区二区| 亚洲性无码av在线| 女人黄色一级片| 欧美疯狂party性派对| 少妇高潮久久久久久潘金莲| 免费看一级黄色| 天天av综合| 欧美成人精品激情在线观看 | 欧美性高潮床叫视频| 欧美不卡在线播放| 涩涩视频在线免费看| 色婷婷综合久久久久中文一区二区 | 日本精品人妻无码77777| 亚洲精品99| 欧美精品成人在线| 国产又色又爽又黄的| 亚洲综合99| 国产精品久久婷婷六月丁香| 在线观看国产成人| 国产成人一区二区精品非洲| 国产高清精品一区| 日本亚洲一区| 国产精品免费丝袜| 300部国产真实乱| a在线视频v视频| 日本精品一级二级| 国产乱码一区二区三区四区| av自拍一区| 亚洲欧美在线播放| 公肉吊粗大爽色翁浪妇视频| 91久久夜色精品国产按摩| 精品自在线视频| 在线观看中文字幕视频| 奇米色777欧美一区二区| 亚洲va久久久噜噜噜久久天堂| 空姐吹箫视频大全| 国产三级欧美三级| 国产乱人伦精品一区二区三区| 精精国产xxxx视频在线播放| 91国偷自产一区二区开放时间| 久久精品视频在线观看免费| 国产欧美啪啪| 久久精品国产成人精品| 国产精品suv一区二区三区| 免费人成精品欧美精品| 欧美日韩一卡二卡三卡 | 欧美××××黑人××性爽| 欧美日韩国产电影| 捆绑凌虐一区二区三区| 欧美r级电影| 91精品国产亚洲| 国产乱码一区二区| 久久久久久久一区| 国产女教师bbwbbwbbw| 吞精囗交69激情欧美| 日韩欧美国产三级| 国产99在线 | 亚洲| 精品白丝av| 国产欧美在线看| 你懂得在线网址| 一区二区不卡在线播放| 亚洲国产精品三区| 亚洲免费毛片| 欧美激情亚洲国产| 国产精品国产av| 久久久无码精品亚洲日韩按摩| 色哟哟免费网站| 九七电影院97理论片久久tvb| 亚洲激情在线观看| 国产少妇在线观看| 麻豆精品国产传媒mv男同 | 日本中文字幕精品| 日韩在线欧美| 国产精品999999| 亚洲 欧美 激情 另类| 一区二区三区在线观看视频| 国产91色在线观看| 精品欧美久久| 国产精品福利网站| 男同在线观看| 色综合久久综合网欧美综合网| www男人天堂| 黄色另类av| 91九色在线免费视频| mm1313亚洲国产精品美女| 欧美三级三级三级| 亚洲第一视频区| 青青草国产成人av片免费| 欧美视频观看一区| jizz内谢中国亚洲jizz| 国产视频在线观看一区二区| 亚洲男人第一av| 久久日韩粉嫩一区二区三区 | 第一福利在线视频| 337p日本欧洲亚洲大胆精品| 久久国产在线视频| 懂色av一区二区三区免费看| 国产91在线亚洲| 97一区二区国产好的精华液| 久久69精品久久久久久国产越南| www.成人免费视频| 亚洲成人综合视频| www.日本高清| 日日骚欧美日韩| 三区精品视频| 欧美美女被草| 九九热精品视频在线播放| 亚洲精品久久久蜜桃动漫| 一级精品视频在线观看宜春院| 岛国精品一区二区三区| 今天的高清视频免费播放成人| 国产一区二区不卡视频在线观看| 天堂√中文最新版在线| 亚洲男人第一网站| 中文字幕av在线免费观看| 国产精品久久久久三级| 99中文字幕在线| 国语精品一区| 久久大片网站| 777午夜精品电影免费看| 色偷偷88888欧美精品久久久 | 在线视频不卡一区二区三区| 国产高清日韩| 国内精品久久久久久久| 欧美白人做受xxxx视频| 欧美男女性生活在线直播观看| 91麻豆免费视频网站| 成人avav影音| 色悠悠久久综合网| 亚洲婷婷在线| 日本a级片久久久| 欧美日韩黄色| 日韩av免费在线看| 成人毛片av在线| 日韩精品在线免费观看视频| 中文字幕在线网站| 午夜欧美大尺度福利影院在线看 | 色偷偷在线观看| 色婷婷精品久久二区二区蜜臀av| 2014亚洲天堂| 99久久久久久| 色91精品久久久久久久久| 一区二区国产在线观看| 亚洲欧美日韩精品综合在线观看| 中文字幕一区图| 国产精品白嫩美女在线观看| 久久亚洲资源| 日韩亚洲第一页| 亚洲色图欧美视频| 欧美一区二区三区系列电影| 精品国产xxx| 亚洲一区二区三区四区在线免费观看 | 91尤物国产福利在线观看| 亚洲va天堂va国产va久| 任我爽在线视频| 久久午夜色播影院免费高清| 99国产精品免费视频| 免费观看成人av| 97av视频在线观看| 午夜精品国产| 一区二区三区四区不卡| 九色成人国产蝌蚪91| 国产欧美日韩一区二区三区| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 不卡的日韩av| 欧美日本在线看| 91丨九色丨海角社区| 精品久久久久久久久久久久久| 日韩欧美中文字幕视频| 国产精品夫妻自拍| 午夜精产品一区二区在线观看的| 成人av网站免费| 丰满人妻一区二区三区大胸| 九色综合狠狠综合久久| 日本新janpanese乱熟| 亚洲综合社区| 鲁一鲁一鲁一鲁一澡| 激情欧美一区二区三区| 黄色一级片黄色| 午夜国产精品视频免费体验区| 亚洲午夜激情| 97精品视频| 综合久久国产| 欧美国产一区二区三区激情无套| 视频一区二区三| 欧美亚洲在线日韩| 婷婷四月色综合| 欧美中文一区二区| 午夜精品一区二区在线观看| 成人3d精品动漫精品一二三| 欧美日韩最好看的视频| 精品日韩在线| 亚洲a∨一区二区三区| 成人毛片在线| 中文字幕一区二区三区有限公司 | 日韩综合网站| 一本久久a久久精品vr综合| 色综合久久网| 最新中文字幕久久| 欧美在线三级| 日本一本中文字幕| 国产美女一区| 男人亚洲天堂网| 日本va欧美va精品发布| 伊人影院综合在线| 国内久久精品视频| 国产调教打屁股xxxx网站| 成人一区二区视频| 欧洲一级黄色片| 国产亚洲欧洲997久久综合| 又嫩又硬又黄又爽的视频| 国产精品久久久99| 老女人性淫交视频| 精品久久久久久久中文字幕| 手机在线看片1024| 欧美日韩国产综合一区二区三区| 国产乱淫av片免费| 精品国精品国产| 日av在线播放| 色偷偷综合社区| 人人超在线公开视频| 97视频com| 日本美女久久| 成人免费91在线看| 国产调教一区二区三区| 日本丰满大乳奶| 国产欧美日韩一区二区三区在线| 丝袜制服一区二区三区| 国内不卡的二区三区中文字幕 | 国产乱淫片视频| 亚洲第一区第二区| 高清av在线| 久久91亚洲人成电影网站| 日韩激情电影免费看| 国产精品久久久久免费a∨| 这里视频有精品| 日本一区二区三区四区高清视频| 综合久久一区| 丁香啪啪综合成人亚洲| 国模娜娜一区二区三区| 三级网站在线免费观看| 亚洲人成伊人成综合网小说| 国产一级精品视频| 337p亚洲精品色噜噜| 牛牛澡牛牛爽一区二区| 久久成人18免费网站| 芒果视频成人app| 国产精品国产三级国产专区53 | mm131午夜| 国产模特精品视频久久久久| 久久久久久综合网| 久久午夜免费电影| 久久精品国产亚洲AV无码麻豆| 欧美在线不卡一区| 无码国产精品一区二区色情男同 | 欧美一区二区三区爽爽爽| 色综合天天天天做夜夜夜夜做| 成人黄色在线观看视频| 中文日韩电影网站| 少妇视频一区| 懂色中文一区二区三区在线视频| 日本久久综合| 人妻熟女一二三区夜夜爱| 福利一区二区在线| 麻豆视频在线免费看| 欧美日韩国产一二三| 蜜桃免费在线| 7777免费精品视频| 色妞ww精品视频7777| 色香蕉在线观看| 久久国产精品99精品国产 | 亚洲欧美日韩国产一区二区三区 | 欧美一区少妇| 亚洲国产片色| 97中文字幕在线观看| 亚洲欧美激情在线| 天天色图综合网| 中文字幕日韩av资源站| 最新中文字幕av| 疯狂蹂躏欧美一区二区精品| 亚洲第一精品网站| 久久999免费视频| www.久久草.com| 在线视频不卡一区二区三区| 免费在线成人网| 网站永久看片免费| 欧美人体做爰大胆视频| 香蕉视频在线免费看| 国产精品视频一区二区高潮| 欧美综合在线视频观看| 手机视频在线观看| 国产精品久久久久久亚洲毛片| 国产午夜无码视频在线观看| 亚洲色图美腿丝袜| 亚洲mmav| 亚洲日本一区二区三区在线不卡| 蜜桃视频一区二区| www.xx日本| 4438x成人网最大色成网站| www在线免费观看视频| 91手机在线观看| 伊人天天综合| 久久精品成人av| 欧美天天综合网| 国产秀色在线www免费观看| 亚洲xxxxx性| 亚洲婷婷免费| 亚洲av无码一区二区二三区| 91福利视频在线| 日韩精品黄色| 97神马电影| 午夜一区在线| 国产一区在线观看免费| 欧美一级二级三级蜜桃| 91www在线| 欧美视频1区| 国产一区二区精品久久| 久久久久亚洲av成人片| 亚洲欧美日韩精品久久奇米色影视 | 日本一区二区三区精品| 永久免费精品影视网站| 秋霞一区二区| 欧美视频免费播放| 中文字幕亚洲欧美在线不卡| 囯产精品一品二区三区| 国产精品xxx视频| 亚洲色图网站| 久久久久麻豆v国产精华液好用吗| 色欲综合视频天天天| 成人免费看片| 麻豆精品视频| 激情久久久久久久久久久久久久久久| 麻豆国产尤物av尤物在线观看| 亚洲精品国产综合久久| 青草综合视频| 亚洲美免无码中文字幕在线| 中文字幕不卡在线| 女人18毛片水真多18精品| 国产盗摄xxxx视频xxx69| 欧美1区3d| 91激情视频在线观看| 日韩一区二区中文字幕| 香蕉视频亚洲一级| 日韩小视频网站| 国产精品第一页第二页第三页| 天天色天天操天天射|