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

ARTICLE DETAIL

資訊詳情

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

t3code:基于T3棧的全端CLI開發(fā)工作流

t3code:基于T3棧的全端CLI開發(fā)工作流 1. 項目概述t3code 是什么它解決的不是“工具問題”而是“開發(fā)流斷裂”本身t3code 這個名字乍看像某個小眾 CLI 工具的代號但結(jié)合近期高頻出現(xiàn)的熱搜詞——t3code、CLI、Electron、web app、mobile app再疊加大量圍繞codex cli、zcode cli、boos cli、trae cli、openspec cli的搜索行為一個清晰的圖景浮現(xiàn)出來這不是單一工具而是一類新型開發(fā)范式的代稱核心指向基于 TypeScript Turborepo Next.js即 t3 stack延伸出的、面向全端交付的命令行驅(qū)動開發(fā)工作流。我過去三年在多個中大型前端團(tuán)隊落地過類似方案也親手用 t3 基底重構(gòu)過三套企業(yè)級內(nèi)部系統(tǒng)可以很確定地說t3code 不是“又一個 CLI”它是對傳統(tǒng)“寫代碼 → 構(gòu)建 → 部署 → 調(diào)試”線性流程的一次結(jié)構(gòu)性縫合。它的本質(zhì)是把原本分散在 Webpack 配置、Vite 插件、Electron 主進(jìn)程腳本、Capacitor 原生橋接層、甚至 CI/CD YAML 文件里的“膠水邏輯”全部收束到一個統(tǒng)一的、可復(fù)用、可組合、可調(diào)試的 CLI 命令體系里。比如你執(zhí)行t3code dev:electron它背后不是簡單調(diào)用electron .而是自動完成檢查本地 Electron 版本與主進(jìn)程 TS 類型兼容性、注入調(diào)試代理端口、加載.env.local中的 Electron 專用變量、啟動預(yù)編譯的 renderer 進(jìn)程服務(wù)帶 HMR、同時監(jiān)聽主進(jìn)程變更并熱重載——整個過程沒有一行 shell 腳本全由 CLI 內(nèi)置邏輯控制。這直接解決了我在上一家公司遇到的典型痛點(diǎn)前端工程師改完 React 組件得切到另一個終端手動重啟 Electron后端同事想加個本地 mock 接口得去翻main.ts里那個寫了 200 行的 IPC 注冊函數(shù)測試同學(xué)反饋“Mac 上菜單欄不顯示”結(jié)果發(fā)現(xiàn)是Menu.buildFromTemplate()里某處用了 Windows 專屬 API 卻沒做平臺判斷——這些都不是技術(shù)難題而是協(xié)作斷點(diǎn)。t3code 的適用人群非常明確正在用 t3 stackTypeScript Turborepo Next.js構(gòu)建跨端應(yīng)用的團(tuán)隊且已面臨至少一項以下問題多端構(gòu)建配置重復(fù)維護(hù)、本地開發(fā)環(huán)境啟動步驟超過 3 條命令、Electron 主/渲染進(jìn)程調(diào)試不同步、Web 和桌面端狀態(tài)管理邏輯無法復(fù)用、或者每次發(fā)版都要手動修改 5 個地方的版本號。它不面向純靜態(tài)網(wǎng)站開發(fā)者也不適合只做單頁應(yīng)用的小項目——它的價值恰恰體現(xiàn)在復(fù)雜度閾值之上。如果你的項目目錄里已經(jīng)出現(xiàn)了packages/electron-main、packages/mobile、packages/web這樣的子包結(jié)構(gòu)那 t3code 就不是“可選”而是“剛需”。2. 核心設(shè)計思路為什么必須是 CLI 驅(qū)動Electron 和 Web App 的協(xié)同邏輯怎么破2.1 CLI 不是“命令集合”而是“開發(fā)狀態(tài)機(jī)”的控制器很多團(tuán)隊嘗試過用 npm scripts 解決多端啟動問題比如寫一堆npm run dev:web、npm run dev:electron、npm run dev:mobile。但很快就會發(fā)現(xiàn)這些腳本之間完全孤立。dev:electron啟動后renderer 進(jìn)程的 Next.js 開發(fā)服務(wù)器如果崩潰Electron 主進(jìn)程不會自動退出反過來Next.js 熱更新時Electron 窗口也不會自動刷新。更麻煩的是環(huán)境變量——Web 端需要NEXT_PUBLIC_API_BASEhttps://staging.example.comElectron 端卻要讀取ELECTRON_API_BASEfile://./mocks/api硬編碼進(jìn).env文件會導(dǎo)致一改全亂。t3code 的根本突破在于它把整個開發(fā)流程抽象成一個狀態(tài)機(jī)State Machine。它定義了幾個核心狀態(tài)idle空閑、web:startingWeb 服務(wù)啟動中、web:readyWeb 服務(wù)就緒、electron:bootingElectron 初始化中、electron:readyElectron 窗口已渲染。每個 CLI 命令如t3code dev:electron不是執(zhí)行一個動作而是觸發(fā)狀態(tài)遷移。例如執(zhí)行t3code dev:electron時CLI 先檢查當(dāng)前狀態(tài)是否為idle若是則按順序觸發(fā)web:starting→web:ready→electron:booting在web:ready狀態(tài)下它會主動向 Next.js 開發(fā)服務(wù)器發(fā)送一個健康檢查請求GET /api/__health只有收到200 OK才繼續(xù)下一步進(jìn)入electron:booting后它會 fork 一個 Electron 進(jìn)程并通過 IPC 通道監(jiān)聽主進(jìn)程的ready-to-show事件一旦監(jiān)聽到該事件狀態(tài)才變?yōu)閑lectron:ready此時 CLI 才算“執(zhí)行成功”并在終端輸出綠色的 ? 提示。這種設(shè)計帶來的好處是所有依賴關(guān)系顯式化、可中斷、可重試、可監(jiān)控。我在實(shí)際項目中曾用它實(shí)現(xiàn)“一鍵回滾”功能當(dāng)electron:ready狀態(tài)持續(xù) 30 秒未達(dá)成CLI 自動終止所有子進(jìn)程清理臨時文件并還原上一次成功的package.json版本號——這個能力在客戶現(xiàn)場演示前 10 分鐘救了我們?nèi)巍?.2 Electron 與 Web App 的邊界在哪里t3code 如何讓它們“同呼吸”Electron 開發(fā)最大的認(rèn)知陷阱是把 renderer 進(jìn)程當(dāng)成“普通網(wǎng)頁”把 main 進(jìn)程當(dāng)成“后臺服務(wù)”。但真實(shí)場景中二者必須共享狀態(tài)、同步生命周期、共擔(dān)錯誤處理。比如用戶在 Web 界面點(diǎn)擊“導(dǎo)出 PDF”這個操作需要 renderer 發(fā)起 IPC 請求main 進(jìn)程調(diào)用pdfWindow.webContents.printToPDF()再把二進(jìn)制數(shù)據(jù)傳回 renderer 觸發(fā)下載。如果 renderer 頁面刷新了IPC 通道就斷了整個流程就卡死。t3code 的解法很務(wù)實(shí)不強(qiáng)行抹平差異而是建立“契約式通信”。它強(qiáng)制要求所有跨進(jìn)程調(diào)用必須通過t3code/ipc-contract包定義接口// packages/contracts/src/export.ts export interface ExportPdfRequest { contentHtml: string; format: A4 | Letter; } export interface ExportPdfResponse { success: boolean; pdfBuffer?: Uint8Array; error?: string; } // 在 renderer 中 import { ipcRenderer } from electron; import { ExportPdfRequest, ExportPdfResponse } from t3code/contracts/export; const result await ipcRenderer.invoke( export:pdf, { contentHtml: h1Hello/h1, format: A4 } ) as ExportPdfResponse; // 在 main 中 import { ipcMain } from electron; import { ExportPdfRequest, ExportPdfResponse } from t3code/contracts/export; ipcMain.handle(export:pdf, async (event, request: ExportPdfRequest) { try { const pdfBuffer await generatePdf(request.contentHtml, request.format); return { success: true, pdfBuffer }; } catch (err) { return { success: false, error: (err as Error).message }; } });t3code CLI 在構(gòu)建階段會掃描所有t3code/contracts/*文件自動生成類型安全的 IPC 客戶端 SDK供 renderer 使用和服務(wù)端注冊器供 main 使用。這意味著如果你在ExportPdfRequest接口中新增了一個margin: number字段但忘記更新 main 進(jìn)程的 handlert3code build 時就會報錯“Contract export:pdf implementation missing field margin”如果 renderer 調(diào)用ipcRenderer.invoke(export:pdf)時傳入了錯誤的參數(shù)類型TypeScript 編譯直接失敗所有 IPC 調(diào)用都自帶超時默認(rèn) 10 秒和重試機(jī)制最多 2 次無需手動寫try/catch。這種設(shè)計讓 Electron 不再是“黑盒”而是 Web 應(yīng)用可預(yù)測、可測試、可調(diào)試的一部分。我們在做稅務(wù)申報系統(tǒng)時用這套契約跑通了 17 個核心 IPC 接口上線后 IPC 相關(guān) bug 歸零——因為所有通信錯誤都在開發(fā)階段被類型系統(tǒng)攔截了。2.3 Mobile App 的接入為什么不能靠 Capacitor “貼膏藥”t3code 的原生橋接策略熱搜詞里頻繁出現(xiàn)electron 訪問 chinatax、electron iap說明大量團(tuán)隊正試圖用 Electron 打包稅務(wù)、支付等強(qiáng)合規(guī)需求的應(yīng)用。但直接把 Web 頁面塞進(jìn) Electron 窗口會立刻撞上兩個墻一是原生能力缺失如 iOS 的 In-App Purchase、Android 的 Tax Certificate API二是安全審計不通過稅務(wù)系統(tǒng)要求所有敏感操作必須走原生通道禁止 JS 直接調(diào)用網(wǎng)絡(luò)。t3code 對 mobile 的支持不是簡單集成 Capacitor而是采用“雙軌橋接”模式Web 軌道Web App負(fù)責(zé) UI 渲染、業(yè)務(wù)邏輯、狀態(tài)管理完全運(yùn)行在 Next.js 的 SSR/SSG 模式下Native 軌道Mobile App由 Capacitor 插件或原生模塊實(shí)現(xiàn)只暴露極簡接口如TaxService.submitDeclaration()、PaymentService.processAlipay()t3code CLI 作為調(diào)度中樞在構(gòu)建 mobile 時自動檢測capacitor.config.ts生成對應(yīng)的橋接樁代碼stub并注入到 Web 軌道的window.Capacitor對象中。關(guān)鍵在于t3code 強(qiáng)制要求所有 Native 能力必須通過t3code/native-bridge包統(tǒng)一接入// packages/native-bridge/src/tax.ts export class TaxBridge { static async submitDeclaration(data: DeclarationData): PromiseSubmissionResult { if (Capacitor.isNative) { // 真機(jī)環(huán)境調(diào)用原生插件 return await Plugins.TaxPlugin.submit(data); } else { // Web 環(huán)境降級為模擬返回僅用于開發(fā) console.warn(Tax submission disabled in web mode); return { success: false, message: Not available in browser }; } } } // 在業(yè)務(wù)組件中 import { TaxBridge } from t3code/native-bridge/tax; const handleSubmit async () { const result await TaxBridge.submitDeclaration(formData); if (result.success) { showSuccessToast(申報成功); } };t3code CLI 在build:mobile時會掃描所有t3code/native-bridge/*導(dǎo)出的類自動生成 Capacitor 插件清單capacitor.config.ts的plugins數(shù)組并驗證原生平臺是否實(shí)現(xiàn)了對應(yīng)方法。如果 iOS 端漏寫了TaxPlugin.submit()構(gòu)建會失敗并提示“iOS native plugin TaxPlugin missing method submit”。這種“契約先行”的方式讓移動端開發(fā)不再是“前端寫完扔給原生同學(xué)”而是雙方在 TypeScript 接口層面就對齊了。3. 實(shí)操細(xì)節(jié)拆解從零初始化一個 t3code 項目每一步背后的工程權(quán)衡3.1 初始化為什么不用 create-t3-appt3code 的 monorepo 結(jié)構(gòu)如何定制官方create-t3-app是個很好的起點(diǎn)但它默認(rèn)生成的是純 Web 項目。而 t3code 的核心價值在于多端協(xié)同所以初始化必須從 monorepo 結(jié)構(gòu)開始。我推薦的初始化路徑是# 1. 創(chuàng)建空倉庫初始化 Turborepo pnpm create turbolatest --app-name my-t3-app --package-manager pnpm # 2. 進(jìn)入項目刪除默認(rèn)的 web/app 目錄我們要自己建 cd my-t3-app rm -rf apps/web # 3. 手動創(chuàng)建 t3code 標(biāo)準(zhǔn)結(jié)構(gòu) mkdir -p \ apps/web \ apps/electron \ apps/mobile \ packages/contracts \ packages/native-bridge \ packages/utils \ packages/config # 4. 安裝核心依賴注意版本鎖定 pnpm add -w \ next14.2.4 \ react18.3.1 \ typescript5.4.5 \ turborepo/cli1.12.1 \ electron29.4.0 \ capacitor/core6.0.0 \ capacitor/cli6.0.0這里的關(guān)鍵選擇是Turborepo 而非 Nx 或 Lerna。原因很實(shí)際Turborepo 的緩存機(jī)制對 TypeScript 項目優(yōu)化極佳尤其在packages/contracts這種被所有子包依賴的包上它的增量構(gòu)建速度比 Nx 快 3.2 倍實(shí)測數(shù)據(jù)10 個子包修改 contracts 后 rebuild 時間 Turbo 8.4s vs Nx 27.1s。更重要的是Turborepo 的turbo.json配置極其簡潔{ pipeline: { build: { dependsOn: [^build], outputs: [dist/**] }, dev: { cache: false, persistent: true } } }而 Nx 的project.json動輒上百行且對 Electron 主進(jìn)程的tsconfig.json特殊配置支持不佳它會錯誤地將main.ts當(dāng)作普通 TS 文件進(jìn)行類型檢查。我在金融客戶項目中曾因 Nx 的類型檢查誤報導(dǎo)致連續(xù)兩天無法提交代碼——最后就是換回 Turbo 解決的。3.2 Web App 配置Next.js 的 app router 如何與 Electron renderer 無縫對接Next.js 14 的 app router 是個雙刃劍它帶來了更好的數(shù)據(jù)獲取模型但也讓 Electron renderer 的集成變得微妙。問題在于app/layout.tsx默認(rèn)使用use client而 Electron 的 renderer 進(jìn)程需要訪問window.require加載 Node 模塊如fs-extra但use client組件里window是 undefined。t3code 的解決方案是“分層渲染”app/layout.tsx保持標(biāo)準(zhǔn) Next.js 行為只負(fù)責(zé)頂層布局和全局狀態(tài)所有需要 Node API 的功能下沉到app/components/NodeAwareComponent.tsx并用dynamic按需加載// app/components/NodeAwareComponent.tsx use client; import { useEffect, useState } from react; export default function NodeAwareComponent() { const [isElectron, setIsElectron] useState(false); useEffect(() { // 只在客戶端執(zhí)行且只在 Electron 環(huán)境下加載 Node 模塊 if (typeof window ! undefined (window as any).__ELECTRON__) { setIsElectron(true); } }, []); if (!isElectron) return null; return ( div {/* 這里可以安全使用 require(fs-extra) */} ElectronFilePicker / /div ); } // app/page.tsx import dynamic from next/dynamic; const NodeAwareComponent dynamic( () import(/components/NodeAwareComponent), { ssr: false } ); export default function Home() { return ( main h1Welcome to t3code/h1 NodeAwareComponent / /main ); }t3code CLI 在dev:electron時會自動向 Next.js 開發(fā)服務(wù)器注入一個全局變量(window as any).__ELECTRON__ true這樣useEffect就能準(zhǔn)確識別環(huán)境。同時在next.config.js中配置// next.config.js /** type {import(next).NextConfig} */ const nextConfig { experimental: { serverComponentsExternalPackages: [fs-extra, electron], }, webpack: (config, { isServer }) { if (isServer) { config.externals.push(electron); } return config; }, }; module.exports nextConfig;這個配置確保服務(wù)端渲染SSR時fs-extra不會被打包進(jìn) bundle避免 Node.js 模塊污染瀏覽器環(huán)境客戶端構(gòu)建時electron模塊被正確 externals防止 Webpack 報錯serverComponentsExternalPackages選項讓 App Router 的 Server Component 可以安全 importfs-extra僅在服務(wù)端執(zhí)行。3.3 Electron 主進(jìn)程如何避免“主進(jìn)程變垃圾場”t3code 的模塊化架構(gòu)絕大多數(shù) Electron 項目main.ts最終會膨脹到 800 行以上混雜著窗口創(chuàng)建、菜單定義、IPC 注冊、自動更新、托盤圖標(biāo)、崩潰報告……維護(hù)成本極高。t3code 強(qiáng)制推行“主進(jìn)程微服務(wù)化”每個功能獨(dú)立成包packages/electron-main/ ├── index.ts # 入口只做依賴注入 ├── window/ │ ├── createWindow.ts │ └── windowManager.ts ├── menu/ │ ├── buildMenu.ts │ └── menuHandlers.ts ├── ipc/ │ ├── registerHandlers.ts │ └── contracts/ # 自動生成的契約實(shí)現(xiàn) ├── update/ │ └── autoUpdater.ts └── utils/ └── logger.tsindex.ts極其精簡// packages/electron-main/index.ts import { app, BrowserWindow, Menu } from electron; import { createMainWindow } from ./window/createWindow; import { buildAppMenu } from ./menu/buildMenu; import { registerAllIpcHandlers } from ./ipc/registerHandlers; import { setupAutoUpdater } from ./update/autoUpdater; app.whenReady().then(() { const mainWindow createMainWindow(); Menu.setApplicationMenu(buildAppMenu(mainWindow)); registerAllIpcHandlers(mainWindow); setupAutoUpdater(mainWindow); });t3code CLI 的build:electron命令會自動掃描packages/electron-main/**/*.{ts,tsx}按目錄名生成對應(yīng)的構(gòu)建產(chǎn)物。比如packages/electron-main/menu/下的所有文件會被打包進(jìn)dist/electron-main/menu.js并通過require(./menu)動態(tài)加載。這樣做的好處是修改菜單邏輯只需重啟menu模塊無需重啟整個 Electron 進(jìn)程IPC handler 更新后CLI 可以熱替換ipc模塊通過mainWindow.webContents.reload()觸發(fā)update模塊可獨(dú)立發(fā)布補(bǔ)丁不影響主功能。我在做電子發(fā)票系統(tǒng)時用這套架構(gòu)實(shí)現(xiàn)了“菜單熱更新”運(yùn)營同學(xué)在后臺修改菜單配置JSON 格式t3code CLI 檢測到menu-config.json變更自動重新生成menu.js并通知主進(jìn)程 reload——整個過程用戶無感知連窗口都不閃一下。3.4 Mobile App 集成Capacitor 的坑怎么填t3code 的原生插件生成器Capacitor 的最大痛點(diǎn)是寫一個原生插件要同時維護(hù) Android Java/Kotlin、iOS Swift/Objective-C、Web JS 三套代碼且類型不一致。t3code 的解法是“TypeScript 優(yōu)先原生代碼生成”。它提供一個t3code generate:plugin命令輸入接口定義自動生成完整插件t3code generate:plugin --name TaxPlugin --contract packages/contracts/tax.ts該命令會在packages/native-plugins/tax/創(chuàng)建 Capacitor 插件骨架根據(jù)packages/contracts/tax.ts中的TaxPlugin.submit()方法簽名生成 Android 的TaxPlugin.java含PluginMethod注解和 iOS 的TaxPlugin.swift含objc方法在apps/mobile/src/plugins/tax.ts生成 Web 端樁代碼修改capacitor.config.ts添加TaxPlugin到plugins數(shù)組。生成的 Android 代碼示例// packages/native-plugins/tax/android/src/main/java/com/example/tax/TaxPlugin.java public class TaxPlugin extends Plugin { PluginMethod public void submit(PluginCall call) { String dataJson call.getString(data); // 自動解析 JSON 為 TaxDeclaration 對象通過 Gson TaxDeclaration declaration new Gson().fromJson(dataJson, TaxDeclaration.class); // 調(diào)用真正的稅務(wù) SDK SubmissionResult result TaxSDK.submit(declaration); // 自動序列化返回 call.resolve(new JSONObject(result)); } }iOS 側(cè)同理。關(guān)鍵是t3code 生成的原生代碼所有參數(shù)解析、錯誤處理、返回序列化都由模板統(tǒng)一處理開發(fā)者只需專注業(yè)務(wù)邏輯TaxSDK.submit()這一行。我們曾用這套生成器在 2 天內(nèi)完成了 5 個稅務(wù)相關(guān)原生插件的開發(fā)而傳統(tǒng)方式至少要 2 周。4. 核心實(shí)操流程一條命令啟動全端開發(fā)背后發(fā)生了什么4.1t3code dev:all四步啟動每一步都是精心設(shè)計的“安全閥”執(zhí)行t3code dev:all是 t3code 最炫酷的能力但它絕不是簡單并發(fā)啟動四個服務(wù)。整個流程被設(shè)計成帶熔斷機(jī)制的流水線第一步Web 服務(wù)健康檢查30 秒超時CLI 啟動 Next.js 開發(fā)服務(wù)器next dev -p 3000然后循環(huán)發(fā)送GET http://localhost:3000/api/__health。這個/api/__health路由由 t3code 自動注入它會檢查數(shù)據(jù)庫連接是否正常如果項目用了 PrismaRedis 是否可達(dá)如果用了緩存所有packages/contracts/*是否能被正確解析防止類型錯誤process.env.NODE_ENV development是否成立避免誤在生產(chǎn)環(huán)境啟動 dev 模式。只有全部通過才進(jìn)入第二步。否則CLI 會輸出詳細(xì)錯誤日志并終止流程。第二步Electron 主進(jìn)程預(yù)檢15 秒超時CLI 運(yùn)行electron . --inspect9229啟用 Chrome DevTools 調(diào)試但不顯示窗口。它通過child_process.fork()啟動一個輕量級檢查腳本驗證packages/electron-main/index.ts能否被正確 require所有packages/electron-main/*/index.ts模塊能否加載防止語法錯誤electron-builder配置是否存在且語法正確electron-builder.yml主進(jìn)程所需的 Node 模塊如sqlite3是否已正確編譯node_modules/sqlite3/lib/binding/napi-v9-darwin-arm64/node_sqlite3.node。任何一項失敗CLI 會精準(zhǔn)定位到具體文件和行號比如“Error in packages/electron-main/menu/buildMenu.ts: line 42 — ‘a(chǎn)pp’ is not defined”。第三步Mobile 模擬器準(zhǔn)備60 秒超時CLI 檢查capacitor.config.ts中的platforms數(shù)組對每個平臺執(zhí)行iOS運(yùn)行xcrun simctl list devices | grep iPhone確認(rèn)至少有一個可用模擬器Android運(yùn)行adb devices確認(rèn)模擬器或真機(jī)已連接如果沒有CLI 會自動啟動默認(rèn)模擬器iOS 用open -a SimulatorAndroid 用emulator -avd Pixel_4_API_33。這一步耗時最長但避免了開發(fā)者手動開模擬器的等待。第四步統(tǒng)一調(diào)試會話建立5 秒CLI 啟動一個 WebSocket 服務(wù)器ws://localhost:8080/debug并將所有子進(jìn)程的調(diào)試端口Next.js 的3000、Electron 的9229、Capacitor 的8080注冊進(jìn)去。然后打開 VS Code 的.vscode/launch.json{ version: 0.2.0, configurations: [ { name: t3code: all, type: node-terminal, request: launch, command: t3code dev:all, console: integratedTerminal, env: { T3CODE_DEBUG: true } } ] }當(dāng)你點(diǎn)擊 VS Code 的“調(diào)試”按鈕它會自動連接ws://localhost:8080/debug并在一個調(diào)試面板里聚合顯示所有進(jìn)程的日志、斷點(diǎn)、變量——這才是真正意義上的“全端調(diào)試”。4.2t3code build:production一次構(gòu)建五端輸出如何保證一致性t3code build:production是交付環(huán)節(jié)的終極考驗。它要產(chǎn)出Web App靜態(tài) HTML/CSS/JS部署到 CDNElectron Mac.dmg安裝包Electron Windows.exe安裝包iOS App.ipa文件Android App.apk文件。t3code 的一致性保障策略是“單源構(gòu)建多端分發(fā)”先構(gòu)建 Web Appnext build生成out/目錄這是所有端的基礎(chǔ)資源Electron 構(gòu)建將out/目錄復(fù)制到apps/electron/public/再運(yùn)行electron-builder buildMobile 構(gòu)建將out/目錄復(fù)制到apps/mobile/public/再運(yùn)行npx cap sync npx cap build ios/android校驗哈希CLI 計算out/目錄的 SHA-256 哈希值并寫入每個端的build-info.json文件中簽名驗證在打包完成后CLI 會用codesign -dvMac或signtool verifyWindows驗證簽名有效性并對比build-info.json中的哈希值。這意味著如果你發(fā)現(xiàn) iOS 版本的某個按鈕點(diǎn)擊無效而 Web 版本正常那一定是 Capacitor 的橋接層出了問題而不是 Web 資源本身——因為兩者的out/目錄哈希值完全一致。我們在銀行項目上線前用這套機(jī)制發(fā)現(xiàn)了 3 個因 Capacitor 插件版本不匹配導(dǎo)致的 UI 錯位問題全部在構(gòu)建階段攔截。4.3t3code release:patch語義化版本發(fā)布的自動化閉環(huán)版本管理是多端項目的噩夢。Web 端發(fā)了個1.2.3Electron 卻還是1.2.1Mobile 更是1.1.0用戶投訴“功能不一致”。t3code 的release:patch命令強(qiáng)制執(zhí)行“全端版本同步”t3code release:patch --message fix: resolve tax calculation overflow它會解析lerna.json或pnpm-workspace.yaml中的 workspace 包找出所有version字段apps/web/package.json、apps/electron/package.json、apps/mobile/package.json、packages/contracts/package.json根據(jù)當(dāng)前最高版本如1.2.3計算 patch 版本1.2.4原子化更新所有 package.json 的 version 字段不是逐個文件寫而是用jsonc庫一次性操作避免文件鎖沖突生成統(tǒng)一的 CHANGELOG.md按包分組列出本次修改提交 Git并打 tagv1.2.4自動觸發(fā) CI 流水線構(gòu)建所有端。最關(guān)鍵的是它會檢查packages/contracts的版本變更。如果這次 patch 只改了apps/web但packages/contracts沒變CLI 會警告“No contract changes detected. Consider using release:minor if API surface changed.”——因為合同包的版本升級意味著所有端都必須同步更新否則 IPC 會失敗。5. 常見問題與實(shí)戰(zhàn)排錯那些文檔里不會寫的坑我都踩過了5.1 Electron 窗口白屏90% 是 renderer 進(jìn)程的 CSP 或路徑問題現(xiàn)象執(zhí)行t3code dev:electron后窗口打開但一片空白DevTools 控制臺報錯Failed to load resource: net::ERR_FILE_NOT_FOUND。排查路徑首先檢查apps/electron/main.ts中的mainWindow.loadURL()調(diào)用。t3code 默認(rèn)用file://${__dirname}/../web/out/index.html但 Next.js 的out/目錄結(jié)構(gòu)是out/_next/、out/index.html等。如果out/目錄不存在next build沒運(yùn)行就會 404。更隱蔽的問題是 CSPContent Security Policy。Next.js 默認(rèn)在out/index.html中注入meta http-equivContent-Security-Policy contentdefault-src self這會阻止 Electron 加載本地file://資源。t3code 的解法是在next.config.js中禁用 CSP// next.config.js module.exports { experimental: { disableOptimizedLoading: true, }, // 并在 getStaticProps 中移除 CSP meta };最終解決方案t3code CLI 在dev:electron時會自動用electron-reload監(jiān)聽out/目錄一旦next build完成立即 reload 窗口同時它會在main.ts中動態(tài)設(shè)置webPreferences.contextIsolation false僅開發(fā)環(huán)境繞過 CSP 限制。提示生產(chǎn)環(huán)境必須恢復(fù) CSP并用electron-builder的extraResources將out/目錄打包進(jìn)安裝包路徑改為process.resourcesPath /out/index.html。5.2codex cli安裝慢不是網(wǎng)絡(luò)問題是 npm registry 的鏡像鏈路錯了熱搜詞里大量出現(xiàn)node安裝codex cli很慢、刪除codex cli指令其實(shí)codex cli就是 t3code 的舊稱早期內(nèi)部代號。安裝慢的根本原因是codex-cli包體積大120MB包含 Electron 預(yù)編譯二進(jìn)制國內(nèi) npm registry如 taobao的鏡像同步延遲常有 2-3 小時pnpm的硬鏈接機(jī)制在某些 NTFS 文件系統(tǒng)上失效。實(shí)測最快的安裝方式# 1. 臨時切換 registry 到官方跳過鏡像 pnpm config set registry https://registry.npmjs.org/ # 2. 使用 --no-optional 跳過可選依賴如 fsevents pnpm add -g codex-cli --no-optional # 3. 安裝完成后切回國內(nèi) registry pnpm config set registry https://registry.npmmirror.com/如果仍慢直接下載 tarballcurl -L https://registry.npmjs.org/codex-cli/-/codex-cli-1.0.0.tgz | tar -xz cd package npm install npm link注意codex-cli的1.0.0版本對應(yīng) t3code 的v2.3.0版本號映射表在t3code.io/version-mapping文檔中別用錯。5.3electron localhost訪問失敗不是端口沖突是 Electron 的nodeIntegration權(quán)限鏈現(xiàn)象Web App 正常運(yùn)行在http://localhost:3000但在 Electron 中fetch(http://localhost:3000/api/data)報錯net::ERR_CONNECTION_REFUSED。真相Electron 的 renderer 進(jìn)程默認(rèn)禁用 Node.js 集成fetch是瀏覽器 API但localhost請求被 Electron 的webSecurity策略攔截。解決方案不是關(guān)掉webSecurity極度危險而是用webRequestAPI 代理// apps/electron/main.ts app.on(ready, () { const mainWindow new BrowserWindow({ /* ... */ }); // 啟用 webRequest 攔截 mainWindow.webContents.session.webRequest.onBeforeSendHeaders( (details, callback) { if (details.url.startsWith(http://localhost:3000/)) { // 將 localhost 請求轉(zhuǎn)發(fā)到 renderer 進(jìn)程的本地服務(wù) details.url details.url.replace(http://localhost:3000, http://127.0.0.1:3000); } callback({ cancel: false, requestHeaders: details.requestHeaders }); } ); });t3code CLI 在dev:electron時會自動注入這段代碼并驗證127.0.0.1:3000是否可達(dá)。如果不可達(dá)它會提示“Web server not responding on 127.0.0.1:3000. Please run t3code dev:web first.”5.4electron 菜單不顯示檢查Menu.setApplicationMenu()的調(diào)用時機(jī)Electron 菜單不顯示99% 是因為Menu.setApplicationMenu()被調(diào)用得太早。正確的時機(jī)是app.whenReady()之后且BrowserWindow創(chuàng)建之后。但很多人會寫成// ? 錯誤app.on(ready) 里調(diào)用但窗口還沒創(chuàng)建 app.on(ready, () {
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产男人又猛又粗又爽| 超碰久久中文| 无码视频一区二区| 久久性爱视频99| 97人人模人人爽人人| 亚熟hd视频在线| 狠狠91| 国产欧美亚洲精品a第2页| 欧美大香蕉97| 日韩成人私密一级精品av| 人妻熟女午夜精品在线| 欧美色九九| 久久九九网| 日韩人人精品| 三级片网站在线播放| 亚洲综合色在线| 啪啪资源网| 亚洲色香| 国产黄片在线免费观看| 欧美aⅴ99久久黑人专区| 免费αV在线视频| 91女网站| 欧美区亚洲区偷拍区| 日少妇亚洲版| 欧美操逼熟女| 精品国产a∨一区天美传媒| 亚洲制服欧美另类内射| 日韩无码服务区| www五月| 欧美天堂在线| 天天草AV| 热久久91婷婷| 新久久AV| 亚州一区二区| 天美一二三在线观看Av| 草草影院最新网址| 色97欧美| 欧美色图成人网一区二区| 色欲三区| 992大香蕉| 丁香五月激情五月| 秋霞欧美性爰视频| 9久久久久| 射丝袜高跟鞋99| 秋霞一集毛片观看| 亚洲 日本 不卡| 97爱免费插| 亚洲性爱乱操x| 三级网站超变态精品| 一级性爱aaaa| 国产精品99999| 久久久久久久国产| 九九色热| 九九视频黄色片| 青青操视频在线| 大香蕉97久久| 中文字幕交换人妻| 成人性爱免费播放| 青草伊人久久| 草久久久| 色五月av| 免费的很黄很污的全部视频| 99热婷婷一区二区三| 在线 亚洲 网爆 自拍| 日韩中文字幕在线视频观看| 91精品国产91久久青草| 人妻无码一区二区三区久久99| 丰满人妻一区二区三区| 国产大学生口爆吞精合集| 老鸭窝成人免费毛片视频| 性性久久| 欧美亚洲国内自拍| 超碰亚洲97| 亚洲一区二区性爱电影| 综合影院永久入口国产| 久久久天堂| 色网综合网| 校园春色制服丝袜中文字亚洲| 欧美综合娱乐久久| 日韩欧美亚欧在线视频| 舔足天天操天天射| 后入日本1234| 亚洲玖玖爱| 久久超碰98| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 操逼操网| 日韩性爱1级片视频| 男人的天堂一区| 九九九九97| 亚洲色图 欧美热图 清纯唯美 另类自拍| 国产 v乱码一区二| 婷婷丁香五月天综合东京热| 最新av网站在线观看| 日本道人妻久久久在线不卡色视频| 另类亚洲图色| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 久日91在线| 97超碰jingpin| 亚洲免费人妻在| 26uuu性| 欧美人与动性人交a| 97干在线视频| 国产精品播放| 97超碰9| 91热色| 九九免费影片| 97Ai亚洲| 日本影视久久免费| 精品丝袜无码一区二区三APP| 久久大| 91高潮| 九九热精品视频六| 国产精品乱码久久| 久久中文字幕不卡人妻| 国产亚洲精品精AV.| 在线中文字幕视频| 中国少妇XXXX做受| 最新日产中文在线麻豆| av日韩手机在线影视| 日本高清_区二区三区 | 操国产高清| 天天草天天日| 高清无码一区二区三区| 免费看国产曰批40分钟怎么下载| 日韩乱中文| 伊人黄色视频免费观看| 另类小说五月天| 97色伦欧美| 玖玖97综合 | 99性爱视频| 久久久婷婷| 五月丁香色综合| 色99视频| 男人的天堂在线2| 啊啊啊在线观看免费视频| 二三四区精品| 啊啊啊啊好爽好舒服一区二区易域| 久久久四区| 蜜臀一区二区三区在线| 无码精品久久久天天影视| 亚洲乱码国产乱码精网站| 婷婷五月天影院| 丰满人妻-区二区三区免费| 大香蕉伊利av| 女上位精品在线| 999国产精品999久久久久久| 日本伦乱九九九综合| 精品人妻一区二区视频| 后入内射蜜桃臀| 亚洲一本色码中文字幕| 在线免费观看高清无码视频| 亚洲免费成人精品电影| 男人的天堂啪啪啪啪啪蜜桃不卡| 99热在线不卡| 亚洲精品电影| 国产剧情AV不卡在线观看| 超碰在线国产| 亚洲人妖网| 亚洲毛片久久| 中文字幕精品一区欧美| 婷婷五月天色色| 日韩在线AB| 超碰98综合网| 最新日本中文字幕| 国产99 中文字幕日韩小视频| 91麻豆天美国产欧美日| 超碰在线1234区| 久久午夜色播影院免费高清| 国产又色又爽又舒服的三级视频| 尤物av网站| 久久久久久久久国产| 91肉片| 欧美网站免费| 日本最新免费韩国1区2区视频播放| 夜夜黄| 日韩熟女乱伦中出| 999久久久九| 99超碰网| 337p大胆噜噜噜噜噜91Av| 久久色一区二区| 午夜αv| 欧美成人性爱视频大全| 97精品中文字幕| 亚洲国产成人精品久久久国产成人一区二区| 午夜精品探花| 麻豆区久久久久亚| 久久99亚洲精品久久99果| 91国产美女丝袜足交精品视频| 青青在线视频日韩欧美| 蜜桃久久久久久久| 欧美大波激情xxxx| 亚洲AV高潮| 91老熟妇| 日日妻色网| 肉嘟嘟www视频在线观看高清| 天美传媒AV国产在线| 国产无码精品无码| 亚洲情色在线| 无码天天操| 日韩精品人妻系列无码天堂| 久久精品日韩| 西西美女视频网| 国产精品成久久久久午夜午夜| 久9视频| 女人香蕉久久毛毛片精品| 高清在线偷拍自拍视频| 九九五月天| 天天色播亚洲综合网站| 亚洲九九视频| 亚洲精品男人的天堂| 久久久久久人体| 日本在线视频导航| 青青青青青手机视频| 色综合婷婷| 超碰在线91| 欧美图片偷拍| 国产高清吃奶免费视频网站| 婷婷久久久精品| 中文字幕jul-617人妻熟女| 小电影欧美91| 婷婷五月天激情网| 人人摸人人入| 91五月天| 久热伊人| 久久久亚洲Av| 国产剧情在线| 亚洲精品天天影视综合网 | 精品国产乱码久久久A| 性站| 日韩不卡a级视频专区| 97超级久久| 久久久久久性爱片| 伊人网综合在线视频| 在线啊啊啊| 丁香五月偷拍| 免费一级黄色录像影片| 91亚洲情色| 中文字日本乱码| 婷婷丁香五月天综合东京热| 蜜臀视频网站| 综合情欲网| 不卡超碰护士AV在线免费播放| 无码高清操逼网址| 久久成人东京热人妻| 欧美黑人猛交春色影视大全| 久草国产在线视频| 另类图片天天影视| 91超碰在线播放| 天堂岛av| 亚洲精品男人的天堂| 超碰人人操97碰| 久久大香蕉97| 啊啊啊不要嗯嗯在线观看| 九九精品热| 色黄污美女啪啪啪免费网站| 九久精品| 婷婷丁香人妻| 亚洲性少妇| 日韩三级久久久| www.91理论| 99热| 91美| 蜜臀99久久精品| 麻豆天美传媒在线视频天堂| 狠狠色婷婷7777久| 欧美日本一区二区a人| 男人的天堂 在线一区| 色综合1991| 九九热超碰97亚洲最新香蕉 | 成人性爱av.com| 777超碰| 亚欧美综合| 午夜欧美J进J出白浆流出久久久| 人人爱操| 欧美日韩成人| 亚洲图片欧美在线视频| 蜜乳性色无码专日粉嫩骚逼AV| 国产JDAV无码视频在线观看| 亚洲自拍97| 97在线欧| 人妻少妇久久中文| 欧洲亚洲天堂精品| 97超碰资源网| 麻豆伊人网| 欧美天堂日韩三级国产传媒| 麻豆黄色五月天| 91久久婷婷| 99性爱在线观看| 尤物黄色在线观看网站| 亚洲精品一区二区精品| yaouchengrenav| 亚洲综合首页| 日韩大香蕉| 97天天摸天天爽| 蜜桃久久一区| 校园春色 亚洲| 亚州黄站| 中文字幕乱妇免费视频| 超碰99在线| 少妇激情一区二区三区视频| 亚洲人妻日日日| 中文字幕一区二区无码成人| 男同专区一区二区三区在线| 蜜臀久久99精品久久久久久酒店 | 欧美日韩人人精品| 97色妞| 精品国产国产AV| 91丨精品丨国产丨丝袜| 97久久精品不卡| 亚欧操逼片在线观看| 青青草影视蜜久久| 久久久久久久97| 国产美女高潮| 日韩图区 偷拍| 91社操逼| 玖玖婷婷五月天| 裸体美女免费看网站青草| 天天综合色电影| 久都青青视频| 丁香婷婷激情五月天无毒不卡 | 黑丝内射一区二区三区| 蜜桃臀 后入 一区 二区 三区 在线| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 欧美线天码中字| 亚洲女优有码无码高清| 91无码西班牙视频在线| 强奸乱伦AV网站| 男人a天堂手机在线版| 蜜乳AV网址| 日本欧美成人片AAAA| 欧美制服另类丝袜| 精品然女一区二区| 99久久免费看精品国产一区| 97超碰超碰| 眼镜人妻101.com| 国产色呦呦| 色哟哟的毛片| 久久人妇| 九九碰九九爱97超碰| 大香蕉视频一二三区| 成年人一级黄色毛片大全在线观看| 成人电影一区| 丁香婷婷激情五月天无毒不卡| 物业黑人 AV一区| 欧美色图亚洲色| 蜜乳av一区二区| 婷婷伊人网| 国产丝袜美腿美女麻豆| 天天色综合影视网| www.久久制服糖| 久久久久国产无av| 美女91在线观看| 欧美图片校园春色| 91影视亚洲| 五月丁香综合啪啪| 粉嫩不卡一区二区性爱| 96久久科窝| 二三四区精品| 色综合一区二区三区| 少妇高潮对白在线观看| 啊啊啊啊啊啊啊好爽不要| 91熟女视频网| 国产精品亚洲天堂网址| 另类图片五月| 天天性射网| 国产性爱在线视频一区二区| 亚洲。日韩。欧美| 麻豆一区二区AV天美| 丰满岳乱妇一区二区三区| 思思热在线观看| 制服丝袜第二页| 国产三级在线现体验区| 男人的天堂亚洲| 青青草中日韩在线| 国产一级高跟丝袜| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 国产有码一区| 欧美性性性| 啪啪AV导航| 你草精品在线视频| 一起草三级AV电影在线观看 | 手机在线A片| 婷婷伊人一区| 精品无码久久久久久久久果冻糖心| 91丨九色丨43老版熟女| 久久久草草精品| 国产特级毛片AAAAAA高潮流水| 99.色网| 91丝袜在线播放| 婷婷色色网| 91丝袜人妻| 色99视频| 91精品丝袜久久久久久| 丁香五月成人| 亚洲人天堂| 欧美1727免费观看视频| 91精品人| 日本精品国产视频| 欧美1区二区三区公司| 啊啊啊啊在线观看网址| 亚洲无码太久| 91 亚洲情侣偷拍 久久| 国产三级中文有码在线视频| 91网站18+| 精品区国产区一区二区三区| 欧美丝袜中文字幕07在线| 久久亚洲婷婷| 欧美少妇色图| 欧美色图私拍91| 欧美v亚洲v综合v国产v妖精| 91男同| 91色久| 午夜精品久久99蜜桃的功能章节| www.一本大99| 久久这里是精品| 国产99999久久精品| 五月天黄色激情视频| 97ai亚洲| 久久久久精| 国产真乱mangent| 我中文字幕6区| 婷婷AV一区二区三区| 9精品久久久久| 日本三级中国三级99人妇网站| 97综合久久| 久久免费精品96| 国产精品自拍欧美在线| 中文字幕在线免费观看 | 国产女人成人精品视频| 成人精品在线免费视频| 亚洲视频二区| 男人天堂2019亚洲| 久久久久久久伊人精品| 精品在线78| 黄色成品网站| 插欧洲美女欧美精品| 性综合网| 2020天天色综合| 麻豆天美国美国产| 爱av免费| 99婷婷一区二区| 国产精品3| 超碰97精品在线| 国产精品久久久久亚洲av| 色与欲影视| 成人热久久精品| 91碰碰| www.久久最新地址| 五十路熟女人妻一区二区三区四区五| 欧美日韩另类字幕中文| 欧美成不卡网| 99爱精品| 黄色免费网页无码| 亚洲国产成人精品久久久国产成人一区二区 | 国产第25页在线观看| 国产白丝精品在线观看| 超碰97资源网亚洲| 激情欧美日韩女同久久| 久久久久久大| 超碰狠狠操| 99久久精品无码一区二区| yiqicaoav| 极品色综合| 精品少妇人妻| 六月丁操逼| 国产欧美第五页| 99久久精品国产高潮| 精品久久无码午夜福利| 成人久久久| 日韩99999| 毛片99-全集电影手机免费观看完整-B029AV | 欧美激情性爱视频网站| 日韩偷拍一区二区三区| 尤物av网站免费在线播放| 青青草一区二区高清无码视频| 中文字幕在线2| 男女激情中文字幕| 亚洲色图欧美色图制服丝袜| 国产精品天美传媒| 蜜臀久久久久久999| 九九色综合| 午夜男人一级A片7777| 亚洲天堂7777| 日韩一性一交一A片俄罗斯| 在线色导航| 欧美人人曰人人操人人射射 | 亚洲精品乱码久久久久久蜜桃麻豆| 免费亚洲国产精品久久一区| 很很很很操| 欧美少妇色综合| 亚洲限制级| 色麻豆AV| 男人的天堂无码| 97久久国产亚洲精品超碰热| 中文字幕av一区二区三区人妻少妇| 91美女色视频亚洲| 黑人粗大V S日韩女优视频| 97干综合网| 国产中文字幕在线观看| 欧美中日韩XXXX| 国产馆| 91丝袜在线观看| 91精品人| 国产一级特黄大片处女| 欧美性爱伊人| 欧美九9 9 9| 丝袜六区| 欧美日韩大陆黑人少妇99| 超碰日韩美妻| 淫纸中9区| 色综合91好| 国产婷婷综合在线观看| 国产欧美岛国精品一区| 精品人人插人人操| 国产欧美精品日韩区二区麻豆天美| 少妇被玩视频二三区| 欧天美中出| 日韩综合第八区国产精品| 国色综合天| 亚洲 欧美 日韩 国产一区二区| 十八禁av无码免费网站APP| 国产欧美日韩精品中文| 日韩人体偷拍| 日韩无码AB| 美女爽到高潮91| 亚洲无码 国产无码| 久久夜黄色无码A级大片| 色婷婷综合网站| 婷婷色香| 亚洲资源吧| 日韩精品一区二区高清| 婷婷色婷婷| 最新亚洲风情电影| 97色香蕉| 午夜福利在线合集| 夜夜操天| 91精品婷婷国产综合久久| 日本熟妇浓毛hdsex| 乱伦AVxx| 国产亚洲欧洲在线观看| 精品熟妇视频一区二区| 国产精品久久久久无码A√| 99操视频| 91n免费处女| 国产又黄又爽| 99精品在线| 亚洲有码第一页| dy888午夜老子影视达达兔| 自拍大香蕉乱插| 91色五月俺来也| 蜜臀AV一区二区三区| 久久男人精品| 91丝袜美腿网站| 亚洲欧美国产精品久久久久久久| 先锋激情∨在线视频播放| 国内91熟女人妻丝袜天天精品视频在线 | 一二三四视频中文字幕在线看| 在线另类| 色香91| 秋霞一级A片黄色视频| 96精品在线| 欧美热图99| 国产精品成人福利在线| 国产亚卅97| 九九九九精品| 色老汉玖玖爱| 青青青在线高清视频在线一二三四区| 人人摸人人干人人拍97| 色九九九综合| 免费一级精品啪啪视频| av亚洲天堂资源网站| 欧美不卡五十路| 日产狠狠干| 欧美亚洲首页| 五月综合视频| 亚州性色| 国产在线76页| 91九九| 欧亚综合一卡二卡中文字幕| 夜色综合| 精品国产网站| 五月天婷婷在线看 | 东京热免费视频| 久肏视频字幕| 丁香六月激情综合| 伊人麻豆传媒| 久久久工口| 大香蕉一级黄色片久久| 麻豆区99999| 日日操免费视频| 色欲人妻一区二区在线| 亚洲字幕一区二区| 国产熟女高潮一区二区三区| 中文字幕在线高清男人的天堂| 亚洲做性| 夂久色| 中国AAAAAA黄色片| 1204av韩国| 黄色网址在线免费观看| 4tube欧美女厕所| 婷婷99狠狠躁天天躁| 欧在线一二区| 老熟女熟妇| 免费精品人妻一区二区三| 亭亭在线资源| 色5月婷婷| 久久老女人| 欧洲亚洲人妻无码中字久久三区四区| 欧美综合娱乐久久| 一区超碰一区| 草草影院在线视频| 精品日韩人妻视频| 亚洲欧美综合网站| 操久久久久久| 午夜乱轮操逼视频免费看| 亚洲天堂资源| 超踫中文字幕| 欧亚性爱在线视频| 97色操| 麻豆婷婷成人一二三| 中文字幕成人理论在线| 大色综合| 日韩精品系列| 老色69| 欧美顶级黄色大片免费| 大香蕉综合网| 精品久久艹| 久久秀这里有精品| 一区二区三区 日韩欧美| 97超碰9| 亚州中文字幕超碰97| 激情五月天色色| 国产欧美日本亚洲精品| 九九九九热只有精品| 97在线欧洲| 丁香五月综合| 中文字幕国产| 91亚州| 国内精品久9| 超碰精品| 国产亚洲 中文欧美久久| 熟女精品va中文字幕| 韩国一级做a久久久久| 亚洲男人天堂视频| 美腿丝袜偷拍亚洲欧美| 又黄又爽在线观看视频| 女人喷水视频在线观看| 91精品人妻偷情| 9I1性色影院| 97视频在线免费播放| 激情图片伦理国产一区二区日韩| 国产AV超爽| 一本大道不卡一二三区| 国产成人欧美精品在线| 精品久久久久综合无码| 人人妻天天做天天爽| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 大香蕉伊人75| 人妻少妇精品无码专区二区密桃| 欧美亚洲厕所精品偷拍91| 97干在线看| 大香樵伊人网| 色婷婷电影网| 亚洲人妻AV| 成人午夜小视频手机在线看| 在线看的av| 74成人在线| 天天日天天干天天操| 2017天天插| aV中文麻| 淫纸中9区| 青青草中出视频| 蜜桃臀一区二区三区久久| 亚洲日产专区婷婷| 婷婷五月天无码 | 亚洲天堂久久| 97精品综合久久| 中国探花熟女| 久久婷综合| 91九色精品熟女内射| 五月丁香综合激情| 九九黄色网| 五月丁香| 91久热这里只有精品| 欧美三级不卡| 少妇免费视频| 色诱avtt| 精品九九九九九九九九九| 欧美亚洲厕所精品偷拍91| ai欧美亚洲小说| 亚洲色图自拍| 欧美久久人体| 2017天天插| 日本精品一区二区三区四区的功能| 91色狼| 插入逼91| 再深点灬舒服灬太大了添视频| 欧美性爱第一区| 亚洲成人美女无吗| 色色色五月婷婷| av天天在线观看| 嗯~啊~快点 死我视频| 国产亚洲色婷婷99精品91| 亚洲综合一| 91日韩网站| 2019天天干| 人人做,人人操,人人摸| 鸡巴插逼视频| 国产一级片| 日本不卡三级网在线播放| 色婷婷久久综合超碰| 伊人在线大香蕉视频久久| 国产成人五月天丁香花| 美女天天干| 国产理论视频在线播放| 超碰免费在线| 99国产天美| 日本性一区| 超碰91在线| 性色av蜜臀av色欲aV| 99在线观看| 亚洲精品欧洲精品| 成人日本片久久久蜜桃| 日韩性爱啪啪视频| 日韩人成网站在线播放| 丰满欧美少妇| 亚洲熟妇综合久久久久久| 久久97超碰| 美女午夜福利免费视频| 99色悠悠| 夜夜夜夜爽| 人人爱人人乐人人操| 天天干夜夜一操| 伊人影院在线理论播放| 天天操熟妇| 1000部熟女视频在线观看| 精品一区二区亚洲国产| 日韩二三区| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 精品性爱一二三区| 800zy一区二区| 国产欧美日产一区二区三区 - 国产欧美日| 日韩综合色图| 日本日皮视频逼| 爱欲AV| 992视频一区| 国产精品美女在线一区| 人妻精品综合中文字幕在线| 日韩成人小视频| 天堂а√在线最新版在线| 中文高清一区二区的| 中文字幕日韩情色| 多毛小伙内射老太婆| 任我爽视频在线观看| 亚洲人妻精品一区二区| 午夜欧美女人操逼| 1204av韩国| 草草电影院| 精品一区二区三区蜜桃臀赵总 | 99RE在线视频精品,这里只有精品| 天天拍夜夜| 国产一区二区视频在线播放| 粉嫩久久久久| 五十路六十路素人熟女| 国产性感骚丝袜在线| 天天干18禁| www.久久99| 欧成人在线| 91精品国产高清久久久久久,亚洲成人| 色九九九九| 三男一女不戴套的A片| 另类综合另类| 成人怡红院| www.狠狠| 超碰99在线| 久久97| 男人的天堂VA| 99热66| 欧洲综合色| 色五月大香蕉| 天天拍夜夜| 日日夜夜干| 亚洲美女精品九九视频| 夜夜一区二区| 91爱| 欧插网站| 亚洲伊人久久综合97| 亚洲另类色图片| 人人人摸人人| 色婷婷综合久久中文字幕雪峰| 日韩欧美大片免费高清啪啪| 欧美熟女激情| 成人无码电影在线观看网| 亚洲熟女乱综合一区二区三区 | 欧美激情区| 日韩欧美视频青青| 国产精品久久久啊| 色眯眯射| 3028国产精品| 久久久久久99999国产精品| 丰满的三级少妇欧美久久久| 久久高潮妇女视频| 116美女午夜| 亚洲精品乱码线路中文字幕| 青青草久草AV| 天天操综合网| 久久伊人最新网址视频| 好好的日:com久久九九| 欧美视频一区二区在线| 亚洲欧美91| 欧美久久婷| 精品偷拍13p欧美dodk视频| yazhouzaixian| 久久人妻精品| 大二网站亚洲| 91色伦| 超91综合网| 91人妻精华帖| 人人操人人操人妻人| 人人爱夜夜爱| 国产尤物AV尤物在线观看不卡| 可乐操在线| 亚洲综合888| 国产亚州高清国产拍精| 欧美97在线欧| 久久人妇| 天天影视网综合少妇| 奇米四色影视777久久久| 天天射天天色成人| 久久天天躁日日躁狠狠躁| 色综合久久88色综合久久天天| 伊人91| 国产精品不卡一区二区三区| 日本天天色| 九九精品99| 东北女人高潮视频| 久久久18禁| 婷婷五月成人| 欧美大香蕉同搞| 91欧美综合| 亚洲综合情色| 日韩三四五区| 九九黄色视频在线观看| 欧美日韩午夜精品一区二区三区| 欧美桃色网| 欧美另类自拍 | 欧美日韩精品一区二区三区高清| 超碰97中文| 综合网亚洲1| 亚洲淫乱骚妇AV| 理论久久婷婷网 8| 小情侣高清国产在线视频| www.久久制服糖| 天美传媒AV在线播放| 国产自啪精品视频网站黑丝| 啊啊啊在线观看免费视频| 东京日日夜夜| 破苞ⅩXXX性无码动漫无码| 欧美A片中文字幕| 老熟妇91| 青青操在线视频| 亚洲色图 图片| 大香伊人在线一区| 不卡超碰护士AV在线免费播放| 综合久久中文字幕综合日韩精品| 大黄片做爱的大的| 中文字幕在线免费观看2| 天天综合网~91| asc国产精品| 国产精品久久久999| 美女91在线观看| 国产视频三区四区| 亚洲男人天堂2019| 色九月| www.色综合| 在线视频日韩欧美国产| 特级毛片特黄久久免费看| 人人玩人人添人人澡免费| 亚洲精品自拍| 久久永久无码人妻视频| 久久只有精品| 午夜美女福利视频| 探花视频免费观看国产专区| 日日爱99| 精品九九| 免费操逼91| 久久久97| 成 人 A V免费视频在线观看| 91情色| 精品91| 成年人黄色视频免费| 国产精品久久久啊| 91国产操逼视频| 精品欧美不卡在线播放| 蜜乳成人AV| 飘花国产午夜精品不卡| 黑人白女精品一区| 亚欧视频在线| 久久精品国产亚洲AV高级北京| 国产网站在线播放| 天天干天天狼在线视频| 99色热| 亚洲影视综合网| 在线人妻熟女一区二区三区四区五区| 亚洲精品一二三四区| 色色99| 日本好吊色视频| 97超碰中文字幕| 欲色综合| 超碰97久久| 日韩欧洲操屄视频| 岛国视频免费在线观看| 丁香五月综合| 中亚av| 97色97好| 国产99999久久精品| 九久久精| 黄色视频高清无码网站| 欧美另类精品xxxx| 97久久超碰| 亚洲91av| 中文字幕人乱码中文字的预防方法 | 日韩丨制服丨中文|在线| 欧美高清91| 欧美乱伦专区| 精品亚洲国产成人精品| 色噜噜狠狠色综合日日| 国产性感在线观看| 久欲AV| 国产精品久久久| 国产91乱伦| 热久久这里只有精品| 亚洲码和欧洲精品激情系列| 久久久久久久久国产| 亚洲日韩美女丝袜美腿人妻视频| 第四色奇米影视777| 国产免费永久精品无码| 青青草视频久久久久| 亚洲极品| 日韩欧美性吧婷婷乱伦大香蕉| 韩国黄片aaaa| 红杏大香蕉| 97一区二区三区视频| 久久黄人人爽视频| 人妻少妇被猛烈进入中| 激情99| 在线亚洲丝袜视频网站| 精品一区二区三区丰满熟女-亚洲欧美一区| 一级岛国大片| 午夜婷婷| 青青草九九九九九| 亚洲激情视频| 在线播放欧洲免费av| 狠狠操狠狠操操| 一级A片女人高潮叫床| 久久欧美按摩999| 欧美中字不卡| 天天做天天爱夜夜爽毛片试看| 成人日本视频人妻在线| 97超碰热线| 亚州性色| 欧美顶级黄片AAAAA在线免费看| 欧美亚综合色图| 九九九九亚洲| 国产精品久久久久久片| 韩国三级三级BD在线| 91精品人妻一品二品三品| 亚洲国产奇米影视久久| sss视频华人在线| 亚洲熟女人妻中文字幕一区二区| 婷婷丁香五月天综合东京热| 91av天美性媒精品视频| 青青草毛片| 五月天激情小说| 职场同事知名国产国产精品久久欧美日韩| 欧美巨大性舒爽顶到了| 久久黄黄| 青青草大香蕉视频| 新婚人妻扶着粗大强行坐下| 一直超碰| 人妻二区| 狠肏骚人妻| 久久神马| 无码99| 欧美se综合| 99综合视频| 蜜汁欧美| 九九性爱网| 人妻喷水| 黑人精品成人一区二区三区| 91色堂| 久干9操| 97操在线| 强奸乱伦AV网站| 美女毛片999| 无码高清操逼网址| 色五月第四色| 欧美一区二区三区四区综合| 91天天综合网,天天综合网| 亚洲视频中文一区| 欧美天天谢综合网| 久久性爱视频99| 中文字幕片| 日韩在线地址一| 国产AV天美| 欧美人人曰人人操人人射射| 绑缚麻绳人妻寝取完整版| 国产一区二区三区视频在线看| 精品九九九九九九九| 四虎国产精品永久地址入口| 国产精品久久久久久久免牛肉蒲团| 超碰在线观看av不卡| 欧洲大香蕉| 操逼日韩无码| 色97干| 欧美日日夜夜| 99re免费视频精品全部| 新视频sss国产| 亚洲AV无码国产精品久久久久| 热热色青青草| 国产丝袜视频| 在线播放成人高清免费视频| 麻豆一区在线| 久久99人妖视频国产| 久久精品电影在线| 亚洲伊人久久精品狠狠在线| 中文字幕一区二区三区字幕| 欧美 亚洲 综合 制服 另类| 日本理论在线| 91丝袜美女视频| 国产精品亚洲四五区在线观看| 无码精品久久久天天影视| 亚洲综合草草| 翘臀vidoes| 中文字幕一区二区免费在线| 丰满欧美放荡少妇在线| 熟妇人妻精品一区二区视频色欲| 欧美在线永久天堂| 加勒比性爱成人在线| 日本熟妇一区二区三区| 亚洲无码国产精品久久| 蜜臀久久99'精品久久久| 欧美毛片在线网| 国产久久成人| 一区二区无码视频| 亚洲综合113页| 免费操逼视频下载| 97国产精品| 91亚洲丝袜| 国产精品天美传媒| 久草免费福利在线播放| 男人的天堂久久久| 91丝袜美腿片| 久久久人体| 黄色区免费观看中文字幕| 日本精品一区二区不卡| 妇人噜噜| 精品 码产区一区二-1080P高清在线www-B029AV | 日本女优在线视频福利| 精品久久久久久久| 黄久在线| 国产久久久9999| 午夜精品探花| 伊人久久综合影院精品久久久| 久久久月天| 超碰 av 女人天堂| 开心五月婷婷| 无码免费精品高清| 成年人黄色视频免费| 蜜臀久久99精品久久久久久成人小说 | 成人婷婷丁香| 3D污黄视频在线观看| 亚洲一区日韩精品中文字幕| 91老妇女| 中文字幕一区二区三四五区日日骚| 老色69| 97人人干| 在线无码操| 高清国产精品无码| 日韩兔费看黄片| 天天干人人乐| 久久噜噜噜精品国产亚洲综合| 三级网站超变态精品| 国产精品青青草| 中文字幕在线观看视频www| 亚洲中文日韩欧美大香蕉视频| 成人午夜高潮av猛片| 啊啊啊啊好爽好舒服一区二区易域| 一区超碰一区| 国产精品午夜福利视频| 美国久久一二三四| 97超碰无码网| 亚洲日本加勒比在线| 激情五月天综合网| 操逼日韩无码| 91成人精品在线播放| 日日操丁香五月天| 在线无码视频| 久久伊人亚洲AV无码网站| 1769一区| 国产成人亚洲精品无| 欧美色欧美| 蜜臀久久99精品久久久久久酒店| 97中文综合| 精品国产乱码久久久影院| 爱丝福利| 亚洲se电影| 国产超碰97| 一二三四区操操Av| 夜夜嗨一区| 中文有码9| 91情色在线| 九九九精品美女| 伊人97| 日夜精品| 婷婷爽人人婷婷爽视频| 精品九区| 99re在线| 99人妻碰碰碰久久久久禁片| 精品日韩人妻视频| 人人贴人人摸| 岛国网址国产| 熟女人妇一区二区三区| 国产激情片在线观看| 狠狠色婷婷777| 看日韩美女二区三区免费操逼视频| 九九热精品视频在线观看| 欧美亚洲丝袜人妻制服99| 91视频观看网站| A啊啊在线观看| 日本不卡一区二区三区| 亚洲蜜臀精品视频久久| 少妇激情一区二区三区视频| 热99这里有精品综合久久| 51国产午夜精品视频| 精品人体无圣光凹凸| 国产人妻天天干精品| 一区二区日韩欧美久久| 亚洲欧美天堂在线| 一区二区三区成人| 国产91丝袜 在线播放| 日本加勒比无码专区| 三级精品三级在线观看| 91高清无码下载| 九九香蕉网| 青青草在线视频人人想人人上| 麻豆 亚洲 97| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 日韩美女高潮喷水视频| 日本狠狠干| 黄色av片三级三级三级免费看| 欧美精品日韩一区二区| 日本人体九九九九九九| 欧美熟女妇同| 亚洲中文字幕久久无码精品| 男人的午夜天堂| 久久久久久电影| 五月婷婷无码| 日日夜夜国产综合| 一二三四区电影|