色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

t3code實(shí)戰(zhàn):從模板驅(qū)動(dòng)到團(tuán)隊(duì)基建的代碼生成器指南

t3code實(shí)戰(zhàn):從模板驅(qū)動(dòng)到團(tuán)隊(duì)基建的代碼生成器指南 寫樣板代碼這種事干過(guò)幾年后端的人多少都有點(diǎn)PTSD。新建一個(gè)服務(wù)先手搓目錄結(jié)構(gòu)再寫實(shí)體類、Mapper、Service、Controller聯(lián)調(diào)完發(fā)現(xiàn)字段名拼錯(cuò)從頭再來(lái)。我從最開(kāi)始復(fù)制粘貼舊項(xiàng)目到后來(lái)用各種腳手架再到自己寫生成器折騰過(guò)不少方案最后留下來(lái)長(zhǎng)期在用的這套東西就是t3code。t3code是一個(gè)面向開(kāi)發(fā)者的代碼腳手架生成工具核心思路是用一個(gè)聲明式配置加模板引擎把“項(xiàng)目骨架生成”這件事標(biāo)準(zhǔn)化。它不限制你用什么技術(shù)棧Java、Go、Node、前端項(xiàng)目都能管本質(zhì)是“模板驅(qū)動(dòng) 類型安全 團(tuán)隊(duì)友好”三件套。適合被重復(fù)建項(xiàng)目折磨的工程師也適合團(tuán)隊(duì)里負(fù)責(zé)基建的人拿來(lái)搭建統(tǒng)一規(guī)范的項(xiàng)目模板讓新成員不再靠口頭傳文檔理解項(xiàng)目結(jié)構(gòu)。這篇文章不會(huì)講什么高深理論我會(huì)直接把項(xiàng)目定位、核心架構(gòu)、完整實(shí)操流程、配置項(xiàng)細(xì)節(jié)和踩坑記錄攤開(kāi)聊所有內(nèi)容都是我實(shí)際用過(guò)之后沉淀下來(lái)的。1. 項(xiàng)目定位解碼t3code到底解決什么問(wèn)題1.1 先說(shuō)清楚它是什么不是什么很多人在第一次接觸t3code時(shí)會(huì)把它和低代碼平臺(tái)搞混。低代碼平臺(tái)通常是給你一個(gè)在線編輯器拖拖拽拽生成業(yè)務(wù)系統(tǒng)t3code的定位完全不同它是個(gè)離線的、基于本地文件系統(tǒng)的代碼生成器。你給我一份描述項(xiàng)目結(jié)構(gòu)的數(shù)據(jù)我給你吐出完整的工程代碼生成完之后它就不再參與你的開(kāi)發(fā)流程了你不欠它任何運(yùn)行時(shí)依賴。也有人會(huì)問(wèn)它和GitHub上的模板倉(cāng)庫(kù)有什么區(qū)別。模板倉(cāng)庫(kù)的本質(zhì)是“一次性復(fù)制”你fork一份然后開(kāi)始手動(dòng)改改完的成果很難再反饋回模板本身。t3code把“模板”和“變量”分離模板是固定的骨架變量是每次傳入的配置同一個(gè)模板傳入不同參數(shù)可以生成出不同名字、不同字段、不同模塊的多個(gè)項(xiàng)目。這種設(shè)計(jì)解決了真實(shí)研發(fā)環(huán)境里一個(gè)非常具體的問(wèn)題團(tuán)隊(duì)里每個(gè)人建項(xiàng)目的姿勢(shì)都不一樣。有人喜歡Domain在前有人喜歡Controller在前有人目錄用單數(shù)有人用復(fù)數(shù)等到代碼評(píng)審的時(shí)候光統(tǒng)一結(jié)構(gòu)就能吵上半天。t3code把結(jié)構(gòu)鎖進(jìn)模板所有人生成出來(lái)的代碼都一樣這個(gè)內(nèi)耗就被消掉了。1.2 名字里的三個(gè)T代表什么t3code這個(gè)名字不是隨手起的它有明確的三層含義分別是Template-driven模板驅(qū)動(dòng)、Type-safe類型安全和Team-ready團(tuán)隊(duì)友好。第一層模板驅(qū)動(dòng)指的是它的核心執(zhí)行模型。整個(gè)工具的輸入有兩個(gè)一個(gè)是模板文件集合一個(gè)是配置數(shù)據(jù)。配置數(shù)據(jù)經(jīng)過(guò)預(yù)處理之后注入模板渲染引擎把模板和數(shù)據(jù)進(jìn)行合并最終寫出文件。這跟以往腳手架里“邏輯里寫死目錄結(jié)構(gòu)”的做法截然不同t3code的每個(gè)目錄、每個(gè)文件都可以根據(jù)配置動(dòng)態(tài)決定要不要生成。第二層類型安全說(shuō)的是配置數(shù)據(jù)這一端。t3code的配置文件是TypeScript文件也就是說(shuō)你在定義項(xiàng)目結(jié)構(gòu)的時(shí)候有完整的類型提示和編譯檢查。一個(gè)字段拼錯(cuò)了、一個(gè)布爾值寫錯(cuò)了類型在跑生成命令之前就能發(fā)現(xiàn)。這一點(diǎn)體驗(yàn)差異非常大我之前用YAML配置生成器的時(shí)候經(jīng)常因?yàn)榭s進(jìn)或者類型問(wèn)題在運(yùn)行時(shí)才報(bào)錯(cuò)改成TS配置之后這類問(wèn)題幾乎絕跡了。第三層團(tuán)隊(duì)友好更偏向工程管理維度。t3code支持把模板拆分成可復(fù)用的插件包團(tuán)隊(duì)里可以維護(hù)一個(gè)內(nèi)部模板倉(cāng)庫(kù)通過(guò)版本號(hào)管理模板的迭代。新人入職之后執(zhí)行一條命令就能生成一個(gè)完全符合團(tuán)隊(duì)規(guī)范的新工程不需要去讀十幾頁(yè)的Wiki文檔。2. 核心架構(gòu)與渲染原理拆解2.1 三層結(jié)構(gòu)模板層、規(guī)則層、渲染層t3code的源碼架構(gòu)可以理解成三個(gè)清晰的層次。模板層存儲(chǔ)所有模板文件規(guī)則層存放配置定義和校驗(yàn)邏輯渲染層負(fù)責(zé)把前兩者組合起來(lái)輸出結(jié)果。模板層不是簡(jiǎn)單的文本文件它支持多級(jí)目錄嵌套并且目錄本身也可以作為模板變量。比如你要生成services/UserService.java目錄services和文件名UserService.java都可以用Mustache語(yǔ)法寫成{{feature}}/{{domain}}Service.java這樣當(dāng)你配置不同的業(yè)務(wù)域時(shí)目錄和類名會(huì)自動(dòng)變化。單就這個(gè)能力已經(jīng)比大多數(shù)腳手架靈活了。規(guī)則層的核心是一個(gè)配置Schema它會(huì)聲明所有配置項(xiàng)的類型、默認(rèn)值、校驗(yàn)規(guī)則。這個(gè)Schema同時(shí)驅(qū)動(dòng)兩件事校驗(yàn)用戶輸入的配置數(shù)據(jù)以及生成配置文件的代碼提示。t3code復(fù)用了TypeScript的類型推導(dǎo)能力你用defineConfig函數(shù)包裹配置對(duì)象之后編輯器就能自動(dòng)提示每個(gè)字段的合法值和含義。渲染層相對(duì)普通就是遍歷模板目錄對(duì)每個(gè)文件執(zhí)行模板引擎渲染再根據(jù)配置決定目標(biāo)路徑最后寫入磁盤。但有幾個(gè)細(xì)節(jié)值得注意。它會(huì)把.t3ignore后綴的文件原樣復(fù)制不做渲染方便放一些不希望被模板語(yǔ)法干擾的靜態(tài)內(nèi)容。它還會(huì)對(duì)比目標(biāo)路徑下已存在的文件如果有同名文件且內(nèi)容不同會(huì)提示你選擇覆蓋、跳過(guò)還是備份后面我會(huì)專門講到這個(gè)交互邏輯。2.2 模板語(yǔ)法與內(nèi)聯(lián)表達(dá)式t3code的模板語(yǔ)法兼容Handlebars同時(shí)也加了自己的一套快捷表達(dá)式?;A(chǔ)變量用雙大括號(hào)比如{{ projectName }}如果需要大寫開(kāi)頭的駝峰形式寫在文件名里可以寫成{{ pascalCase domain }}它會(huì)自動(dòng)把user_profile轉(zhuǎn)成UserProfile。這套內(nèi)聯(lián)表達(dá)式的設(shè)計(jì)是我非常喜歡的地方。我記得最早用Plop的時(shí)候文件名要做格式轉(zhuǎn)換就得寫一堆Helper函數(shù)每次都要在配置文件里單獨(dú)聲明。t3code把這些最常用的轉(zhuǎn)換內(nèi)置了camelCase、pascalCase、snakeCase、kebabCase、upperCase、lowerCase隨用隨取模板里直接寫就行。條件判斷方面{{#if}}和{{#each}}都能直接在模板文件里操作。比如后端模板里根據(jù)配置決定要不要生成Controller層{{#if withController}} public class {{pascalCase domain}}Controller { private final {{pascalCase domain}}Service {{camelCase domain}}Service; } {{/if}}這是一個(gè)純Java文本的模板文件但它中間夾雜著一層邏輯控制。t3code渲染完之后才會(huì)寫到磁盤所以你可以直接在模板里干類似的事情毫無(wú)違和感。2.3 為什么選Handlebars而不是EJS或其他引擎我在設(shè)計(jì)t3code的第一版時(shí)其實(shí)用過(guò)EJS做渲染引擎當(dāng)時(shí)覺(jué)得EJS的% %萬(wàn)能能寫任意JavaScript邏輯很自由。后來(lái)在真實(shí)項(xiàng)目里用了幾次陸續(xù)發(fā)現(xiàn)幾個(gè)問(wèn)題。EJS模板在編輯器里默認(rèn)不具備高亮支持后端工程師打開(kāi)一個(gè).ejs文件看到里面滿屏的% if (...) { %第一反應(yīng)是抗拒。Handlebars的語(yǔ)法則更加貼近純文本{{ }}符號(hào)在任何語(yǔ)言文件里都不會(huì)和原有語(yǔ)法沖突代碼高亮基本不受影響。另一個(gè)更重要的原因是Handlebars的渲染是“數(shù)據(jù)驅(qū)動(dòng)”的它強(qiáng)制你在渲染前把邏輯整理成數(shù)據(jù)字段。在EJS里你可以隨手寫循環(huán)和函數(shù)調(diào)用時(shí)間一長(zhǎng)模板會(huì)變得非常難以維護(hù)。Handlebars提倡的做法是需要什么邏輯就定義Helper模板里只做最簡(jiǎn)單的事。這個(gè)約束讓t3code的模板庫(kù)即使經(jīng)歷了多個(gè)團(tuán)隊(duì)迭代依然能保持整潔。2.4 安全機(jī)制目錄覆蓋保護(hù)與Dry Run模式代碼生成器最容易出事的地方在于覆蓋文件。t3code默認(rèn)開(kāi)啟安全模式目標(biāo)路徑下如果存在同名文件且內(nèi)容和本次渲染結(jié)果不完全一致它不會(huì)直接覆蓋而是進(jìn)入一個(gè)交互菜單讓你選Skip、Overwrite、Backup、Diff。這個(gè)設(shè)計(jì)曾經(jīng)在很多極限情況下救過(guò)我最典型的一次是有一個(gè)模板路徑配置寫串了差點(diǎn)把另一個(gè)服務(wù)的配置目錄生成出來(lái)的東西覆蓋掉因?yàn)樵趥浞蔹c(diǎn)停住了最后只損失了幾分鐘排查時(shí)間。除了交互模式t3code還支持--dry-run參數(shù)。加了這個(gè)參數(shù)之后它只計(jì)算“將要寫出哪些文件到哪些路徑”在終端打印出一份清單不真正落盤。這個(gè)是上線模板庫(kù)之前必跑的一步。我現(xiàn)在的習(xí)慣是每個(gè)新模板合并到主分支之前都用dry-run跑一遍全量樣例看清單里有沒(méi)有奇怪的路徑出現(xiàn)。3. 完整實(shí)操流程從零生成一個(gè)可運(yùn)行的工程3.1 安裝與環(huán)境要求t3code是一個(gè)Node.js命令行工具安裝之前需要確認(rèn)開(kāi)發(fā)環(huán)境里有Node.js 18或更高版本。Node中間版本的差異坑過(guò)我好幾次低版本會(huì)有一些比較新的API不可用所以升級(jí)完之后建議跑一下node -v確認(rèn)版本。全局安裝npm install -g t3code安裝完執(zhí)行t3code --version能輸出版本號(hào)就說(shuō)明裝好了。我不太建議用yarn全局裝這種工具因?yàn)閥arn的全局路徑在升級(jí)時(shí)會(huì)殘留多個(gè)版本容易在執(zhí)行時(shí)調(diào)到一個(gè)舊版本。npm在這一點(diǎn)上做得相對(duì)穩(wěn)一些。如果你不想全局裝也可以每次用npx調(diào)用npx t3code init onlinestore但全局安裝還是更方便因?yàn)閠3code的常用命令很多每次前面掛個(gè)npx敲起來(lái)視覺(jué)上很累。3.2 初始化配置文件在你要生成項(xiàng)目的目錄下運(yùn)行t3code init它會(huì)在當(dāng)前目錄創(chuàng)建一個(gè)t3.config.ts文件。這個(gè)文件就是整個(gè)生成的唯一入口配置文件。我建議把它提交到代碼倉(cāng)庫(kù)因?yàn)樗琼?xiàng)目的“結(jié)構(gòu)說(shuō)明書”后續(xù)所有改動(dòng)的依據(jù)都在這。一個(gè)典型的配置長(zhǎng)這樣import { defineConfig } from t3code; export default defineConfig({ project: { name: online-store, description: Online retail backend service, packageName: com.example.store, language: java, buildTool: maven, javaVersion: 17, }, modules: [ { domain: user, features: [crud, validation], withController: true, withService: true, withRepository: true, }, { domain: order, features: [crud], withController: true, withService: true, withRepository: true, }, ], output: ./generated, });這里modules可以定義多個(gè)領(lǐng)域模塊每個(gè)模塊會(huì)生成一套獨(dú)立的Controller、Service、Repository等文件。一次配置批量生成多個(gè)域非常適合用來(lái)搭建微服務(wù)里邊聚合業(yè)務(wù)。配置寫完之后運(yùn)行下面命令t3code generate3.3 用模型定義批量生成CRUD接口如果你要生成的系統(tǒng)有完整的數(shù)據(jù)模型t3code的generate命令可以接受模型定義參數(shù)直接生成一套完整的CRUD接口代碼。t3code generate --model User --fields id:Long:pk,name:String:required,email:String:unique,status:Integer:default1 --pkg com.example.user這個(gè)命令背后的邏輯是t3code內(nèi)置的模型解析器。它會(huì)把你傳的字段列表拆成類型映射生成數(shù)據(jù)庫(kù)建表語(yǔ)句、實(shí)體類、Mapper接口、Service接口和實(shí)現(xiàn)類、Controller、DTO、異常處理類。如果你用的是Java技術(shù)棧生成出來(lái)的代碼是Spring Boot風(fēng)格如果傳--lang go則生成Gin風(fēng)格的代碼。我之前在一個(gè)內(nèi)部工具的迭代中使用過(guò)這個(gè)功能當(dāng)時(shí)需要在極短時(shí)間內(nèi)把兩個(gè)遺留系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)整理成新服務(wù)的接口。我只需要把老庫(kù)的表結(jié)構(gòu)寫成字段描述工具生成的代碼修正成本極低整體效率比從零寫快了很多倍。注意自動(dòng)生成的代碼不會(huì)完全貼合業(yè)務(wù)異常邏輯但作為一版初始骨架它解決“從一個(gè)空項(xiàng)目起步”的恐懼感效果立竿見(jiàn)影。3.4 生成后的目錄結(jié)構(gòu)與代碼解讀執(zhí)行完生成命令后在./generated目錄下會(huì)有如下結(jié)構(gòu)generated/ └── online-store/ ├── pom.xml ├── src/main/java/com/example/store/ │ ├── StoreApplication.java │ ├── config/ │ │ ├── SecurityConfig.java │ │ └── MybatisPlusConfig.java │ ├── controller/ │ │ ├── UserController.java │ │ └── OrderController.java │ ├── service/ │ │ ├── UserService.java │ │ └── UserServiceImpl.java │ ├── mapper/ │ │ ├── UserMapper.java │ │ └── OrderMapper.java │ ├── entity/ │ │ ├── User.java │ │ └── Order.java │ └── common/ │ ├── Result.java │ └── GlobalExceptionHandler.java ├── src/main/resources/ │ ├── application.yml │ └── mapper/ │ ├── UserMapper.xml │ └── OrderMapper.xml └── README.md需要理解的是這個(gè)結(jié)構(gòu)并不是“寫死在工具里”的。它來(lái)自你當(dāng)前選用的那個(gè)模板插件如果你換成別的技術(shù)棧模板輸出會(huì)是完全不同的結(jié)構(gòu)。t3code只負(fù)責(zé)執(zhí)行內(nèi)容由模板決定。這一點(diǎn)想明白后續(xù)要定制模板的時(shí)候你就知道該改哪里。4. 關(guān)鍵配置項(xiàng)與自定義能力詳解4.1 配置字段速查表上面那個(gè)配置示例用到了不少字段但項(xiàng)目用到深處之后你會(huì)發(fā)現(xiàn)可配項(xiàng)遠(yuǎn)不止這些。我整理了一份常用字段的速查表方便你邊查邊用。字段類型默認(rèn)值說(shuō)明project.namestring必填項(xiàng)目名會(huì)作為根目錄名和包名基礎(chǔ)project.descriptionstring項(xiàng)目描述寫入READMEproject.packageNamestring必填代碼包名如com.example.appproject.languageenumjava可選java、go、node、pythonproject.buildToolenummaven可選maven、gradle、go-mod、npmproject.javaVersionint17僅Java模板生效project.nodePackageManagerenumnpm僅Node模板生效project.ormenummybatis-plus可選mybatis-plus、spring-data-jpamodules[].domainstring必填域名如user、ordermodules[].fieldsarray[]字段描述驅(qū)動(dòng)實(shí)體類生成modules[].withControllerbooleantrue是否生成Controller層modules[].withServicebooleantrue是否生成Service層modules[].withRepositorybooleantrue是否生成數(shù)據(jù)訪問(wèn)層outputstring./generated輸出根目錄我在團(tuán)隊(duì)落地的時(shí)候會(huì)把這份表打印出來(lái)貼在工位上因?yàn)槊慨?dāng)新增一個(gè)模塊需要調(diào)整生成策略翻一下這個(gè)表基本能定位到問(wèn)題不用去讀源碼。4.2 自定義Helper函數(shù)內(nèi)置的字符串轉(zhuǎn)換Helper有時(shí)候不夠用比如你要在模板里對(duì)某個(gè)字段類型做Java和數(shù)據(jù)庫(kù)類型的映射。t3code允許在配置文件中注冊(cè)自定義Helpers。import { defineConfig } from t3code; export default defineConfig({ helpers: { jdbcType(fieldType: string): string { const map: Recordstring, string { Integer: INTEGER, Long: BIGINT, String: VARCHAR(255), LocalDate: DATE, }; return map[fieldType] || VARCHAR(255); }, }, });注冊(cè)之后可以在模板中這樣使用{{jdbcType field.type}}這里的設(shè)計(jì)考量在于模板文件的職責(zé)是展示復(fù)雜的數(shù)據(jù)加工必須放在配置里。自定義Helper在配置里定義也方便統(tǒng)一維護(hù)團(tuán)隊(duì)后來(lái)要做類型映射調(diào)整改配置一處就夠了。4.3 模板鉤子beforeRender與afterRender有一些需求純靠模板自身表達(dá)不出來(lái)比如生成完代碼之后要對(duì)某個(gè)文件內(nèi)容做統(tǒng)一替換、對(duì)生成的目錄做壓縮備份、甚至跑一段腳本做包名批量替換。t3code為此設(shè)計(jì)了鉤子函數(shù)機(jī)制。配置寫法如下export default defineConfig({ async afterRender(context) { const { outputDir, renderedFiles } context; // 可以在這里執(zhí)行一些后處理邏輯 await runPostProcess(outputDir, renderedFiles); }, });鉤子按執(zhí)行時(shí)機(jī)分為前置和后置。前置鉤子常見(jiàn)用途是拉取遠(yuǎn)程配置、動(dòng)態(tài)設(shè)置環(huán)境變量后置鉤子常見(jiàn)用途是調(diào)用格式化工具、執(zhí)行測(cè)試、清理臨時(shí)文件。我第一次把t3code接入一個(gè)含有API網(wǎng)關(guān)的項(xiàng)目時(shí)每次生成完都要手動(dòng)去改網(wǎng)關(guān)的注冊(cè)配置文件后來(lái)寫了一個(gè)后置鉤子腳本自動(dòng)完成徹底解脫了。4.4 多模塊與單體模式的切換t3code支持兩種輸出模式單體多模塊和獨(dú)立多目錄。單體多模塊就是在一個(gè)項(xiàng)目里同時(shí)生成多個(gè)業(yè)務(wù)模塊共享同一套common工程獨(dú)立多目錄則是每個(gè)業(yè)務(wù)域生成一個(gè)完整項(xiàng)目目錄。這個(gè)選擇在配置里是通過(guò)project.projectType字段控制的可選single-module或multi-project。如果你要搭建微服務(wù)拆分前的單體應(yīng)用推薦用single-module依賴關(guān)系清晰如果你在搭建一套多服務(wù)倉(cāng)庫(kù)推薦multi-project每個(gè)模塊獨(dú)立pom或go.mod后續(xù)拆庫(kù)會(huì)很省事。我當(dāng)時(shí)在兩個(gè)模式的實(shí)現(xiàn)上做過(guò)多次版本調(diào)整核心難點(diǎn)在于路徑算法的分支處理。單模塊下路徑是src/main/java/com/.../controller多項(xiàng)目下路徑是user-service/src/main/java/.../controller模板取根路徑的時(shí)候如果少算一層輸出的目錄就會(huì)亂。后來(lái)在配置里用了一個(gè)內(nèi)部變量moduleRoot把這兩種情況統(tǒng)一成了模板里的一層引用模板編寫者在寫路徑時(shí)完全不用關(guān)注是哪種模式。5. 踩坑實(shí)錄我用t3code踩過(guò)的那些坑5.1 模板轉(zhuǎn)義問(wèn)題雙括號(hào)被吃掉在做前端模板的時(shí)候我踩過(guò)最離譜的一個(gè)坑是生成Vue文件時(shí)模板里原本要保留的{{ }}被t3code當(dāng)成了變量處理。Vue的模板語(yǔ)法也是雙大括號(hào)和Handlebars天然沖突結(jié)果生成出來(lái)的.vue文件里插值表達(dá)式全部變成了空字符串。這個(gè)問(wèn)題的解決辦法是使用t3code提供的原始?jí)K語(yǔ)法{{{{raw}}}} const message {{ message }} from ${user.name}; {{{{/raw}}}}raw塊內(nèi)的內(nèi)容會(huì)原樣輸出不參與渲染。這個(gè)坑直接影響了一個(gè)前端項(xiàng)目模板的提效后來(lái)我在內(nèi)部模板規(guī)范里加了一條強(qiáng)制約定所有生成*.vue或者*.tsx文件時(shí)只要涉及原生雙括號(hào)的代碼片段一律包在raw塊里。后來(lái)的執(zhí)行中就再也沒(méi)出現(xiàn)過(guò)類似情況。5.2 Windows下的路徑分隔符問(wèn)題另一件鬧心的事情是Windows環(huán)境下的路徑分隔符。t3code在規(guī)劃目標(biāo)路徑時(shí)使用Node的基本路徑處理在Linux上生成都是正常的/分隔但到了Windows上某些模板用硬編碼的/會(huì)導(dǎo)致路徑拼接錯(cuò)亂輸出目錄里會(huì)出現(xiàn)帶反斜杠混合的文件夾。排查發(fā)現(xiàn)是模板里寫死了相對(duì)路徑{{output}}/src/{{language}}/com/example在Windows上頂層變量帶的是反斜杠兩層一拼接就會(huì)出generated/src\main/java這種混亂路徑。解決的方案是在配置渲染前將所有路徑統(tǒng)一規(guī)范化用path.join然后再拉平為/前綴。模板編寫規(guī)范也更新了一條模板中的路徑統(tǒng)一使用{{path.join var src main}}這種寫法避免字符串拼接。這個(gè)坑如果不實(shí)際在Windows上跑一遍是不容易暴露的因?yàn)榇蠖鄶?shù)后端開(kāi)發(fā)主力機(jī)是Mac或Linux。但凡團(tuán)隊(duì)里有幾個(gè)Windows用戶這個(gè)問(wèn)題必然會(huì)遇到。寫模板時(shí)務(wù)必把路徑處理交給工具內(nèi)置的Helper。5.3 覆蓋保護(hù)誤觸導(dǎo)致的生成中斷聽(tīng)過(guò)一些用戶反饋過(guò)更新模板版本后跑生成命令中途卡在某個(gè)文件確認(rèn)覆蓋的交互處沒(méi)注意到就直接退出了。我后來(lái)給團(tuán)隊(duì)的命令腳本統(tǒng)一加了--yes參數(shù)在模板更新、重跑生成的場(chǎng)景下使用跳過(guò)交互直接按照安全策略自動(dòng)處理。但這里有個(gè)微妙的平衡生產(chǎn)環(huán)境生成新項(xiàng)目時(shí)要用交互模式因?yàn)槟悴恢滥0邃秩窘Y(jié)果是否符合預(yù)期盲選覆蓋有風(fēng)險(xiǎn)而在日常迭代中--yes更順手因?yàn)槟憧催^(guò)dry-run的輸出確認(rèn)沒(méi)有意外才真正生成。我的習(xí)慣配兩個(gè)aliast3gen-safe交互模式和t3gen-fastdry-run yes不同場(chǎng)景用不同命令基本不會(huì)混淆。5.4 團(tuán)隊(duì)協(xié)作時(shí)模板規(guī)范缺失最后一個(gè)人為的坑是團(tuán)隊(duì)協(xié)作時(shí)模板風(fēng)格不統(tǒng)一。t3code允許你定義多個(gè)來(lái)源的模板庫(kù)但如果沒(méi)有約定模板命名和放置目錄很快就會(huì)變成一團(tuán)亂麻。有的人習(xí)慣把模板放在templates/service下有的人放在service.t3下路徑一旦散落后續(xù)維護(hù)難度呈指數(shù)上升。我現(xiàn)在在項(xiàng)目中強(qiáng)制使用一個(gè)約定模板倉(cāng)庫(kù)根目錄固定為blueprint/模塊目錄名和最終輸出的模塊名保持一致。每一個(gè)模板文件的前幾行要用注釋標(biāo)明適用場(chǎng)景和依賴的配置項(xiàng)。聽(tīng)起來(lái)很樸素但真的能救命。因?yàn)槟0鍘?kù)會(huì)不斷演化沒(méi)有注釋的模板在三個(gè)月后沒(méi)人能看懂當(dāng)初為什么這么寫。6. 常見(jiàn)問(wèn)題速查表我在長(zhǎng)期使用過(guò)程中積累了一些高頻問(wèn)題這里統(tǒng)一整理成表格方便大家快速定位。問(wèn)題現(xiàn)象原因解決辦法生成的文件內(nèi)容為空模板中變量名拼錯(cuò)模板{{name}}和配置module.name不匹配檢查變量名大小寫用編輯器搜索模板中的大括號(hào)目錄結(jié)構(gòu)不符合預(yù)期多了一層無(wú)意義目錄配置了output后模板又拼接了項(xiàng)目名檢查輸出路徑中是否重復(fù)出現(xiàn)項(xiàng)目名Windows路徑錯(cuò)亂生成后目錄帶有反斜杠模板硬編碼了路徑分隔符統(tǒng)一使用工具提供的路徑Helper模板雙括號(hào)被渲染Vue/React模板語(yǔ)法被吞原生雙大括號(hào)被Handlebars解析用{{{{raw}}}}塊包圍覆蓋確認(rèn)煩人每次生成都交互詢問(wèn)安全策略默認(rèn)值過(guò)于保守使用--yes參數(shù)跳過(guò)交互自定義Helper不生效模板渲染時(shí)找不到函數(shù)配置中未正確注冊(cè)Helper檢查helpers配置對(duì)象是否導(dǎo)出生成的代碼編譯報(bào)錯(cuò)某些文件缺失withController設(shè)置為false但Controller模板仍在引用檢查模板條件判斷是否正確Node版本過(guò)低運(yùn)行時(shí)報(bào)語(yǔ)法錯(cuò)誤t3code新語(yǔ)法不支持舊版本升級(jí)Node到187. 進(jìn)階玩法分享從單機(jī)工具到團(tuán)隊(duì)基建7.1 搭建團(tuán)隊(duì)內(nèi)部模板庫(kù)單一項(xiàng)目使用t3code只是戰(zhàn)術(shù)層面的提效真正能放大收益的是把這個(gè)工具變成團(tuán)隊(duì)基建。第一步是搭建一個(gè)內(nèi)部模板倉(cāng)庫(kù)把團(tuán)隊(duì)當(dāng)前的技術(shù)棧、分層架構(gòu)、安全檢查、測(cè)試框架全部沉淀進(jìn)模板。這個(gè)模板倉(cāng)庫(kù)要有版本概念。t3code支持在配置里聲明依賴的模板包版本號(hào)export default defineConfig({ templatePackages: [ { name: internal/backend-java, version: 2.1.0 }, ], });當(dāng)Java基礎(chǔ)框架升級(jí)時(shí)你只需要修改模板倉(cāng)庫(kù)的版本號(hào)然后讓團(tuán)隊(duì)成員重新運(yùn)行一次生成命令就能得到一份與舊版本不同但結(jié)構(gòu)一致的新項(xiàng)目。能做到這一點(diǎn)其實(shí)是在把原本不可控的“新建項(xiàng)目”動(dòng)作納入標(biāo)準(zhǔn)化的版本管理。7.2 與CI流水線結(jié)合實(shí)現(xiàn)自動(dòng)化檢查t3code的dry-run模式非常適合嵌入CI流水線。我們團(tuán)隊(duì)在每次推送模板庫(kù)變更時(shí)CI會(huì)執(zhí)行一次用樣例配置的dry-run生成然后用diff工具對(duì)比輸出和基線版本。如果模板改動(dòng)導(dǎo)致輸出內(nèi)容和預(yù)期不符CI會(huì)自動(dòng)失敗阻斷合并。這個(gè)機(jī)制讓我們敢持續(xù)迭代模板庫(kù)而不擔(dān)心發(fā)版事故。你想想以往模板一旦有變更都是靠個(gè)人去新建一個(gè)項(xiàng)目來(lái)驗(yàn)證很多時(shí)候模板已經(jīng)破壞了原有結(jié)構(gòu)卻不自知等到別人下一個(gè)項(xiàng)目才開(kāi)始暴露問(wèn)題?,F(xiàn)在有了CI自動(dòng)Dry-Run校驗(yàn)這類問(wèn)題被扼殺在代碼評(píng)審前。7.3 把t3code嵌入編輯器的快捷鍵如果你像我一樣頻繁生成代碼可以把t3code generate配置成VS Code的任務(wù)命令。綁定一個(gè)快捷鍵比如CtrlShiftT在項(xiàng)目里直接觸發(fā)重新生成。這個(gè)操作很爽的一點(diǎn)是改配置存盤按快捷鍵生成的代碼立刻更新編輯器的錯(cuò)誤提示瞬間消失。配置方式很簡(jiǎn)單在.vscode/tasks.json里寫一個(gè)任務(wù)定義把命令指向當(dāng)前工程的t3code generate --yes然后在keybindings里綁定任務(wù)快捷鍵。這樣省去來(lái)回切換終端的流程實(shí)際體驗(yàn)提升非常明顯。7.4 給生成代碼打上“自動(dòng)生成”標(biāo)記最后一個(gè)小技巧雖然在t3code里默認(rèn)不開(kāi)啟但強(qiáng)烈建議在團(tuán)隊(duì)的模板中增加一個(gè)統(tǒng)一注釋頭// This file is generated by t3code. DO NOT EDIT MANUALLY. // Source template: {{sourceTemplate}}加了這行注釋之后開(kāi)發(fā)者在代碼評(píng)審中看到生成文件會(huì)自動(dòng)跳過(guò)不會(huì)花時(shí)間去做代碼審查。團(tuán)隊(duì)成員也清楚哪里是生成代碼、哪里是手寫業(yè)務(wù)邏輯避免誤改覆蓋。我試著在模板里增加這個(gè)標(biāo)記之后團(tuán)隊(duì)溝通中經(jīng)常出現(xiàn)的“這個(gè)文件怎么改不了”的疑惑少了很多。我個(gè)人在實(shí)際使用中的體會(huì)是t3code真正提升效率的不是“從零到一千行代碼”那一瞬間而是把“項(xiàng)目結(jié)構(gòu)一致性”從口頭約定變成了可驗(yàn)證的自動(dòng)機(jī)制。代碼生成器很容易被誤解成銀彈它不是但它能解決很多光靠自覺(jué)解決不了的問(wèn)題。如果你也被重復(fù)建項(xiàng)目折磨過(guò)建議先用它跑通一個(gè)小項(xiàng)目再?zèng)Q定要怎么消化這套思路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩精品永久在线观看| 99久久久无码国产精品性啊聊| 无码免费精品高清| 亚洲在饯| 情色大香蕉| 区二区亚洲婷| 偷拍 精品 另类 四区| 欧美性爱免费短视频| 亚洲熟女乱色一区二区三区久久久 | 五月婷婷爱六月丁香色| 97超碰免费人人性爱| 亚洲最大AV网| 成人一级性爱| 久久产精品一区二区三区电影| 99精品久久久久久| 欧美老妇女内射网址| 亚洲av无码成人精品国产| 男啪女色黄无遮挡免费观看| 九热久| 美女91色黄18| 综合情欲网| 超碰精品| 人人澡综合涩| 96免费视频在线| 美女诱惑1区2区| 不卡啪啪视频| 国岛片视频| 国产精品久久久久久久电影渣男| 欧美天天弄| 无码九九九九| 99视频自拍区| 精品国产乱码久久久| 最新av在线| 激情文学 国产一二三aV| 欧亚性爱视频免费看| 国产av激情无码久久天堂| 粉嫩av在线| 唯美清纯 妖精视频| 久久AV色| 91劲爆| 操淫穴亚洲五月丁香| 操亚州| 蜜臀久久久| 懂色AV中文| 青青草吊丝| 亚洲日韩肥臀视频在线观看| 岛国小电影| xxx亚洲午夜天堂| 夜夜爽33333| www五月| 亚洲日韩精品久久久久一区壹牛| 欧美—性—交—色| 日韩大香蕉AV影片| 在线视频97| 亚洲欧洲日本精品中文a∨| 精品999999| 亚洲风情在线观看| 一个色导综合| 丰满高潮18xxxx| 100啪啪视频大全| 亚洲本色精品一区二区久久| 女人 A一级| 秋霞一级视频在线观看免费| 欧美躁死她一区二区| 国产精品一二三区福利| 天色综合网| 自拍二页| 福利大香蕉| 夜夜嗨一区二区三区直播内容| 亚洲激情视频| 2024年最新色情网站在线观看| 中文字幕精品探花视频| 国产精品日日摸夜夜添骚逼| 欧美日韩色综合网| www.色婷婷.com| 啊啊啊com| 激情亚洲天堂| 3P丝袜熟女 色综合| 五月情色天| 1级午夜影院费免区| 国产三级多多影院2022国产AA一级毛片无码 | 干B网| 99热在线观看| 91丨九色丨东北熟女| 91在线综合网| 婷婷色综合欧美日韩| 懂色中文一区二区三区| 成人三级片无码| 啊啊啊啊啊在线观看网址| 乱理日韩中文| 国语精品av| 97视频网站| 韩国一级婬片A片无码天美| 777奇米影视777四色| 欧美躁死她一区二区| 色噜噜人妻丝袜AV资源| 高清无码人妻久久久一区二区三区aⅴ| 熟妇综合一区二区三区| 青青草天天亲夜夜操网| 久久欧美按摩999| 91无码人妻| 日韩免费簧片| 一区二区三区视频在线观看免费| 亚洲日韩av一区二区三区百合| 在线情色电影 91大 | 丰满少妇一区二区三区免费看| 国产精品久久天天干| 91干熟女| 爱丝福利| 免费观看国产不卡av| 亚洲美乱| 啊啊啊网站| 欧美日韩第一页| 东北老女人的激情视频| 永久免费av无码网站国产app| 东京日日夜夜| 999久久久国产精品| 亚洲精品一二区| 第二页中文字幕| 精品免费囯产一区二区三区| 国产视频一区二区免费| 夜夜夜夜爽| 最新三级网址| 97就爱干| 在线人人人人人人精品超 | 亚洲欧美日韩激情不卡| 亚洲成人免费中文字幕| 久久一二三四五六七八九区| 欧美精品1区2区3区| 久久欧洲| 91夜色chaopeng| 青久久| 天天操天天射天天日| 欧美成人一区二区三区在线播放| 五月天精品| 91成人久久| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 99re不伦| 免费久久一级毛片大黄| 日本精品一区三区| 欧美资源| 欧美精品双插| 情趣丝袜无码操逼视频| 蜜臀久久在线视频| 极品白嫩美女白浆成人福利在线看| 欧美亚洲第1页| 蜜桃狠狠色伊人亚洲综合网站| 中文字幕啊啊啊在线观看视频| 久99在线免费观看视频| 伊人天堂在线| 成人26uuu| 美女主播色欲91抠b在线播放| 无码人妻精品一区二区三区99不卡| 在线天堂999| 国产隔壁老王影院在线| 国产精品久久久九九九| 国产欧美伊人| 国产视频一区二区三区在线免费观看 | 国产免费大片| 日本污ww视频网站| 91丝袜在线播放| 久久天堂婷婷网| 国产精品乱码久久久| 夜夜一区二区| 伦激情人妻另类人妻| 成人在线永久| 成人午夜小视频手机在线看| 亚洲97在线观看| 大香蕉伊人在线成人AV在线观看| 亚洲色综合| 国产精品一区二区后入| 高清不卡一二三区视频......| 日本人妻中文字幕精品| 久久精品无码熟妇一区二区三区视频导航 | 亚洲乱伦图片视频| 97资源亚洲| 狠插 制服 自拍| 日韩欧美国产高清视频| 久久精品一区二区一8| 99热导航| http://qxhbdz.com| 国模私拍一区二区三区神乳| 另类欧美色| 亚洲精品国产精品乱码不卡| 国产 日韩 另类 视频一区爱| 亚洲日韩天堂| 综合色区偷拍| 精品女同一区| baiduhicn.com。| 五月激情天| 99久久婷婷丁香| 亚洲人综合19| 欧美亚洲韩国视频十五区| 嗯阿好爽好紧| 91N欧美| 久久伊人亚洲AV无码网站 | 精品超碰国产| 国产午夜无码片在线观看影视 | 偷偷人人精品女女久久| 嗯嗯啊啊的视频| 亚洲男人的天堂一区二区| 在线观看国产黄色| 国产精品久久99日日| 日本二三四区| 国产熟码AV| 欧美成人国产精品| 欧美色图成人网一区二区| 国产这里只有精品| 920日本午夜免费| 家庭乱伦网站国产| 久久肏大逼| 色黄色美女大长腿午夜视频| 豆花视频操逼网址| 人妻少妇久久中文字幕一区二区 麻豆| 五毛骚逼极品美女怕怕| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 蜜臀一二三区| 一二三区视频在线观看| 亚洲欧美色图片| 97色插| 国产人妻精品久久久一区二区三区| 日本一本道A级黄色毛片试看60分钟| 久久日韩精品一区二区| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 国产精品自在线发布| 天堂俺去俺来也www久久婷婷| aa片毛片| 精品国产91av一区二区三区| 老司机深夜18禁污污网站| 国产精品片| 97爱亚洲| 免费久久一级毛片大黄| 东北丰满熟女国产一区| 国产精品久久久久无码A√| 国产精品一区二区久久精品| 精品国模无码| 人妻偷拍一区二区三区| 2020中文在线一区二区三区| 午夜操逼不卡| 大伊香蕉在线视频免费| 丁香五月天啪啪| 丝袜喷水在线| 超碰人人干天天射| 太久视频| 久久久精品成人国产| 91性高潮久久久久久久久| 免费精品99| 无码伊人久久大杳蕉中文无码| 国产久久久久久久久一区二区| 九九色综合| 日韩紧密久久| 啊啊啊男女| 国产欧美在线观看免费观看| 天天操人人操狠狠插| 午夜一区二区三区国产| 人人考人人摸人人干| 成人婷婷丁香| 中文一区在线日| 久久久久久999| 欧美爱三级日韩久久| 1024人妻熟女一区二区三区| 蜜臀久久99精品久久久久久久久| 九九夜精品九九在线| 性欧美| 操b在线观看| 浪人综合网| 又黄又爽在线观看视频| 亚精品无码毛片一区二区三区| 校园春色美腿丝袜 | 4141514逼喷水三级片| 黄呦呦在线| 亚洲天堂2020| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 尤物av网站| 躁躁躁日日躁2020| 日本岛国黄色网址| 夜夜操夜夜高潮夜夜爽国产精品区| 中文字幕熟女人妻丝袜| 开心婷婷五月| 亚洲色交| 久久香蕉国产传媒一区剧情天美| 玖日综合网| 天天看天天在线精品| 91亚州欧美| 欧美999| 久久久com| 91亚洲网| 69AV女优男人的天堂| 97视频在线播放| 最新欧洲欧美日本激情网站| 日日骚一区二区三区| 精品在线观看视频在线| 四虎884| 殴美大黄片| 免看60秒涩涩视频| www网站黄| 日韩本不卡视频在线观看| 亚洲精品人妻吞精av| 久久熟女久| 日韩成人性爱AV| 啊啊啊啊在线播放| 人妻精品视频一区二区| 伊人操| 强奸少妇AV导航网| 2019精品国产无码成人| 国产精品第二页| 超97在线精品视频| 丝袜综合网| 18精品一区| 午夜啪| 欧美日韩大陆黑人少妇99| 隔壁邻居波多野结衣中文字幕| 99国产精品免费| 黑丝自慰喷水网站| 天天干电影| 亚洲综合另类欧美久久久| 欧美性生活男人的天堂| 美女让帅哥通她小鸡鸡| 激情婷婷五月天| 亚洲美女AV无码| 伊人精品视频| 色色激情| 囯戸精品高潮呻吟旡码| 亚洲美腿丝袜香蕉影视欧美成人| 狠狠久久亚洲欧美专区| av无码av无码专区| 秋霞怕怕片| 日本男人插女人的逼黄色| 亚洲一区二区性爱电影| 精品视频在线观看精品| 青青草华人在线欧美在线| 亚洲天堂综合AV| 91精品久久久| 97超碰超碰| 天堂资源站| 日韩在线女优天天干| 亚洲精品无码久久AV| 国产馆| www.91欧美| 这里有精品| 日日日日做夜夜夜夜无码| 欧美日韩久久精品爱爱| 亚洲精品黑丝| 嗯嗯啊啊好疼| 久都青青视频 | 色婷婷一区二区三区久久午夜成人不| 99国内精品| 国产三级多多影院2022国产AA一级毛片无码 | 亚洲97成人在线观看| 又黄又硬又粗又长国产视频| 天天摸夜夜操视频| 嗯嗯啊啊用力视频免费| 中文字幕 人妻不满 在线视频| 97在线观看播放视频| 欧美色图亚洲色| 久久久九九| 91九九九小逼| 久久99国产综合精品女同| 蜜乳AV色欲AVAV无码| 日韩综合成人免费视频| 啊啊啊好想要| 97超碰欧美手机| 91模特在线观看| 人妻五十路在线| 欧美一区二区日韩传媒搭讪精品| 97久精品| 精品无码久久久| 东京日日夜夜| 精品国产乱码久久久久久久久1| 国产女生在线| 亚洲精品三| 国产精品无码论坛| 在线v中文字幕一区二区三区| 韩日性爱av| 免费观看国产小粉嫩喷水精品午| 一级黄色性爱A级片| 中文字幕日韩精品久久| 自拍偷拍国产欧美日韩韩| 欧美色欧美| 久久九色| 午夜成人爽爽爽爽A片李冰冰| 91九色丨风韵犹存| 国产v亚洲v日韩v欧美v片另类| 天堂性色| JIZZJIZZ亚洲女人被躁| 久久只有精品| 一级AV性爱| 伊人久久综合影院精品久久久 | 久久超碰大香蕉| 夜夜骑操视频| 97中文字幕一区| 久久男人| 狠狠超| 亚洲欧洲av影音| 日韩有码 一区二区三区| 女性喷水高潮在线观看| 国产久久成人| 五月天丁香网| 国产人伦精品一区二区三区| 日韩精品大香蕉伊人在线| 欧美在线综合| 天美传媒婬乱在| 一二三区操逼国产91| 成人精品久久久午夜福利| 美女视频尤物网在线看| 欧美日韩操逼嗦吊| 美腿色图| 日韩国产九九精品一区二区三区毛片| 97色操| 伊人影院日本| 久久久国产亚洲精品系列| 久热伊人| 美女大乳久久久久久久女人18| 中文字幕AV片| 一本色道久久综合精品婷婷| 国产精品久久天天干| 最新中文字幕在线亚洲| 日本特黄f c2| 久久久久国产| 超碰97护士| xxxx网站亚洲精品| 亚洲欧洲小说图片视频 | 怡红院成人视频| 黄片免费视频2019| 人妻熟女字幕一区二区| 无码男人天堂| 香蕉欧美| 五月天精品| 97在线无精品| 亚洲人妻在线精品| 亚洲中文字母在线播放| 97精品第3页| 四虎免费在线观看| A片三级无码| 久久久久久久久久久久黄色 | 国产精品一区二区麻豆| AV一起草在线| 97午夜剧场日韩| 好爽要喷了| 黄色香蕉视频网站一区| 国产女人高潮视频| 日韩内| 青草青草久热| 91 亚洲情侣偷拍 久久| 97色伦97色伦国产欧美| 青青草原人妻| 欧美色欧美| av大香蕉| 日韩本不卡视频在线观看| 免费超碰97在线观看| 美女久久久久久久| 96精品久久久久久久久久| 色99视频| 校园春色 亚洲| 国产高清无码一区二区三区四区皇冠| 60秒免费视频| 91丨熟女丨丰满熟女| 天天综合网1| 最新日日夜夜天天干干| 男人的天堂色偷偷青青草视频婷婷网| 亲子敌伦对白在线播放| 91色女| 青青草毛片| 骚逼高潮久久精品| 日本精品999| 96AV精品| 亚洲欧美电影| 日韩激情视频| 凸凹视频在线观看| 超碰久超碰久| 鲁鲁色综合网| 十八禁视频一区二区| 自拍丝袜美腿人妻| 国产乱伦亚洲色图高清无码| 高潮综合网| 国产 热久久久久国产精品| 男人的天堂久久狠| 中文字幕在线高清男人的天堂| 中文字幕精品亚洲熟女| 五月丁香成人网| 一起草视频在线| 亚洲中文字幕有码视频一区二区三区| 无码不卡八戒| 精品妇操一区二区三区| 99久久久久| 日韩人妻丝袜中文字幕| 91撸色网 玖玖网 欧美| 美国日韩黄色片| 91宗合网| 欧美亚洲AN| 强奸乱伦大香蕉网| 超碰九区| h色99999| 色色无码| 大香蕉视频一二三区| 五十路人妻在线| 五月天婷婷基地| 成人精品无码| 夜夜做夜夜爽精品视频| 亚洲有码 欧美精品| 岛国1区2区3区在线观看| 囯产精品强| 在线观看一卡二卡| 老司机老司机午夜影院| 色臀AV| 欧美白嫩女HD| 99久久久久| 久久久久久久久久久免费精品| 国产AV天美传媒一区二区三区| 国产玖玖| 色在线亚洲视频www| 天天夜夜rb| 先锋音影AV| 五月天婷婷综合| 曰韩操B| 啊啊啊在线观看| 熟妇激情| 亚洲天堂情色| 97操97色| 深夜啪啪啪视频免费| 欧美极品性爱天天射| 欧美色女人| 久久99久久99精品天美传媒棢·纸:. | 91精品国产高清久久久久久,亚洲成人| 在线亚洲丝袜视频网站| 日本天天操| 岛国视频免费在线观看| 欧美大香蕉久| 天天干人人乐| 天天干1区2区在线| 欧美日动态视频| 亚洲综合春色| 9久热| 无码逼| AV一起草在线| 强奸乱伦AV一天堂网| 天躁夜夜躁2021| 蜜桃久久一区| 99蜜月精品久久| 欧美国产操逼| 97免费视频在线观看视频| 国产亚洲色婷婷99精品91| 熟女丰满人妻一区| 人妻在线中出视频| 欧美综合97www| 久久久一热在线播放| 欧美精品另类人妖xxxx| 97国产超湿| 日本免费不卡二区| 自拍丝袜美腿人妻| 超碰97首页| 99热18这里只有精品| 久久人妻一区二区三区高清| 精品二区三四区五电影 | 1024手机看片欧美日韩| 伊人aaa| 青青草无码视频| 亚春色色| 久久综合99| 情色av电影| AV色图| 日韩超碰97| 超清福利精品视频在线| 青青青青青手机视频| 亚洲精品天天影视综合网| 青青草色插素人| 伊香蕉综合久久久久久久噜噜噜| 日本韩国国产精品一区| 国产女生在线| 偷拍亚洲高清图片| 亚洲国产成人福利在线观看| ′ !γ}丶。。久久精品欧美一区二区三区| 亚洲污污网站| 97亚洲欧美日韩| 国产999精品久久久久久| 天天摸夜夜添无码小视频| 亚洲情色 自拍| 天天日天天干天天摸天天操| 欧美肥臀在线| 青草成人免费视频一COm| 欧美色图第一页| 国产精品麻豆成人av| 乱伦a片视频| 成人av免费观看| 日韩欧美女优电影| 欧美熟妇亚洲版| 夜夜高潮夜夜爽夜夜爱爱一区| 欧美综合自拍亚洲综合图| 夜夜爽夜夜高潮夜夜爽| 国产美女销魂在线观看不卡| 懂色AV蜜臀无码精品APP| 久热99| 视频二区熟女人妻| 91丨人妻丨国产丨丝袜| 亚洲精品性爱片| 日韩人妻资源网| 香蕉免费一区二区三区不读| 啊啊啊免费| 黄色大香焦1级‘′‘| 日韩三级一区 | 日韩成人电影AV| 欧美午夜视频| 国产综合色精品在线观看| 久久久网站| 青青草久草AV| 蜜乳AV.COM| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 色婷婷综合久久久久中文一区二区| 精品人妻15区| 手机看片1024你懂的国产| 日韩 人妻 精品| 欧美在线啊啊| 3571色综合一区二区二区| 天天摸天天操视频| 99热在线播放| 亚洲丝袜少妇在线| 久久久精品国产亚洲伊人| 日本一二区不卡| 91久久久久久久| 天堂亚洲精品| 加勒比无码一区二区三区| 精品免费一区| 天天内射| 中出91| 亚洲欧美第一页| 夜夜操夜夜爽夜夜高潮| 国产男女边吃边摸视频网站| 久久女同性恋一二区| 欧美丝袜制服久久| 强乱老妇中文字幕| 天堂国产AV| 奇米狠999| 丝袜视频网国产90| 激情四射婷婷四五月天| 亚洲国产麻豆一区二区三区| 亚洲天天自拍| 超碰人妻中文在线| 啊视频在线| AV女优男人的天堂| 国产视频第2页| 亚洲另类久操网| 亚洲第一狼人丝袜美女另类 | 97欧美色综合| 天天综合网久久ww| 五月天婷婷色色| 精品午夜福利国产一区二区在线观看| 快灬快灬 一下爽蜜桃在线观看| 99re这里只有精品中心播放 | 丁香婷婷九月| 国产精品国产自产高清AV| 一区二区三区国产在线播放| 亚洲女优有码无码高清| 日韩欧美资源| 91国产在线精品| 91N欧美| 伊人AAA| 久久久国产成人一区二区三区在线| 97操| av毛片aaaaa免费看| 久久精品一区二区| 久久久啊啊啊| 亚州综合在线| 1000部熟女视频在线观看| 青青青在线高清视频在线一二三四区| 美女网站黄页| 青青操在线视频| 日韩成人小视频| 蜜臀99精品国产高清在线观看| 美女天天干| 久草毛片| 色婷婷国产精品一区在线观看| 99热这里都是精品| 97在线免费看视频| 欧美日韩*字幕一区| 你懂的在线观看区国产| 天天色天天干天天爱| 韩国三级理论在线| 九九成人| 五月开心久久AV官网| 男人天堂最新手机版在线青青草| 欧中美三级一区二区三区| 久久男人的天堂| 免费视频在线一区二区不卡| 日韩中文字幕精品一区在线| 日韩啪啪视频| 亚州人妻| 中文字幕丰满子伦无码专区在线视频最新 | 黄色视频60分钟| 亚洲超碰AV| 成人在线视频二区| 啊啊在线| 日韩免费在线视频观看| 啊a一区在线| 欧美九一精品久久久熟妇| 日本一区二区中文字幕久久| 午夜一级免费毛片| 91成人在线| 中日韩久久久免费看| AAAA欧美日韩| 欧美躁死她一区二区| 午夜精品人妻二区三区| 91精品国产91综合久久蜜臀| 久久AV无码网址| 少妇精品久久久| 三级激情网站| 国产免费大片| 色图综合网| 少妇二级| 久久日本熟妇熟色一区| 色噜噜综合在线| 少妇熟女视频一二三区| 在线国产一区二区av| 日本高清一本二本免费不卡| 国产区性爱在线视频秋霞豆| 天天干夜夜肏| 草草网站影院白丝内射| 超碰精品人妻狠狠干| 伊人女女资源在线观看| 欧美激情一| 久99| 天天狠操| 骚日日av| 亚洲欧洲美腿丝袜| 极品销魂美女一区二区| 亚洲欧美色图片| 蜜臀久久久国产| 艹比视频国产精品| 中文久久久| 精品一区二区三区蜜桃臀赵总 | 免费看久久久性性| 一本久道久久综合狠狠爱一密臀精 | 亚洲国产成人精品女人久久久| 97超碰色五月| 丰满人妻无码一区二区三区| 美女91网| 久日综合网| 久久久成人国产精品无码| 青草精品视频-日本久久久久网站| 国产青一二三| 欧美亚洲日本激情在线| 久久久久九九九| 婷婷另类小说| 91久热这里只有精品| 日本123区操B视频| 另类TS人妖一区二区三区| 日曰骚久久精品| 欧美性,色九九| 99re视频在线观看这里只有精品| 久久精品国产亚洲AV片多多 | 成人性爱视频在线看| 亚洲欧洲日本精品中文a∨| 亚洲天天操| 成人精品欧洲亚洲| 欲射影视| 国产乱弄免费在线视频。 | 天天影视网综合少妇| 亚洲AV成人无码久久精品播放| 亚洲天天做日日做天天谢日日| 国产捆绑一区| 高清在线不卡一区二区 视频| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 夜夜操夜夜高潮夜夜爽国产精品区| 嗯嗯啊啊好疼| 欧美人妻中出| 后入福利| 夜夜欢天天干| 亚洲一区在线观看欧洲| 男人的天堂va在线| 极品销魂美女一区二区 | 亚洲成人激情小说视频| 国产精品无码成人精品| 亚洲天堂人妻熟妇视频| 日本操BAV| 日本片日本片祼观看网站在线看中文版网页在线看 | 天天综合精品| 日本九九久久99| 夜夜 中文视频rt| 东北老熟女| 五十路六十路七十路熟婆| 嫩草一区二区在线观看| 99这里有精品| 蜜桃臀 后入 一区 二区 三区 在线| 97中文字幕色| 日本 情色 1区| 亚洲伊人成综合成人网| 夜色AV无码手机在线影院| 婷婷五月天激情小说| 2019天天操天天爽天天拍| 天天天堂影视日韩亚洲91| 天天干18禁| 99re国产精品视频| 亚洲丝袜B诱惑| 香蕉99秘 一区精品蜜桃臀| 免费家庭乱伦视频| 久久久999日本大片| 国产自产22区| 日韩国产欧美伦理在线| 婷婷五月在线视频| 精品熟妇视频一区二区| 亚洲综合中文字幕有码| 韩日男人的天堂| 色五月av| 五月婷婷五月天| 插B在线观看| 青青操综合网| 亚洲精品蜜桃久久久久久久| 8x福利精品第一福利视频导航 | 最新AVzaixian| 日日不卡av| 九九热免费国产视频婷婷伊人五月| 色偷综合| 久久激情综合| nuu12国产麻豆精品| 色欲日韩欧美在线一区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 天天干天天干天天干| 精品日日人妻| 丰满欧美少妇| 被窝影院午夜看片无码| 好屌色综合| 丰满人妻av一区二区三区| 97超碰色中文字幕| 精品人妻美妇91job| 97资源站国产精品| 懂色AV一区二区三区| 国产女大学生AV| 天天看特黄的免费网站| 亚洲国产成人福利在线观看| 亚州精品人妻一二三区| 成人欧美一区二区三区黑人一| 亚洲加勒比| 熟女中出视频| 另类小色呦| 麻豆AV96熟妇人妻| 91日产欧美| 免费AV中文网在线观看| 开心激情站| 欧美92| 97在线视频观看| 日韩大香蕉AV影片| 69人妻精品一区二区绯色| rion磁力链接| 久久天天摸| 污色区网站| 日日日啊啊啊| 国产最新小视频在线播放下载 | 久久超碰免费的| 日韩av免费一级电影| 久久AV无码1区2区3区| 免费少妇一区二区| 久久久久9999精品九九九| 精品国产丝袜一区二区三区乱码| 97视频在线免费播放| 欧美精品1区2区3区| 久久久一区二区三区麻豆| 超碰人人妻| a片在线播放| 91欧美性| 激情色播| 日韩三级在线观看网站| 亚洲综合九| 综合久久中文字幕综合日韩精品| 超碰在线91| 久久久国产精品人妻丝袜| 日韩久久.一级黄色片| 毛片99-全集电影手机免费观看完整-B029AV | 久久HD| 91美女视频| 男人久久精品| 婷婷五月天色色| 久久久性| 久久色AV线| 色一射色一射| 日韩欧美中文| 啊啊啊免费| 嗯嗯啊啊视频一区二区三区| 欧美精品自慰系列寂寞少妇 | 日韩三级视频一区二区三区| 欧美日韩在线视频网站| 激情小说亚洲视频| 色欧美天天| 亚洲国产精品无码AV在线| 欧美亚洲丝袜人妻制服中文99| 97干色天堂| 天天看,天天做| 在线日韩精品一区二区三区| 亚洲偷91色| 天美传媒国产原创中文字幕亚洲欧美另类| 亚洲成人精品在线一区| 俺去啦自拍| 校园春色综合色| www色日本| a片久久久久久久久久久久 | 操操操操网黑人| 久热大香蕉| 亚洲一曲日韩精品| 亚洲图片欧美| 天天影视综合色| 日本大香蕉| 麻豆天美电影一区二区| 久草福利在线资源站| 亚洲精品免费中文字幕| 超碰97COm中文| 日日日日做夜夜夜夜做无码97| 69综合网| 久久国产精品一级二级三级| 一起草精品人妻| 插穴性爱视频在线观看| 69XX一中文字幕人妻91| 91色插| 欧美人妖内射| 97操综合| 97精品国产手机| 狠狠搞 亚洲91| 久久啊哟| 伊人天堂在线| 亚洲精品视频在线| 日韩,欧美,中文在线| 亚洲小电影免费涩涩成人在线高清| 91啪啪| 丁香九月婷婷| 欧洲精品一级二级精品综合视频综合| 97国产精品在线观看| 91超碰碰在线| 97视频www| 99黄页网站| 欧美aⅴ99久久黑人专区| 久久99国产综合精品女同| 亚洲天堂,男人| 九九热精品| 超碰91在线| 亚洲激情综合| 啊啊啊操一区| 日韩在线视频1234| 久久久久久久久久久久久久久性生活视频| 五月天成人综合| 激情五月天综合网| 99热亚洲| 蜜臀久久一区二区| 国产精品一区人妻精品阁在线| renqi久久久久久久久久久久| 五月天色图| 亚洲 日韩 欧美 国产综合体| 九九色热| 天天日B狠狠操| 97视频在线免费看| 欧美三级免费伊人| 久久一二三四五六七八九区区| 亚洲美女 晚间男人天堂| 区一二区日韩亚洲乱码av电影| 天天碰操中国年青熟妇| 天天摸天天碰天天添青青| 18岁禁 茉莉成人久久| 爱爱久久| 久久久久久无码人妻中文字幕| 日日摸日日弄日日拍| 欧美日韩欧美| 国产又黄又粗又猛大片| 午夜乱轮操逼视频免费看| 熟女精品va中文字幕| 欧美v亚洲v日韩v最新在线二区| 99日韩| 欧美日韩国产中文精品字幕自在自线, | 9精品在线| 本道在线| 亚洲熟女av中文字幕| 国模无码人体一区二区三| 综合操逼| 嗯嗯嗯好爽| 超碰地址97| 夜夜夜爽www精品视频| 亚洲福利影院一区久久| 成人一级性爱| 久久99久久99精品免视看婷婷| 国产视频一区二区在线观看| 中文字幕久久亚州无码| 中文字幕乱妇免费视频| 操逼逼一区视频| 亚洲日韩精品在线播放| 日本少妇va7777| 蜜桃臀一区二区aV| 成人免费性爱视视| A片 AV一级在线播放观看免费| 操狠狠| 婷婷九月国产| 精品一区二区三区国产| 看日韩操逼| 开心六月色| 密臀在线视频| 小视频玖玖| 丰满人妻一区二区三区在线| 超碰97资源网亚洲| 国产亚洲深夜激情| 色婷婷久久| 天天激色| 乱性AV| 五月天婷婷基地| 天天拍天| 岛国A V在线免费看| 色色99| 操老熟女AV| 少妇一级婬片免费放一级a性色.| 色色国产| 素人伊尹大香蕉免费下载视频| 韩日色费| 91九久| 麻豆 美女 丝袜 人妻 中文| 福利在线观看一区二区| 97色色色综合网站| 亚洲欧洲激情卡通另类文学四射小说网站 | 日韩久久.一级黄色片| 四月丁香婷婷| 91白嫩| 国产精品久久久鸭无码的功能| 日韩电影天堂视频一区二区| 国产精品人妻无码久久久互動交流| 国产又操| 免费97视频| 日本狂喷奶水在线播放212| 成人精品电影| 97欧美视频| 日韩有码一区三区| 精品免费囯产一区二区三区| 日本高清一区二区在线| 亚洲精品白丝| 这里只有精品视频在线观看麻豆| 99re这里只有精品3| 亚洲精品九九九| 亚洲 日本 一 二 三| 成人情色综合网| 操婷婷逼| 四虎影视国产精品| 亚洲操人| 精品人妻一区二区蜜桃视频| 国产18精品亚洲精品| 国产人妻精品一区二区三区秋霞| 精品少妇人妻av久久免费| 日本不卡二三区| 又粗又长又爽在线观看| 日本男人插女人的逼黄色| 免费无码国产精品v片在线观看| 97久久精品国产| 无码 黑人一区二区三区| 欧美少妇性乱| 人人摸人人摸人人干| 亚洲欧美视| 99碰碰| 91色拍| 鸥美精品一区二区久久婷婷| 国产精品视频自拍在线| av东京热男人的天堂| 黄色小视频日本txt| 四虎影视国产精品| 久久久九97| 国产在线能看的你懂的| 国产极品久久久| 国产精品久久久久久久毛片1| 婷婷精品国产欧美精品亚洲人人爽| 特级丰满少妇一级AAAA爱毛片| 久艹99| 久久怡红院| 免费家庭乱伦视频| 天堂网 主播 亚洲| 婷婷五月天激情网| 欲香欲色| 91爱欧美| 日本高清电影欧美色图| 五月婷婷丁香六月丁香| 亚洲欧洲激情| 亚洲第一页色| 国产精品日韩在线一区| 天天影视之亚洲综合网| 亚洲少妇色| 日本性交操一区二区不卡系列| 免费亚洲国产精品久久一区| 国产精品国产拍高清AV| 午夜成人爽爽爽爽A片李冰冰| 歐美性天天| www.久久爱| 国产精品视频91久久| 久久成人午夜狠狠| 少妇二级| 草草网站影院白丝内射| 97干在线视频| 亚洲欧美日韩国产丝袜自拍中文| 久久婷五月天| 激情五月天插| 欧美性爱一区二区三区| 国产亚洲色婷婷99精品91| 五月丁香六月婷综合成人综合| 国产无码精品久久久久久| 美女网站黄页| 18一区二区三区| 强奸乱伦动态污图免费| 日韩激情电影中文字幕| 骚熟女AV网| 99亚洲人人| 丁香激情网| 青娱乐国产盛宴视频| 日本激情免费大片| 久草在| 久久久久久亚洲精品不卡人乳| 亚洲免费成人在线高清无码视频| 亚洲熟妇白浆无码AV| 黑人天8A∨高清网站| 人妻人人操| 亚洲成人无码影院| 欧美成人性爱视频在线播放 | 欧美黄色片AAAAA| 亚洲 欧美 制服 另类 自拍| 国产精品网址| 成年人免费观看网站| 在线97在线| 欧美精品在线观看| 丁香六月激情综合| 欧美性爱91| 神马久久久久久| 欧美亚洲首页| 亚洲第一男人天堂| 亚洲宗合网| 丝袜视频一区二区在线播放国产中文| 日本超碰在线国产一区| 国产男女无套视频免费观看| 女人被男人桶爽视频网站| 搡老熟女免费视频| 老熟女综合| 亚洲色图 91| 日本五区不卡| 果冻传媒A片一二三区 | 全免费a敌肛交毛片免费| 欧美18 在线观看| 日本影视久久免费| 亚洲动态色图| 激情一区二区| 欧美综合天堂| 九九九九九九精品| 国际精品久久久| 0755午夜福利视频| av天堂加勒比| 欧美色交| 97中文综合| 久久午夜神马| 日韩十八禁| 精品999一区二区| 欧美性爱一区二区| 91天天| 操逼网站网站| 天天看精品动漫视频一区| AVE乱伦| 人人看人人插| 欧亚性爱在线视频| 亚洲色图欧美色图日韩色图| 国产免a费看黄片在线| 丰满岳乱妇一区二区三区| 日韩人妻有码免费视频| 大香蕉黄色一级片免费看| 隔壁邻居波多野结衣中文字幕| 日韩精品人妻一| 丁香六月东京热| 99无码视频|