亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

從零打造CLI-Anything:CLI工具模板化與自動生成實踐

從零打造CLI-Anything:CLI工具模板化與自動生成實踐 在命令行工具這個領(lǐng)域摸爬滾打了這么多年我一直有一個執(zhí)念能不能把寫一個CLI工具這件事本身也給工程化、模板化。正好最近在整理自己的腳手架方案命名就叫 CLI-Anything目標(biāo)是給我一個命令名和幾個核心參數(shù)剩下的代碼結(jié)構(gòu)、參數(shù)解析、幫助文檔、日志輸出、安裝打包全自動生成。這篇文章就把這套方案從思路到落地完整拆一遍包括我踩過的坑和最終的推薦配置如果你也經(jīng)常寫小工具或者想讓團(tuán)隊統(tǒng)一CLI開發(fā)規(guī)范這篇文章應(yīng)該能給你不少直接能抄的東西。1. 項目整體設(shè)計與需求拆解1.1 為什么還需要一個CLI生成器很多人第一反應(yīng)是寫命令行為什么不用 Commander、Click、Argparse 這些現(xiàn)成庫我承認(rèn)這些庫確實把參數(shù)解析、子命令分發(fā)這些問題解決得非常好但解決參數(shù)解析和幫你把整個項目骨架搭好是兩碼事。一個真正要交付給別人用的CLI工具除了解析參數(shù)之外至少還牽扯到工程初始化、配置文件讀寫、日志分級、錯誤處理、單元測試、打包分發(fā)、自動補(bǔ)全腳本、README文檔維護(hù)。這些工作每次寫新工具都要重新做一遍而且不同工具之間風(fēng)格還不統(tǒng)一。CLI-Anything 的思路很簡單它不是一個庫而是一個腳手架生成器 工程約定的組合。你只需要回答幾個交互式問題比如工具叫什么名字、想用什么語言實現(xiàn)、需要哪些子命令、要不要支持配置文件它就能在一秒鐘之內(nèi)拉出一個完整的、可以直接開發(fā)甚至直接發(fā)布的 CLI 項目骨架。后面你再往里面填業(yè)務(wù)邏輯就行。這解決了兩類痛點。對個人開發(fā)者來說省掉了大量重復(fù)的初始化工作昨天寫一個日志分析工具今天寫一個代碼格式化工具項目結(jié)構(gòu)完全一致不用重新適應(yīng)對團(tuán)隊來說統(tǒng)一的骨架意味著統(tǒng)一的代碼風(fēng)格、統(tǒng)一的文檔模板、統(tǒng)一的發(fā)布流程新成員上手成本大幅降低。我自己最早寫這個方案的動機(jī)就是受不了組里每個工具長得都不一樣。1.2 核心需求梳理把需求拆開來看CLI-Anything 要解決的核心問題其實可以歸納成下面幾條第一交互引導(dǎo)。用戶不應(yīng)該去翻文檔記參數(shù)而是在終端里通過清晰的問答確認(rèn)需求。類似npx create-react-app那種交互體驗選語言、選框架、選功能模塊。第二模板渲染。根據(jù)用戶的選項把預(yù)先設(shè)計好的項目模板渲染成目標(biāo)目錄。這里要注意的是模板不是簡單復(fù)制必須支持動態(tài)插入變量比如項目名、包名、類名前綴這些。第三開箱即用的工程化能力。生成出來的項目必須自帶日志、配置管理、測試框架、Lint 規(guī)則、CI 配置不能是空殼子。用戶拿到就能寫業(yè)務(wù)寫完就能跑測試跑完就能發(fā)版。第四跨平臺兼容。生成的工具必須同時支持 Windows CMD、PowerShell、macOS 和 Linux 主流的 Bash/Zsh甚至要考慮 Git Bash、WSL 這些特殊環(huán)境。第五可擴(kuò)展的模板倉庫。用戶能在自己的項目里維護(hù)額外的模板CLI-Anything 支持加載本地或者遠(yuǎn)程的模板源。順著這條線往下想你會發(fā)現(xiàn)自己需要的不是一行hello world而是一整個體系。好在現(xiàn)在的生態(tài)已經(jīng)很成熟了真正要自己手寫的代碼并沒有想象中那么多。2. 技術(shù)選型的邏輯與核心原理2.1 運行時與語言為什么優(yōu)先 Node.js語言選型是整個方案的基石。CLI-Anything 的模板支持多語言輸出也就是它可以用 JavaScript、Python、Go 這些不同語言去生成目標(biāo)CLI工具但腳手架本身我建議用 Node.js 來實現(xiàn)。理由是它在這三個層面都有優(yōu)勢交互能力prompts或inquirer這兩套庫把命令行交互做到了極致單選框、多選框、自動補(bǔ)全、模糊匹配都是現(xiàn)成的Python 那邊雖然有questionary但成熟度和生態(tài)還是差一些。模板生態(tài)Node 生態(tài)有非常成熟的模板引擎比如ejs既可以處理純文本模板又不會像 Jinja2 那樣在復(fù)雜邏輯上繞來繞去。分發(fā)簡單用 Node 寫的 CLI 可以直接通過npm install -g分發(fā)配合pkg還能打成單文件二進(jìn)制甚至能跨平臺交叉編譯。加上oclif或者commander這層殼命令的解析和幫助信息自動就體面了。有人會問為什么不用 GoGo 的單二進(jìn)制分發(fā)確實香開發(fā)效率也很高但交互式問答和模板渲染這塊生態(tài)還是不如 Node 豐富。更重要的是CLI-Anything 的定位是快速生成多語言項目腳手架本身的開發(fā)速度和迭代效率權(quán)重更高所以 Node 反而更適合。2.2 參數(shù)解析與命令組織Commander 是底線無論生成的工具最終用了什么語言腳手架自身以及推薦的模板都必須有嚴(yán)謹(jǐn)?shù)膮?shù)解析層。我在 CLI-Anything 的模板體系里默認(rèn)使用 Commander用它的原因有三個子命令嵌套tool config set key value這種三層甚至四層命令結(jié)構(gòu)Commander 原生支持而且每個子命令可以單獨定義參數(shù)。自動生成幫助根據(jù)命令定義自動生成--help輸出格式專業(yè)且符合主流習(xí)慣。這個對工具的使用體驗影響極大很多人低估了幫助文檔的重要性。Option 的類型處理--port number會自動幫你轉(zhuǎn)成數(shù)字--force自動變成布爾值--config path還能直接搭配fs.existsSync做存在性校驗。如果你選擇用 Python 模板那對應(yīng)位置我推薦 Click理由也類似裝飾器風(fēng)格接近 所見即所得參數(shù)校驗和能力擴(kuò)展都很順手。但核心思路一致解析層和業(yè)務(wù)邏輯必須分離。2.3 模板引擎與文件渲染機(jī)制模板引擎這塊我最終定的是 EJS。為什么不用 Mustache因為 Mustache 的無邏輯原則在簡單場景下很優(yōu)雅但一旦需要根據(jù)選項去決定渲染哪些文件生搬硬套就會出現(xiàn)各種 hack。EJS 允許在模板里寫少量邏輯判斷比如% if (withDocker) { % FROM node:20-alpine ... % } %這樣同一套模板就能按需生成不同的文件組合。要注意的是模板里寫邏輯必須克制只允許做條件判斷和循環(huán)絕對不允許出現(xiàn)復(fù)雜計算的邏輯否則模板會變成一團(tuán)亂麻。文件渲染這塊還有一個關(guān)鍵點點文件的處理。.gitignore、.npmrc、.env.example這類以點開頭的文件在模板目錄里通常直接寫成.gitignore.ejs渲染的時候把.ejs后綴去掉再確保名字以.開頭。這里容易踩坑如果你在 Windows 上開發(fā)文件管理器對點文件的支持很糟但模板系統(tǒng)內(nèi)部不受這個影響。2.4 交互設(shè)計怎么問問題也很講究交互式問答不是把問題一股腦拋給用戶就完事了順序和默認(rèn)值都會影響體驗。CLI-Anything 的經(jīng)驗是先問你要生成什么語言的工程這是決定后續(xù)問題集合的關(guān)鍵分支。再問工具的名字是什么這個名字要同時用于包名、命令名和目錄名所以要做合法性校驗不允許大寫字母、不允許以數(shù)字開頭、不允許空格。接著問功能模塊勾選比如是否包含配置文件支持是否包含日志系統(tǒng)是否內(nèi)置自動更新這里是多選默認(rèn)全選用戶可以直接回車跳過。最后確認(rèn)一次總覽信息展示即將生成的目錄結(jié)構(gòu)和關(guān)鍵配置確認(rèn)后開始渲染。另外要提供一個--non-interactive模式也就是所有參數(shù)都通過命令行傳入便于在 CI 環(huán)境里自動化生成項目。這個能力看起來不起眼但實際應(yīng)用價值很高很多開發(fā)者用腳手架搭項目就是在自動化流程里完成的。3. 實操過程從初始化到完整CLI工具3.1 搭建腳手架本體整個項目結(jié)構(gòu)分三層commands、generators、templates。commands負(fù)責(zé)處理用戶輸入的命令比如cli-anything create my-toolgenerators負(fù)責(zé)編排渲染邏輯比如什么時候問什么問題、調(diào)用哪個模板引擎、如何計算目標(biāo)路徑templates就是一堆 EJS 模板文件。第一版腳手架的核心命令就這么幾句話cli-anything create project-name [--language node|python|go] [--template basic|advanced] [--force] cli-anything list # 列出所有可用模板 cli-anything init # 在當(dāng)前目錄生成配置文件 cli-anything doctor # 檢查本機(jī)環(huán)境是否滿足模板要求create命令先解析參數(shù)如果--language沒傳就進(jìn)入交互式問答然后把回答收集成一個 config 對象交給 Generator。Generator 內(nèi)部根據(jù) language 和 template 兩個字段定位到templates/node/basic/目錄用匹配的規(guī)則遍歷所有文件逐個渲染再寫入目標(biāo)位置。3.2 生成一個 Node.js 版 CLI 工具假設(shè)我們要生成一個名為my-cli的工具選擇 Node.js 和基礎(chǔ)模板生成出來的目錄結(jié)構(gòu)大概是這樣的my-cli/ ├── bin/ │ └── index.js ├── src/ │ ├── commands/ │ │ ├── init.js │ │ └── list.js │ ├── utils/ │ │ ├── logger.js │ │ └── config.js │ ├── index.js ├── test/ │ └── commands.test.js ├── .github/ │ └── workflows/ │ └── ci.yml ├── .gitignore ├── package.json ├── README.md └── LICENSEpackage.json是最關(guān)鍵的模板文件。它需要在渲染時動態(tài)設(shè)置name、version、description、bin字段然后通過ejs插入用戶配置。模板里的關(guān)鍵部分長這樣{ name: % projectName %, version: 0.1.0, description: % description %, bin: { % commandName %: bin/index.js }, scripts: { test: node --test, lint: eslint ., prepublishOnly: npm run test npm run lint }, dependencies: { commander: ^11.0.0 } }bin/index.js里就是標(biāo)準(zhǔn)的 Commander 入口#!/usr/bin/env node const { Command } require(commander); const program new Command(); program .name(% commandName %) .description(% description %) .version(% version %); program .command(init) .description(initialize config file) .option(-f, --force, overwrite existing config) .action((options) { // 具體業(yè)務(wù)邏輯 }); program.parse(process.argv);這里有一個關(guān)鍵技巧shebang 行必須是文件的第一行前面不能有任何內(nèi)容包括 BOM 頭。如果你在 Windows 上用某些編輯器保存了帶 BOM 的 UTF-8 文件bin/index.js執(zhí)行時會直接報 No such file or directory因為系統(tǒng)試圖把一個不可見字符當(dāng)作解釋器路徑。我建議所有模板文件保存時統(tǒng)一使用 UTF-8 無 BOM。3.3 初始化 Git 倉庫與配置文件腳手架在渲染完文件之后還會做幾件收尾工作自動執(zhí)行g(shù)it init、根據(jù)模板里預(yù)設(shè)的.gitignore規(guī)則做一次git status檢查、嘗試安裝依賴。這個嘗試很微妙因為用戶可能根本不想現(xiàn)在就npm install所以默認(rèn)策略是只生成命令提示把決定權(quán)交給用戶只有在--install參數(shù)被顯式傳入時才真的執(zhí)行安裝。配置文件這塊生成出來的工具默認(rèn)支持三層配置合并默認(rèn)值 用戶配置文件 環(huán)境變量 命令行參數(shù)。這個優(yōu)先級順序非常重要。我在最初設(shè)計時把環(huán)境變量和命令行參數(shù)的優(yōu)先級放反了結(jié)果生產(chǎn)環(huán)境里出現(xiàn)過一次明明命令行傳了正確參數(shù)卻被環(huán)境變量里的舊值覆蓋的事故。自那以后這個優(yōu)先級順序就成了模板里的固定約定沒有特殊情況不允許改動。具體到代碼實現(xiàn)config.js大概是這樣的function loadConfig(overrides {}) { const defaults { host: 127.0.0.1, port: 3000 }; const fileConfig readConfigFile(); // 讀取用戶配置文件 const envConfig { host: process.env.MY_CLI_HOST, port: process.env.MY_CLI_PORT ? Number(process.env.MY_CLI_PORT) : undefined }; return { ...defaults, ...fileConfig, ...omitUndefined(envConfig), ...overrides }; }這里omitUndefined是我自己加的因為process.env.XXX在變量不存在時返回undefined直接...envConfig會把默認(rèn)值覆蓋掉。教訓(xùn)就是環(huán)境變量的合并要格外小心 undefined 語義你要區(qū)分沒設(shè)置和設(shè)置為空字符串。3.4 日志系統(tǒng)與錯誤處理一個CLI工具如果出錯時只知道打印一行紅色文字然后退出那不是一個合格的工程產(chǎn)品。CLI-Anything 的模板里內(nèi)置了一套分級日志系統(tǒng)debug、info、warn、error四種級別。開發(fā)調(diào)試時通過--verbose開啟 debug 輸出默認(rèn)情況下只展示 info 和更高級別的信息。錯誤處理方面有幾個約定業(yè)務(wù)錯誤比如配置文件不存在、網(wǎng)絡(luò)請求失敗不打印堆棧只打印友好提示并給出修復(fù)建議。參數(shù)錯誤Commander 的默認(rèn)行為是打印幫助信息并退出但我覺得默認(rèn)幫助信息不夠友好所以模板里會重寫這個過程錯誤類型不同展示的信息也不同。未預(yù)期錯誤這類錯誤一定要打印堆棧而且還要附帶一個包含工具版本號和 Node 版本號的診斷信息方便用戶提交 issue 時直接復(fù)制。還有退出的狀態(tài)碼也需要留心。成功的命令退出碼是 0業(yè)務(wù)錯誤是 1而參數(shù)錯誤應(yīng)該用 2。很多腳本科自動化時會對退出碼做判斷狀態(tài)碼混亂會讓集成工作非常痛苦。3.5 打包與分發(fā)pkg 和自動補(bǔ)全CLI-Anything 支持的 Node 模板里預(yù)置了兩個高級能力打包成單文件二進(jìn)制和生成 shell 自動補(bǔ)全腳本。單文件二進(jìn)制用pkg實現(xiàn)配置在package.json里pkg: { targets: [node18-linux-x64, node18-macos-x64, node18-win-x64], outputPath: dist }自動補(bǔ)全腳本這邊Commander 原生支持生成補(bǔ)全只需要在工具里加一個completion命令my-cli completion bash # 生成 bash 補(bǔ)全 my-cli completion zsh # 生成 zsh 補(bǔ)全生成的腳本需要讓用戶source進(jìn)去但更專業(yè)的做法是引導(dǎo)用戶寫進(jìn)自己的.bashrc或.zshrc。模板里的 README 都按操作系統(tǒng)分好了章節(jié)照著復(fù)制粘貼即可。4. 實踐中的常見問題與排查速查4.1 參數(shù)沖突與命名陷阱最典型的問題之一為子命令定義了一個-f, --force同時又在大命令上定義了-f, --format這時my-cli -f到底是誰的Commander 處理這個的方式是就近匹配子命令優(yōu)先但用戶在直覺上會認(rèn)為是全局的。這是一個非常容易引發(fā)真實事故的設(shè)計陷阱。我的建議是所有全局參數(shù)放在根命令上并確保名字在子命令中不重復(fù)或者干脆放棄全局參數(shù)每個子命令單獨定義。如果你非要保留全局 option在子命令執(zhí)行時通過program.opts()和command.opts()分開取并明確在文檔里寫清楚。4.2 Windows 環(huán)境下腳本無法執(zhí)行生成出來的工具的bin文件在 Linux 和 macOS 上可以直接運行但在 Windows 上如果你的package.json里沒有用到.cmd橋接會遇到執(zhí)行策略導(dǎo)致的失敗。解決路徑是npm 在安裝全局包時會自動生成.cmd包裝但前提是你的 bin 路徑不能指向一個目錄而必須是文件。另外一個很隱蔽的是換行符問題。模板文件在 Windows 上被檢出為 CRLF 后shebang 會變成#!/usr/bin/env node\r在 Linux 上就會報錯說找不到/usr/bin/env的變體。解決辦法是.gitattributes里強(qiáng)制規(guī)定文本文件的換行格式或者打包發(fā)布時統(tǒng)一用 LF。GitHub Actions 里跑測試時最容易暴露這個問題。4.3 npm 包體積膨脹CLI 工具的依賴樹往往會出乎意料地大。你以為只裝了commander一個包但npm ls一看連帶依賴可能超過數(shù)百個模塊。這帶來的直接問題是安裝慢、磁盤占用大如果做單文件二進(jìn)制打包還容易觸發(fā) pkg 的解析錯誤因為它需要靜態(tài)分析每個依賴的入口文件。一個提升體驗的做法是盡量選擇零依賴或者依賴較少的庫。比如日志輸出完全可以不引入chalk用 ANSI 轉(zhuǎn)義序列幾行代碼就搞定了雖然便利性差一些但響應(yīng)速度和體積都是肉眼可見的好處。如果你確實要用顏色庫推薦只在本地開發(fā)時啟用發(fā)布版的工具不要強(qiáng)制依賴。4.4 模板渲染精度問題EJS 在渲染代碼文件的時候可能會因為模板中的%或%代碼痕跡沒有正確轉(zhuǎn)義而產(chǎn)生錯位。比如你要生成一個 Vue 模板文件而 Vue 的模板語法里也有%相關(guān)的表達(dá)式這就沖突了。解決方式是把 EJS 的分隔符改成其他組合比如[[ ]]。這個設(shè)置在引擎初始化時一次性搞定const ejs require(ejs); ejs.delimiter ?; // 改用 ? ... ? // 或者 ejs.openDelimiter [, ejs.closeDelimiter ];更穩(wěn)妥的策略是模板文件不直接包含目標(biāo)框架的模板語法遇到這種情況先在代碼里用Raw String保存再通過JSON.stringify轉(zhuǎn)義后注入。4.5 測試覆蓋的盲區(qū)CLI 工具的測試和普通 Web 項目差別很大。你很難用jest去 mock process.argv因為每個子命令執(zhí)行后都會調(diào)用process.exit。推薦的做法是把解析參數(shù)和執(zhí)行業(yè)務(wù)邏輯徹底分離用依賴注入的方式組織代碼// 可測試部分 async function run(config) { /* 純邏輯 */ } // 入口部分 program.action((options) { const config loadConfig(options); run(config).catch(handleError); });這樣單元測試只需要大量測試run函數(shù)和各種配置組合而入口部分留給集成測試去覆蓋。模板里默認(rèn)帶的就是這種結(jié)構(gòu)這個習(xí)慣我一直沿用到了所有項目里確實能省掉很多和進(jìn)程生命周期糾纏的測試煩惱。4.6 常見問題速查表癥狀可能原因快速排查手段命令輸完了沒反應(yīng)參數(shù)解析器沒有正確掛載或者 action 沒定義執(zhí)行my-cli --help看子命令是否列出提示EACCES權(quán)限錯誤全局安裝目錄沒有寫權(quán)限用sudo npm install -g或者配置 npm 全局目錄配置文件改了不生效配置文件路徑解析錯誤或者環(huán)境變量覆蓋了執(zhí)行my-cli config get看當(dāng)前實際值中文字符亂碼終端編碼和生成文件的編碼不一致在工具入口強(qiáng)制process.stdout.write用 UTF-8--verbose不輸出debug日志日志級別在配置解析之前就被寫死了在日志初始化代碼里重新讀取參數(shù)設(shè)置級別二進(jìn)制包在macOS上被Quarantine攔截未簽名應(yīng)用被系統(tǒng)隔離執(zhí)行xattr -dr com.apple.quarantine file自動補(bǔ)全找不到命令補(bǔ)全腳本沒有重新生成命令名變更后忘記刷新運行my-cli completion bash /usr/local/etc/bash_completion.d/my-cli這個表不是完整手冊但它覆蓋了我自己實際項目中踩過的八成問題。遇到新問題的時候建議先把工具自身帶的--debug輸出完整復(fù)制一份再對照排查基本能定位到具體模塊。5. 實操心得幾個值得堅持的工程習(xí)慣5.1 每個工具都要有干跑模式CLI-Anything 生成的每個項目都內(nèi)置了一個--dry-run選項。它的作用是把命令執(zhí)行后會產(chǎn)生的文件變更、配置寫入、網(wǎng)絡(luò)請求全部模擬輸出一遍但不真正執(zhí)行。這個習(xí)慣源于一次事故我曾經(jīng)在生產(chǎn)環(huán)境誤執(zhí)行了一個清理命令命令行參數(shù)漏傳了--force校驗直接刪掉了一部分緩存目錄。自那以后我給所有CLI工具都加了干跑模式并且約定線上危險操作必須先干跑再加--yes確認(rèn)。干跑模式的實現(xiàn)并不復(fù)雜核心是把副作用操作封裝成隊列在干跑模式下只打印隊列內(nèi)容不執(zhí)行。模板里預(yù)置了一個executor.js模塊專門管理這件事后面所有工具都能復(fù)用。5.2 配置項的可發(fā)現(xiàn)性設(shè)計一個好的 CLI 工具不只是能用還要讓用戶能自己摸索出全部能力。CLI-Anything 的模板里my-cli config list會把所有配置項連同默認(rèn)值一起列出來my-cli config explain key會打印該項的完整文檔。這個設(shè)計讓用戶不再需要頻繁翻 README工具的自主性明顯增強(qiáng)。如果你開發(fā)的工具配置項非常多強(qiáng)烈建議設(shè)計這個機(jī)制因為絕大多數(shù)用戶不會主動去看文檔。5.3 模板的版本管理與演進(jìn)模板本身也需要版本管理不能永遠(yuǎn)停留在第一版。CLI-Anything 的模板目錄里有一個meta.json記錄了模板版本、最低運行時版本、適用平臺等信息。升級到新模板時腳手架比較當(dāng)前版本和目標(biāo)版本的差異讓用戶選擇是強(qiáng)制升級還是保留本地修改。這里面有個重要的細(xì)節(jié)用戶在生成之后可能修改過模板文件直接覆蓋會毀掉他的改動。所以標(biāo)記好哪些文件是生成后可自由修改的比如業(yè)務(wù)代碼哪些是升級時會覆蓋的比如構(gòu)建配置這一點必須在文檔里寫清楚。我在第一版里沒做區(qū)分結(jié)果一個朋友升級模板后他自定義的命令邏輯全被覆蓋了那個場面相當(dāng)尷尬。5.4 讓工具自己診斷環(huán)境CLI-Anything 里有個doctor命令它檢測當(dāng)前機(jī)器的 Node 版本、npm 源配置、全局目錄權(quán)限、是否安裝 git、是否配置了 SSH key 等環(huán)境信息然后輸出一張診斷表標(biāo)記出哪些項可能帶來問題。這個設(shè)計也被模板繼承了生成的每個工具都有my-cli doctor它比讓用戶手動貼一堆報錯信息要高效得多。實際的開發(fā)里很多環(huán)境問題找過來的時候原因大同小異無非是版本太低、路徑不對、權(quán)限不足。doctor命令把檢查項集中起來讓用戶在反饋 issue 時順手貼一份診斷結(jié)果效率翻倍。6. 后續(xù)還能怎么擴(kuò)展這套方案的可擴(kuò)展面其實比我一開始預(yù)想的要大。目前已經(jīng)有人在模板庫里加了 Rust 和 C# 的 CLI 模板還有人把pipx和brew的分發(fā)配置也塞進(jìn)了模板里這樣一來生成的工具幾乎適配所有主流的安裝渠道。我自己在規(guī)劃的下一個能力是Docker 內(nèi)開發(fā)環(huán)境模板也就是生成的工具默認(rèn)帶一個devcontainer.json配合 GitHub Codespaces 直接用。這個對團(tuán)隊協(xié)作的吸引力挺大的因為新成員再也不用花半天時間搭本地開發(fā)環(huán)境了。另外還有一個想法是把模板倉庫做成遠(yuǎn)程加載模式用戶直接把--template gitgithub.com:xxx/xxx.git傳進(jìn)來工具自動拉取模板實際項目里會發(fā)現(xiàn)這比本地維護(hù)一堆模板靈活太多。我個人在實際操作中的體會是一個真正好用的腳手架它最大的成功不是讓用戶少敲了多少代碼而是讓用戶建立了一套穩(wěn)定的工程習(xí)慣。CLI-Anything 本身也在做同樣的事你第一次用它生成工具時會覺得哇挺快的但真正value在于半年后你再看自己寫的代碼會發(fā)現(xiàn)它還是規(guī)規(guī)矩矩的沒有因為急著上線就變得一團(tuán)糟。如果你也在做CLI工具相關(guān)的項目不妨把這篇里的幾個設(shè)計原樣抄過去你會發(fā)現(xiàn)那些曾經(jīng)讓運維和同事抓狂的細(xì)節(jié)其實早就有解了。如果你在使用這套方案時踩到其他有意思的坑或者想到了更好的設(shè)計思路歡迎隨時交流畢竟命令行工具這種小東西打磨起來是真有意思。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色噜噜狠狠色综无码久久合欧美| 久久欧洲| 大象AV在线| 97色色色综合网站| 丁香婷婷久久| 亚洲一卡2卡3卡4卡乱码网站 | 404操逼福利视频| 久超碰这里只有精品| 97午夜剧场日韩| 亚洲色图日韩精品| 欧美黄色手机在线观看| 日本ZZ高免费A级视频| 97亚洲综合电影| 夜夜影视四色| 人妻中文字幕精品无码 | 亚洲欧洲精品成人| 五月婷婷色| 思思热久久成人| 97操| 久热这里| 欧美日韩亚洲五月天婷婷| 综合色播| 人妻人人操| 在线无码视频| 亚洲国产精品V?在线播放| 久草成人影片| 午夜九九| 日本最新1区2区3区| 欧美日韩资源在线| 亚洲91色在线| 91真人天天在线| 欧美天天射| 我要看免费韩日黄片| 欧美组图日韩亚洲中文字幕| 搡老女人老熟女91老熟女综合网| 久热网| 精品中文日韩字幕视频| 丝袜视频一区二区在线播放国产中文| 天天操女人| 国产麻豆一级精品视频| 欧洲色| 亚洲精品美女久久久久久久久| 免费国产电影一区二区| 2020中文在线一区二区三区| 五月天久久综合网| 国语国产操逼伊人AV网| 亚洲天堂AV在线播放| 欧美日韩啪啪电影| 久久这里是精品| 亚洲色图欧美色图另类图片| 欧美 亚洲 第一页| 色综合av综合久久| 午夜福利在线合集| 亚洲AV成人在线| aaaa黄片| 在线观看精品国产免费| 国产18精品亚洲精品| 亚洲日韩美国人妻| 黄片www.| 精品人妻一区二区免费蜜桃| 青青草视频久久久久| 99久久无色码| 中文字幕综合人妻| 欧美色97| 久久精品 六十路 熟女 欧美| 狠狠色五月亚洲91| 亚州,欧美在线| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 97操97色| 清清草影| 97在线观| 国产极品精品美女视频| 在线观看亚洲专区| 色五月婷婷色| www.99色| 东京热熟女亚洲视频网站| 久久夜精品一区二区三区| 免看60秒涩涩视频| 欧美亚洲中文| 亚洲成人一区二区精品| 欧美 亚洲 制服 精品| 久久动漫精品视频这里只有精品| 国产AV天美传媒一区二区三区| 精品无码久久| 国产性爱在线视频一区二区| 96AV精品| 欧洲精品一级二级精品综合视频综合| 为用户提供免费看黄网址在线观看| 啪啪AV导航| 激情四射五月天| 日本高清电影欧美色图| 97视频新免费| 国产精品永久免费10000| 国产精品青草综合久久| wwe 天天干.com| 精品然女一区二区| 欧美综合网A| 欧美中文字幕日韩在线| 91在线限制级| 男人久久天堂| 日韩有码免费视频| 久久9精品网站| 99人妻| 无码最新| 激情小说五月天| 九九九九九用不成了| 综合欧美色图| 性色av蜜臀av色欲aV| 99无码精品| 国产成人主播| 久久天天艹| 东京热亚洲一区二区| 内射卯月麻衣| 国产男女边吃边摸视频网站| 97资源制服丝袜| 天操天操夜操夜月月年年操操| 蜜臀久久99精品久久久| 日韩一级片| 99只有精品| 操逼视频国产无套| 久久免费老司机精品| 日韩99神马视频片| 亚洲成人精品在线一区| 国产suv精品一区二区四区999 | 亚洲超碰在线| 欧美日日人人天天| www.yw尤物| 夜夜嗨一区二区三区三州加勒比| 操逼网免费无码视频| 亚洲青色欧美| 日韩在线一区高清在线| 91AV天堂| 日韩成人综合网| 国产高清在线自在拍69| 亚洲码在线中文在线观看| 日韩AV电影网站| 深喉吞精| 99热9| 91老司机精品| 夜夜操2028| 五月天伊人网| 久久久久国产| 亚洲色 国产 欧美 日韩| 中文字幕一区二区三四五区日日骚| 欧美一二三级精品在线| 欧美亚洲激情一二三| 777AV电影| 亚洲男人天堂视频| 一区二区娱乐网站| 精品传媒在线一区| 青青草精品| 欧美黄色图片| 巨爆乳肉感一区二区三区竹菊影视| 色综合1991| 无码日韩网站| 狠狠91| 黑丝日韩av丝袜av| 亚洲人体视频在线观看| 久草毛片| 2019天天操天天爽天天拍| 国产美女口爆吞精视频| 五毛骚逼极品美女怕怕| 亚洲欲色9532548967一区| 日韩熟女精一区二区三区不卡| 色妹子A V| 日韩中文字幕视频| 快播电影网日韩新片| 男人的天堂亚洲| 97爱| 色香欲综合| 久久av色| 国产原创自拍| 一区二区三区 日韩欧美| 理论久久婷婷网8| 亚洲美女精品| 在线只有精品| 亚洲精品人妻在线| 亚洲图片欧美色图| 十八禁啪啦拍视频无遮挡| 男人的天堂免费| 熟女欧美日韩综合婷婷| 国语人妻精彩刺激| 欧美一级特黄淫片在线观看| 久久69| 日本免费一区二区不卡| 91蜜臀在线久久久久| 超碰国产精品无码| 91在线免费精品视频| 超碰9 7女人 | 在线人人人人人人精品超| 久久久久九九九| 精品9999| 搡老熟女国产1000部| 亚洲AV无码天美传媒一区| 奇米狠999| 国产一区二区成人av在线播放| 97精品人妻一二三四| 91精品人妻一区二区三区蜜桃臀| 蜜乳Av成人片网站| 免费岛国一级片| 91亚洲影视| 超碰免费欧美7| 极品粉嫩一区二区| 亚洲综合激情五月久久| 国产一区二区在线电影| 一区操逼| 色成人Www精品永久观看| dy888午夜老子影视达达兔| 久久亚洲天堂| 91AV国产精品| 加勒比无码毛片| 另类专区加勒比| 国产精品视频播放| 午夜福利在线合集| 国产久9| 春色综合免费| 青青草影视蜜久久| 成人情色综合网| 日本啊啊啊啊啊视频| 天美国产精品| 九九九久千久久激情蜜桃在线看 | 999岛国大片| 五月丁香拍拍激情综合三级| 中文字幕91页| 可以在线观看AV的网站| 大香蕉强奸乱伦| 欧美大香蕉同搞| 成人乱码一区二区三少妇| 永久免费发布性爱网| 人人艹亚洲| 久久久久九九九| 强奸乱伦 亚洲一区| 亚洲国产一级黄色视频| 成人97人人超碰人人| 成全动漫视频观看免费下载| 黑人狂躁日本妞一区二区三区| 久久中文字幕一区不卡| 91精品国产日韩欧美综合| 久久精品店| 无码乱人伦中文视频| 精品性爱无码在线播放| 丝袜 亚洲 偷拍| 啊啊啊啊啊啊啊国| 日韩久久艹| 99久久综合| 久久草视频污视频| 亚洲第一页色网| 91青青草| 日韩不卡毛片Av免费高清| 强奸乱伦大香蕉网| 麻豆天美国美国产AV| 夜夜高潮夜夜爽高清视频一| 色大香蕉97N| 日韩欧美久久婷婷网站| 亚洲天堂男人天堂网| 涩涩涩综合| 色成人Www精品永久观看| 亚洲操逼网| 97人人干| 久久最新视频免费观看| 怡春院久久| 日本中文字幕不卡视频| 精品性爱一区二区| 欧美久久毛片基地| 人妻一区视频| 人妻无码一区二区三区久久99| 九九黄色视频在线观看| 麻豆国产av网| 青青草久草| 狠狠操夜夜| 97超碰jingpin| 超碰在线974| 美国三级日本三级久久99| 99久久99久久免费精品蜜臀| 伊人网综合在线视频| 91久操| 成人熟女视频一区二区三区| 91 偷| 国产又操| 天天日美女的B| 五十路熟女人妻一区二区在线观看| .精品人妻一区二区三| wwwcaobibi| 东京热精品97综合网| 97 色综合| 加勒比久久综合网高清| 国产精品 午夜福利| 青青青草原| 成人a大片在线观看| 女优视频第10页| 人妻内射一区二区在线视频| 成年人网站在线免费观看| 欧美综合区| 东京热av男人的天堂| 黑人猛交| 91狠婷| 日夜精品| 偷拍 精品另类 凸凹了四区| 天天操福利视频综合网站| 自拍偷拍亚洲熟女妇人精品| 97超碰色屌| www.夜夜操| 色香91| 91成人久久| 中文字幕久久精视频久久大全| 亚洲超碰97| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 中文字幕aⅴ在线视频| 欧美黄片视频在线观看免费| 国产精品午夜精品| 中文字幕jul-617人妻熟女| 日韩精品人妻中文字有码在线| 激情小说图片亚洲首页| 蜜桃精久三区| 日本欧美韩国国产在线| 欧美日韩国第一区| 人人操人人操人人人操| 大肉棒导航| 国产家庭乱伦网址| 97国产精品一区| 大香蕉宗合网在线| 福利视频合集| 精品人妻一区二区免费蜜桃| 福利操逼| 国产精品一区在线播放| 思思热在线| 久久久96| 成人精品一区二区三区| 5278欧美一区二区三区| 亚洲男人天堂Av| 欧美97| 婷婷久久综合久| 九九亚洲| 久湿久久| 精品一区二区啪啪啪| 精品无码一区二区三区| 亚洲在钱| 亚洲人成色9999精品久久| 日韩精品字幕| 超碰这里有精品| 色色亚洲| 日本天天操| 九九热精品视频六| 91在线美女| www.91理论| 超碰99在线| 熟妇一区二区三区| 中文字幕123| 欧美一二三| 欧美亚洲涩涩| 欧美亚洲国内自拍| 日韩av在线播放不卡| 超碰在线人人射| 亚洲区限制级| 婷婷久草一区二区三区| 无码高清专| 麻豆久久精品亚洲精品88| 精品网站99999| 日亚韩精品视频二区三| 国产性爱强奸乱伦大全| 色五月大香蕉| 久草网站免费在线观看| 百度百度日本操逼| 98精品国产乱码久久久久久| 久久久久久久久久久久久9999| 一级久久久久久久久久久| 伊人热综合| 久久久久深夜无码| 欧美成人国产精品| 白丝少妇一区二区| 看看小穴| 欧美日韩超碰在线| 久久久中文| 日韩国产不卡在线视频| 精品久久久久久AV无码| 国产99热| 97天天操| 欧美日韩小说| 欧美日韩国产色五月综合在线| 中文有码第五页| 中文字幕在线24| 狠狠干婷婷| 国产成人精品日本视频| 黄色AAAAA欧美| 国产操逼视频在线观看| 隔壁邻居波多野结衣中文字幕| 天堂综合网| 日韩本不卡视频在线观看 | 日韩欧美资源| 无码在线亚洲| 日韩福利综合一区| 中日韩免费看男女操逼大全| 精品对白久久不卡| 亚洲色宗合| 蜜臀99精品国产高清在线观看| 亚洲熟妇白浆无码AV| 九九热精彩视频| 亚洲五区熟女| 97超碰资源网| 亚洲麻豆18发?| 日韩中文9| 超碰色美女| 桑老女人九区| 欧美色狠| 中文字幕日韩精品久久| 国产色综合亚洲色综合吹潮| 成人性爱免费播放| 一级@啪啪视频| 岛国大片在线观看网站入口| aaaa少妇高潮大片| 日韩午夜啪啪视频| www.天天干| 混色激情av| 久jiu久神马影院| 中文字幕少妇色| 亚洲吊色| 狠狠入| 午夜男女爽爽大片免费观看| 熟女这里只有精品6| 377p欧洲日本亚洲大胆| 中文字幕日本久久| 欧美成人精品一区二区三区| 久干网| 国产又粗又长又大的视频| 国产白丝av| 欧美成人四级在线播放| 99热66| 日韩少妇丰满亚洲| 91碰碰| 久草这里只有精品 | 宅男91视频在线播放| 色五月天AV| 亚洲色图 91| 亚洲av性爱电影| 乱伦AVxx| 97久久精品亚洲中六字幕| 日韩中文9| 麻豆精品一区二区三区四区免费观看| 久久久久人妻二区精品叶可怜| 久久男女激情视频网站| 91+欧美| 色吊丝 日日骚 清纯唯美| 人人操,人人液| 婷婷视频在线免费观看| 色狠狠综合噜一二三区| 久操免费电影| 日本色色色视频| 亚洲国产欧美日韩人妻日中文| 久草资源欧美在线视频| 亚洲情色 欧美| 日韩欧美一级特黄大片| 亚洲综合码| 国产熟码AV| 天天干天天燥| 91色噜噜狠狠| 久草免费在线视频| 日本午夜精品理论片A级APP发布| 亚洲AV乱码专区国产噜噜亚洲 | 欧美翘臀视频网站一区二区三区 | 91女人的网站| 日逼97| a天堂视频| 午夜福利区| 亚洲欧美日韩免费观看| 992这里有精品| 亚洲在钱| 亚洲欧美日韩精品久久久一区二区| 亚洲精品色| 久久岛国| 性爱久久| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 搡老女人老熟女91老熟女综合网| 91成人久久| 亚洲黄色网址| 岛国大片在线观看网站入口| 蜜臀久久久国产| 一级性爱视频免费观看| 天天日老熟妇| 秋霞Av理论一级在线| 人妻加勒比东京热| 屁股久久久久久久久久| 视频二区美腿丝袜制服人妻欧美| 亚洲AV色图| 色婷亚洲五月在线观看| 成人情色综合网| 蜜桃av综合网发布| 后入式999| 国产 日韩 另类 视频一区爱| 北条麻妃性愛视频| 爱av免费| 久久日韩肥臀| 亚洲、日韩、综合、另类| 中文字幕97| 不卡九肏| 黄色AAAAA欧美| 伊人午夜福利视频| www.婷婷| 亚欧免费观看视频| 综合久久99亚洲人妻中文在线| 99re公开精品免费视频| 久久久久婷婷精品av电影| 亚洲成人久久美女| 91无遮挡| 亚洲天堂人人妻| 欧美熟女操屄| 乱伦强奸区日韩| 99re95| 韩日无码在线观看| 久久久一区二区三区麻豆| 色丁香久久| 色香天天| 国产亚洲精品美女| 婷婷综合五月天| 神马久久久久久久| 久久视频,这里只有精品 | 午夜人妻精品综合在线| 91视频伊人| 999熟女精品| 天天影视色香色欲| 丁香六月激情| sewuyueav| 台湾大香蕉99热| 户外裸露刺激视频第一区| 色五月av| 加勒比色综合| 黄色二级片网站| 国产一区二区欧美日本| 思思热在线视频免费| 看看日B真人视频| 日韩精品.久久精品.AV女优.天美传媒| 激情五月天插| 丝袜美腿操av| 目产99999久久999| 日韩欧美女优电影| 国产中文字幕曰本毛片| 国产无码久久高清| 欧美日韩小说| 日韩中文字幕宗合在线| 97操97色| 亚洲精品丝袜-不卡成人免费……| 激情抓乳插进去啪啪啪日韩 | 家庭乱伦性爱av| 精品午夜福利| 999久久久久久久久| 久久蜜色情在线视频xxx免费观看| 人人操人人摸人 | 成人三级片无码| 翔田千里Av在线| 97免费在线观看| 欧美伊人电影| 亚洲美腿丝袜香蕉影视欧美成人| 精品大久久| 精品国产一区二区三区av在线资源| 欧美亚洲尤物久久| 青椒国产97在线熟女| 久久久久国产精品久久久| 一二区在线观看视频| 午夜福利在线合集| 久久爱超碰网| 熟妇高潮一区二| 精品福利视频| 久九干| 天美AV片| 日本曲间由美性生活片| 欧美黑人猛交春色影视大全| 五月婷婷激情网| 丁香五月天堂网| 日韩中文字幕视频在线观看| 在线人人人人人人精品超| 高清国产性猛交xxxx乱大交| 人人爱人人乐人人操| 欧美一级A一级a爱片久久| 久久区| 96精品久久久久久久久久| 久久久精精精| 亚洲天堂一二| 九九草| 亚洲综合999| 91色色网站| 成人性爱免费播放| 少妇人妻好深太紧了vr91| 成人av影院在线观看| wwwxxx日本爽| 欧美日韩黄片精品在线| 在线欧美69V免费观看视频| 日本天天操| 美国一区二区免费视频| 91站街按摩店老熟女熟女| 日本日皮视频逼| a网站免费观看| 久久亚洲不卡| 亚州综合AⅤ| 亚州欧美综合| 精品亚洲天堂| 日韩中文字幕精品一区在线| 久久久成人国产精品无码| 色婷婷综合视频| 99re6久热只有精品6在线直播| 美女淫穴| 好舒服视频| 欧美丝袜91| 一级黄色性爱裸体视频| 尤物网址| 免费夜夜爱黄色视频毛片| 欧美一二三区四五区| 加勒比色综合| 啊啊啊啊好爽好舒服一区二区易域| 美国日韩黄片| 97人人模人人爽人人| 熟女啪啪视频| 久久r精品| 中文字幕天堂在线| 操婷婷逼| 亚洲情色图片区| 天天综合精品| 亚洲色情在线影视| 伊人加勒比| 美女操逼福利视频| 欧美性后入| 精品人妻一区二区蜜桃视频 | 樱花蜜乳av| 91操人| 使劲用力艹少妇视频一区二区| 久久久精品中文字幕麻豆| 久久精品一区二区| 日韩av不卡在线看| 五月婷婷激情综合| 亚洲91综合| 最新av中文字幕高清| 亚洲AV永久无码一区仙野| 九九成人精品| 欧美天天弄| 国产精品国产拍高清AV| 麻豆伊人网| 亚洲天堂久久久久久粉红视频| 欧美视频一区二区在线| 日本一片一区| 亚洲欧美成人网站AAA| 人妻 丝袜美腿 中文字幕| 丝袜狠狠草尤物人妻av91| 国产精品午夜福利| 操B在线观看| 欧美视频第二页| 亚洲成a人v欧美综合天堂下载| 亚洲aV性爱| 亚洲日韩青青草色月| 天天综合网在线观看| 我要看免费韩日黄片| 999九九精品| 91影库| 白丝少妇一区二区| a片 xxxx受爽视频| 六六久久日韩不卡| 999久久久九九九九| 激情综合亚洲| 色网亚洲人| 亚洲熟女中文字幕在线| 亚洲少妇自拍中文字幕懂色| 亚洲AV无线| 久久激情亚洲精品无码?V| 亚洲欧洲日产国产综合网| 亚洲欧美日韩制服另类| 亚洲天堂另类小说男人| 老司机香蕉| 狠狠干综合| 97天天| 女同在线视频一区| 九九碰九九爱97超碰| 天天91~综合入口| 成人夜夜| 成人五月香网在线| 亚洲色图欧美一区二区不卡| 91色碰| 懂色中文一区二区三区 | 欧美97爱| 国产伊人自拍| 日韩偷拍一区二区三区| 神马久久啊啊| 欧美一区二区观看在线| 男人的天堂com| http://qxhbdz.com| 五月天婷婷在线看| 天天综合有色网| A V视频日本| 黑人性欧美| 亚州精人品大香蕉| 国产精品成人久久一区二区三区| 久神马| 91久久久久久| 国产亚洲99久久精品熟| 操淫穴亚洲五月丁香| 亚洲av淫乱| 天美传媒婬乱在| 亚洲国成人情色好看电影| 综合久久六月久久婷婷| 欧美乱欲| 91丝袜激情在线| 久久久婷婷婷| 日韩中文字幕视频| 啊啊啊男女| 人妻久热在线| 一区二区三区精品久久| 欧美色图片| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 爆乳免费黄网站| 亚欧视频在线| 五十路熟女人妻一区二区三区四区五| 粉嫩少妇自慰在线| 美女极品一区二区三区| 亚洲天天更新| 91黑丝操| 亚洲男人的天堂V| 日本亚洲熟女视频| 女欧美一区二三区| 97超碰免费生活| 人妻天天爽夜夜爽爽| 高跟丝袜AV专区国产| 思思久热在线精品66| 一二三四区电影| 9九九九九视频在线观看| 国产精品麻豆视频网站| 国产精品白丝| 超碰人人干天天射| 97在线资源| 国产大片精久久久久久| 日韩人妻大香蕉| 肉嘟嘟www视频在线观看高清| 高清有码一区二区| 亚洲男人的天堂va亚洲男人社| 久久精品国产久精国产| 熟女色图在线| 国产精品久久久亚洲一区| 久久九九国产精品| 三级精品三级在线观看| 久久大黄片| 亚洲熟女综合| 综合激情97| 97av,com| 中文字幕 码 自拍 视频 区| www.99中文字幕| 亚洲乱色熟女一区| 色吧 综合| 色悠久| 国产97视频| 一区二区三区一亚洲中文字幕、综合区灬| 97丝袜亚洲在线播放| 日日噜噜夜夜久久亚洲一区二区| 亚洲精品国产AV天美传媒| 性爱av网站| www.超碰在线| 日本3级一区二区免费| 日韩精品一区二区高清| 国产精品美女久久久久久网站| 九九热三级片| 99re在线| 久久午夜色播影院免费高清| 欧美乱欲| 搡老熟女免费视频 | 97香蕉网| 午夜国产综合视频在线观看| 男女一进一出视频久久| 亚川综合视频| 性爱视频无打码在线观看| 亚洲色图尤物视频| 人人妻人人狠人人| 免费一级视频特黄色大片| 狠狠综合网| 超碰爽人妻熟女Av| 躁躁日曰躁2020| 91久久国产综合精品| 欧美熟妇亚洲版| 天天操天天日天天干| 欧美女同在线| 91性网| 91色亚洲| 成·人免费午夜在线观看| 欧美色97| 国内偷拍精品一区二区| 中国AV美女| 国产操偷| 99成人| 伊人久久国产免费观看视频| 狠色婷婷久久一区二区三区_| 99久久9| 色欧洲| 久久男人精品| 亚洲精品精品一区二区| 天天淫人人妻日日色| 精品一区二区三区四区女 | av午夜影院在线播放| 久久av一级av少妇av高潮| 不卡免费av在线播放| 蜜臀av在线播放一区二区三区| 99re6久热只有精品6在线直播 | 乱伦色图网址是多少| 国产一区二区欧美日本| 91婷婷伊人狠人| 欧美大战久久久伊人| 9999久久久久| 综合网~91综合网| 偷拍亚洲情色| 国产无吗在线播放| 中文字幕一区二区在线日韩精品| 欧美αv.com| 日本久久99| 亚洲综合99999| 9I1性色影院| 强奸乱伦亚洲第一页| 99无码精品| 九九九九九九视频| 2024年最新色情网站在线观看| 日韩精品免费高清视频在线| 精品一区二区三区蜜桃臀赵总 | 97超色| 国产精品麻豆成人av| 国产一区二区三区影片| 欧美色图成人网一区二区 | 八戒午夜福利理论片| 亚洲成av人片色午夜乱码| 99国产精品久久久久久久成人热| 淫纸中9区| 亚洲色图欧美色图日韩色图| 国产精品一区二区在钱播放| 97操97干| AV网站高清无码在线观看| 91亚洲精品青草| 97热视频在线观看| 免费家庭乱伦视频| 亚洲色图久久成人| 熟女少妇一区二区三区| 伊人网综合在线视频| 中文字幕片| 久久华人网| 天天做日日做| 中文字幕av久久爽Av| 色97干| 欧美日韩性爱精品| 97超碰逼| 中文字幕日韩专区精品系列| 日韩女优中文字幕| 午夜爽爽爽| 大香蕉九九| 亚洲图片视频小说| 一级性爱aaaa| 在线五区| 亚洲一区二区三区AV无码| 91色伦综合| 91av一区二区在线观看| 色丁香五月婷婷| 97综合激情| 激情婷婷| 高潮内射在线| 夜夜嗨视频| 91麻豆天美国产欧美日| 天天射夜夜骑| 色嘟嘟人妻天堂网| 日本一道在线播放高清| 日韩美女久久一区二区三区| 翔田千里AV无码秘 三区| 99热综合在线| 亚洲天堂五月天国产| 久久一二三级一一一| 夜夜爽夜夜操| 97色在线观看| 人妻精品免费一二三区| 成人热久久精品| 国产高清MV操逼视频| 丝袜狠狠草尤物 91| 亚洲一本色道中文无码aV天美| 日本免费一区二区不卡 | 亚洲人妻av| 婷婷爽人人婷婷爽视频| 国产精品 亚洲情色| 亚洲国产91精品一区二区久久| 久久大陆| 日韩av乱伦| 超碰97欧美| 欧亚第一综合网| 无码日韩人妻av一| 丝袜美腿丝袜| 99re3这里只有精品| 无遮挡男女激烈动态图| 亚洲区限制级| 天天插天天操| 欧美一区二区传媒| 欧美劲爆视频一区二区| 欧美伦乱爱| 国产精品一区二区黄片| 97爱亚洲| 老女人老91妇女老热女| 亚洲AV无码国产成人| 蜜臀久久99精品久久久久| 麻豆国产av网| 色综合久久88色综合久久天天| 男人天堂2019| 欧美大香蕉卡久久| 日本东京热加勒比久久| 男人天堂新| 伊人久久亚洲中文字幕不卡| 国产亚洲色婷婷久久99精品91| 一级毛片电影免费看| 97超碰这里只有精品| 超碰79人人乐| 色综合一本| 91操熟女视频| 97在线无精品| 国产动漫操逼视频| 秋霞一集毛片观看| 91熟女视频网| 国产欧美日韩臀| 黄片在线免费在线观看| 一区二区精品日韩欧美在线观看| 欧亚日本情色| 东京热精品97综合网| 男人亚洲91首页在线| 国产91丝袜在线播放蜜月| 亚洲色欲一区二区三区| 色色色五月婷婷| 欧美18老人禁| 老司机香蕉久久久久| 亚洲有码第一页| 91n美女视频| 99日韩| 亚欧视频在线| 欧美性爱18观看| 亚洲天堂男人天堂网| 天天欧美97| 经典丝袜一区| 麻豆国产第一| 欧美丝袜激情| 91xingse| 日本有码久久| 天天插天天干| 色色五月丁香| 久久精品国产亚洲AV无码电影| 一区不卡在线观看av| 懂色Av| 日韩有码专区| 人妻第一页| 亚洲色欧| 亚洲校园激情| 干美女人妻| 天堂在线一区二区| 亚洲综合在线高清| 五月天色图| 国产不卡片| 日韩三级一区| 久操大香蕉手机视频在线看| 中文字幕av乱伦| 欧美一区二区三区日韩| 国产亚洲精品美女久久久m| 欧美91视频| 日韩中文字幕人妻视频| 亚洲精品久久久久毛片A片拉屎 | 97视频7| 日韩午夜国产| 男人的天堂VA在线| 人妻夜夜爽天天爽麻豆三区网站 | 中文字幕精品免费一区二区| 少妇熟女1区2区3区| 亚洲欧美另类小说| 国产精品久久久| 亚洲网站一区二区在线| 免费A片三p视频| 老司机福利青青草| 亚洲码在线中文在线观看| 91精品微拍福利| 国产精品免费久久久久久久久久| 欧美一区二区男人天堂| 加勒比综合88| 9久在线视频只有精品| 操逼A∨| 欧美日韩人人早| 国产性刺激| 亚洲日韩少妇一道本视频| 噜噜噜亚洲精品| 黄久久| 色姑娘综合网| 亚洲无码偷拍| 色狠狠 - 百度| 九九aV| 久9久| 中文一区在线日| AV色女综合| 日韩欧美性吧婷婷乱伦大香蕉| 草草影院最新网址| 国产视频不卡在线观看| 91丨熟女丨丰满熟女| 99精品视频在线观看| 亚洲一区二区三区麻豆传媒| 在线天堂999| 97草草| 精品无码久久久久久久久果冻糖心| 亚洲一卡二卡在线免费| 无码抄逼网| 欧美色图亚洲色图成人在在线| 欧美夜夜骑视频| 九九九999久久久网站| 无码直播久久久| 精品国产精品一区二区| 欧美色图片91| 欧美性第1页| 国产精品人妻熟女aⅴ| 精精夜夜| 78精品| 欧美性爱在线无码| 操逼999| 精品免费视频国产一区| 五月丁香啪啪网| 91熟女.com| 午夜超爽| 综合网欧| 91久久久亚洲| 丁香激情五月天| 深夜激情 | 国产精品直播在线观看直播| A 天堂在线观看视频| 婷婷五月色| 亚洲日韩欧美一区二区| 97碰| 色欧美天天| 亚洲熟女少妇免费视频| 久久男人精品| 青青草白白色| 日韩黄色av中文字幕| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 大香蕉99999| 中文字幕五区| 色综合天天爱去电影网| 色婷婷久久| 久久精品国产亚洲粉嫩| 日韩人妻无码专区| 欧美日韩制服| 五月天色五月| 美女91| 人人喜人人妻| 亚洲一级黄色毛片| 97综合在线观看| 国产精品直播在线观看直播| 九九九久千久久激情蜜桃在线看| 亚洲国产精品久久AV| 操人妻丝袜高跟| 日韩啪啪啪视频| 一级特黄aaa大片在线观看成人一级片在线观看 | 婷婷情色综合网| 午夜小电影在线插入淫高潮| 熟女在线视频| 午夜乱轮操逼视频免费看| 男人网站婷婷| 婷婷五月天激情网| 一卡二卡在线播放| 亚洲色图大香| 精品国产Av无码久久久亚洲| 精品无码一二三四区| 男女激情黄色网址| 亚洲色图8| 久久精品人体| 一区操逼| 国产AV天美传媒一区二区三区 | 91人妻Pr| 超碰97护士| 精品国产99| 国产亚州高清国产拍精| 欧美熟妇色| wwe 天天干.com| 97人人操人人摸| 欧美亚州综合网图片| 亚洲天堂色图| www.av在线视频| 美女t无毒不卡不卡| 高清不卡国产| 精品人妻一区二区视频| 91操熟女视频| 日韩/97| 人人射人人操人人摸| 久久免费少妇| 少妇内射www在线观看视频| 97香蕉碰碰人妻国产欧美| 男女一进一出视频久久| 学生妹天天看| 国色天香av| 在线观看色视频| 啊啊啊好多水| 亚州九九九精品视频| 嗯嗯啊啊视频在线看| 在线免费观看日韩一区| 一本色道人妻久久| 久久鲁夜| 鲁鲁色综合网| 日本一区二区成人在线| 色99999| 96精品久久久| 天天综合网在线| 丁香九月激情| 思思热免费在线视频| 诱惑网综合| 午夜精品久久久久久久| 九九九久千久久激情蜜桃在线看 | 91性网| 日本高清_区二区三区| 少妇色| 少妇熟女视频一二三区| 干b在线性社区| 女优免费一区二区永久| 91操人| 亚洲免费成人在线高清无码视频| 超碰九区| 青青草原香蕉日本Ap| 日本999精品| 91女网站| 欧美综合站| 色婷婷五月综合激情中文字幕| 日本一区二区三区午夜观看| 清纯唯美亚洲综合| 熟女少妇一区二区三区| 另类专区加勒比| 色九九九综合| 欧美午夜色妇色鬼| 国产人妻精品久久久一区二区三区 | 人人人人插| 91亚洲色人| 五月天婷婷在线看| 久久一区二区三区四区五区| 性感美女91影视| 国产精品3| 日日骚精品视频| 欧美综合在线91| 国产女同性恋视频| 蜜臀av中字字幕网站| 欧美成人9797| 久久极品一区二区| 五月婷婷六月丁香| 99久久婷婷国产综合精品草原| 国岛片视频| 亚洲古典另类欧美在线| 人人妻人射| 久久美女国产| 亚洲日韩精品一区视频在线| 天天摸夜夜添无码小视频| 岛国福利在线精品播放| 大香蕉乱级| 亚洲日韩av专区无码| 最新无码国产| 午夜舔阴达高潮视频免费看| 超清中文乱码字幕| 国产呦精品系列在线观看| 久久久97| A片A5445444| 囯戸精品高潮呻吟旡码| 激情抓乳插进去啪啪啪日韩| 国产高清精品一区二区三区毛片| 大学生口爆吞精| 人妻81p| 欧美一区二区三区日韩| 伊人五月天| 国产欧美日韩在线观看麻豆传媒公司| 大香蕉97久久| 麻豆福利视频导航| 99精品人人爽| 欧美色91|