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

在瀏覽器中,把 Vite 跑起來了!

系統(tǒng) 瀏覽器
大家好,我是 ssh,前幾天在推上沖浪的時候,看到 Francois Valdy 宣布他制作了 browser-vite[1],成功把 Vite 成功在瀏覽器中運行起來了。這引起了我的興趣,如何把重度依賴 node 的一個 Vite 跑在瀏覽器上?

大家好,我是 ssh,前幾天在推上沖浪的時候,看到 Francois Valdy 宣布他制作了 browser-vite[1],成功把 Vite 成功在瀏覽器中運行起來了。這引起了我的興趣,如何把重度依賴 node 的一個 Vite 跑在瀏覽器上?接下來,就和我一起探索揭秘吧。

簡而言之的原理

  • Service Worker[2]:用來取代 Vite 的 HTTP 服務器。
  • Web Worker[3]:運行 browser-vite 來處理主線程。
  • 文件系統(tǒng)被一個 in-memory 的模擬文件系統(tǒng)替代。
  • 轉換特殊擴展名 (.ts, .tsx, .scss…) 的導入。

遇到的挑戰(zhàn)

沒有真正的文件系統(tǒng)

Vite[4] 用文件系統(tǒng)完成了很多工作。讀取項目的文件、監(jiān)聽文件改變、globs 的處理等等……在瀏覽器的模擬實現(xiàn)的內(nèi)存文件系統(tǒng)中,這些就很難實現(xiàn)了,所以 browser-vite 刪除了監(jiān)聽、globs 和配置文件來把復雜性降低。

項目文件被保存在內(nèi)存文件系統(tǒng)中,所以 broswer-vite 和 vite plugins 可以正常處理它們。

沒有 “node_modules”

Vite 依賴 node_modules 的存在來解析依賴。在啟動時會把他們預打包(Dependencing Pre-Bundling)[5]來優(yōu)化。

同樣為了降低復雜度,所以 broswer-vite 非常小心的從 Vite 中刪除了 node_modules 解析和依賴預打包。

所以使用 browser-vite 的用戶需要創(chuàng)建一個 Vite plugin[6] 來解析裸模塊導入。

正則表達式“后行斷言”

Vite 中的一些代碼用了后行斷言[7]。在 Node.js 里沒問題,但是 Safari 不支持。

所以作者重寫了這些正則。

熱更新(HMR)

Vite 用了 WebSockets[8] 來在服務端(node)和客戶端(browser)之間同步代碼變更。

在 browser-vite 中,服務端是 ServiceWorker + Vite worker,客戶端是 iframe。所以作者把 WebSockets 切換成了對 iframe 使用 post message。

如何使用

截止本文撰寫時間為止,這個工具還沒有做到開箱即用,如果想使用的話,需要閱讀很多 Vite 內(nèi)部的處理細節(jié)。

如果感興趣的話,可以保持關注 browser-vite’s README[9] 來獲取最新的使用方式。

安裝

安裝 browser-vite npm 包。

  1. $ npm install --save browser-vite 

或者

  1. $ npm install --save vite@npm:browser-vite 

來將 "vite" 的 import 改寫到 "browser-vite"

iframe - browser-vite 的窗口

需要一個 iframe 來顯示由 browser-vite 提供的內(nèi)部頁面。

Service Worker - 瀏覽器內(nèi)的 Web 服務器

Service Worker 會捕獲到來自 iframe 的特定 url 請求。

一個使用 workbox[10] 的例子:

  1. workbox.routing.registerRoute( 
  2.   /^https?:\/\/HOST/BASE_URL\/(\/.*)$/, 
  3.   async ({ 
  4.     request, 
  5.     params, 
  6.     url, 
  7.   }: import('workbox-routing/types/RouteHandler').RouteHandlerCallbackContext): Promise<Response> => { 
  8.     const req = request?.url || url.toString(); 
  9.     const [pathname] = params as string[]; 
  10.     // send the request to vite worker 
  11.     const response = await postToViteWorker(pathname) 
  12.     return response; 
  13.   } 
  14. ); 

大多數(shù)情況下,對 "Vite Worker" 發(fā)送消息用的是 postMessage[11] 和 broadcast-channel[12]。

Vite Worker - 處理請求

Vite Worker是一個 Web Worker,它會處理 Service Worker 捕獲的請求。

創(chuàng)建 Vite 服務器的示例:

  1. import { 
  2.   transformWithEsbuild, 
  3.   ModuleGraph, 
  4.   transformRequest, 
  5.   createPluginContainer, 
  6.   createDevHtmlTransformFn, 
  7.   resolveConfig, 
  8.   generateCodeFrame, 
  9.   ssrTransform, 
  10.   ssrLoadModule, 
  11.   ViteDevServer, 
  12.   PluginOption 
  13. from 'vite'
  14.  
  15. export async function createServer = async () => { 
  16.   const config = await resolveConfig( 
  17.     { 
  18.       plugins: [ 
  19.         // virtual plugin to provide vite client/env special entries (see below) 
  20.         viteClientPlugin, 
  21.         // virtual plugin to resolve NPM dependencies, e.g. using unpkg, skypack or another provider (browser-vite only handles project files) 
  22.         nodeResolvePlugin, 
  23.         // add vite plugins you need here (e.g. vue, react, astro ...) 
  24.       ] 
  25.       base: BASE_URL, // as hooked in service worker 
  26.       // not really used, but needs to be defined to enable dep optimizations 
  27.       cacheDir: 'browser'
  28.       root: VFS_ROOT, 
  29.       // any other configuration (e.g. resolve alias) 
  30.     }, 
  31.     'serve' 
  32.   ); 
  33.   const plugins = config.plugins; 
  34.   const pluginContainer = await createPluginContainer(config); 
  35.   const moduleGraph = new ModuleGraph((url) => pluginContainer.resolveId(url)); 
  36.  
  37.   const watcher: any = { 
  38.     on(what: string, cb: any) { 
  39.       return watcher; 
  40.     }, 
  41.     add() {}, 
  42.   }; 
  43.   const server: ViteDevServer = { 
  44.     config, 
  45.     pluginContainer, 
  46.     moduleGraph, 
  47.     transformWithEsbuild, 
  48.     transformRequest(url, options) { 
  49.       return transformRequest(url, server, options); 
  50.     }, 
  51.     ssrTransform, 
  52.     printUrls() {}, 
  53.     _globImporters: {}, 
  54.     ws: { 
  55.       send(data) { 
  56.         // send HMR data to vite client in iframe however you want (post/broadcast-channel ...) 
  57.       }, 
  58.       async close() {}, 
  59.       on() {}, 
  60.       off() {}, 
  61.     }, 
  62.     watcher, 
  63.     async ssrLoadModule(url) { 
  64.       return ssrLoadModule(url, server, loadModule); 
  65.     }, 
  66.     ssrFixStacktrace() {}, 
  67.     async close() {}, 
  68.     async restart() {}, 
  69.     _optimizeDepsMetadata: null
  70.     _isRunningOptimizer: false
  71.     _ssrExternals: [], 
  72.     _restartPromise: null
  73.     _forceOptimizeOnRestart: false
  74.     _pendingRequests: new Map(), 
  75.   }; 
  76.  
  77.   server.transformIndexHtml = createDevHtmlTransformFn(server); 
  78.  
  79.   // apply server configuration hooks from plugins 
  80.   const postHooks: ((() => void) | void)[] = []; 
  81.   for (const plugin of plugins) { 
  82.     if (plugin.configureServer) { 
  83.       postHooks.push(await plugin.configureServer(server)); 
  84.     } 
  85.   } 
  86.  
  87.   // run post config hooks 
  88.   // This is applied before the html middleware so that user middleware can 
  89.   // serve custom content instead of index.html. 
  90.   postHooks.forEach((fn) => fn && fn()); 
  91.  
  92.   await pluginContainer.buildStart({}); 
  93.   await runOptimize(server); 
  94.    
  95.   return server; 

通過 browser-vite 處理請求的偽代碼:

  1. import { 
  2.   transformRequest, 
  3.   isCSSRequest, 
  4.   isDirectCSSRequest, 
  5.   injectQuery, 
  6.   removeImportQuery, 
  7.   unwrapId, 
  8.   handleFileAddUnlink, 
  9.   handleHMRUpdate, 
  10. from 'vite/dist/browser'
  11.  
  12. ... 
  13.  
  14. async (req) => { 
  15.   let { url, accept } = req 
  16.   const html = accept?.includes('text/html'); 
  17.   // strip ?import 
  18.   url = removeImportQuery(url); 
  19.   // Strip valid id prefix. This is prepended to resolved Ids that are 
  20.   // not valid browser import specifiers by the importAnalysis plugin. 
  21.   url = unwrapId(url); 
  22.   // for CSS, we need to differentiate between normal CSS requests and 
  23.   // imports 
  24.   if (isCSSRequest(url) && accept?.includes('text/css')) { 
  25.     url = injectQuery(url, 'direct'); 
  26.   } 
  27.   let path: string | undefined = url; 
  28.   try { 
  29.     let code; 
  30.     path = url.slice(1); 
  31.     if (html) { 
  32.       code = await server.transformIndexHtml(`/${path}`, fs.readFileSync(path,'utf8')); 
  33.     } else { 
  34.       const ret = await transformRequest(url, server, { html }); 
  35.       code = ret?.code; 
  36.     } 
  37.     // Return code reponse 
  38.   } catch (err: any) { 
  39.     // Return error response 
  40.   } 

查看 Vite 內(nèi)部中間件源碼[13] 獲取更多細節(jié)。

和 Stackblitz WebContainers 相比如何

["WebContainers"](https://blog.stackblitz.com/posts/introducing-webcontainers/ ""WebContainers""):在瀏覽器中運行 Node.js

Stackblitz 的 WebContainers 也可以在瀏覽器中運行Vite。你可以去優(yōu)雅的去 vite.new 擁有一個工作環(huán)境。

作者表示自己不是 WebContainers 方面的專家,但簡而言之,browser-vite 在 Vite 級別上模擬了 FS 和 HTTPS 服務器,WebContainers 在 Node.js 級別上模擬了 FS 和其他很多東西,而 Vite 只需做一些額外的修改就可在上面運行。

它可以將 node_modules 存儲在瀏覽器的 WebContainer 中。但它不會直接運行 npm 或 yarn,可能是因為會占用太多空間。他們將這些命令鏈接到 Turbo[14] ———— 他們的包管理器。

WebContainers 也可以運行其他框架,如 Remix[15]、SvelteKit[16] 或 Astro[17]。

這很神奇?這是令人興奮的?? 作者對 WebContainer 的團隊表示巨大的尊重,Stackblitz 團隊牛逼!

WebContainers 的一個缺點是,它目前只能在 Chrome 上運行[18],但可能很快就會在 Firefox 上運行[19]。browser-vite 目前適用于 Chrome、Firefox和Safari瀏覽器。

簡而言之,WebContainers在較低的抽象級別上運行Vite。browser-vite在更高的抽象層次上運行,非常接近Vite本身。

打個比方,對于那些復古游戲玩家來說,browser-vite 有點像 UltraHLE(任天堂 N64 模擬器)?????

(*) gametechwiki.com: 高/低層級模擬器[20]

作者接下來的計劃

browser-vite 是作者計劃的解決方案中的核心。打算逐步推廣到他們的全系列產(chǎn)品中:

  • Backlight.dev
  • Components.studio
  • WebComponents.dev
  • Replic.dev (即將發(fā)布的新應用)

展望未來,作者將繼續(xù)在 browser-vite 中投入,并向上游報告。上個月他們還宣布向 Evan You 和 Patak贊助來支持 Vite[21],以支持這個超贊的項目。

想知道更多?

GitHub庫:browser-vite[22]

加入 Discord[23], 有一個 #browser-vite 的頻道。??

參考資料

https://divriots.com/blog/vite-in-the-browser

https://github.com/divriots/browser-vite

https://blog.stackblitz.com/posts/introducing-webcontainers/

參考資料

[1]browser-vite: https://github.com/divriots/browser-vite

[2]Service Worker: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API

[3]Web Worker: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

[4]Vite: https://vitejs.dev/

[5]預打包(Dependencing Pre-Bundling): https://vitejs.dev/guide/dep-pre-bundling.html

[6]Vite plugin: https://vitejs.dev/guide/api-plugin.html

[7]

后行斷言: https://www.regular-expressions.info/lookaround.html

[8]WebSockets: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

[9]browser-vite’s README: https://github.com/divriots/browser-vite/blob/browser-vite/README.md#usage

[10]workbox: https://developers.google.com/web/tools/workbox

[11]postMessage: https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage

[12]broadcast-channel: https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API

[13]Vite 內(nèi)部中間件源碼: https://github.com/vitejs/vite/tree/main/packages/vite/src/node/server/middlewares

[14]Turbo: https://developer.stackblitz.com/docs/platform/turbo/

[15]Remix: https://blog.stackblitz.com/posts/remix-runs-on-webcontainers/

[16]SvelteKit: https://blog.stackblitz.com/posts/sveltekit-supported-in-webcontainers/

[17]Astro: https://blog.stackblitz.com/posts/astro-support/

[18]只能在 Chrome 上運行: https://developer.stackblitz.com/docs/platform/browser-support

[19]在 Firefox 上運行: https://developer.stackblitz.com/docs/platform/browser-support/#testing-on-firefox

[20]gametechwiki.com: 高/低層級模擬器: https://emulation.gametechwiki.com/index.php/High/Low_level_emulation

[21]向 Evan You 和 Patak贊助來支持 Vite: https://divriots.com/blog/supporting-vitejs

[22]browser-vite: https://github.com/divriots/browser-vite

[23]Discord: https://discord.gg/XkQxSU9

本文轉載自微信公眾號「前端從進階到入院」,可以通過以下二維碼關注。轉載本文請聯(lián)系前端從進階到入院公眾號。

 

責任編輯:武曉燕 來源: 前端從進階到入院
相關推薦

2009-04-29 14:40:17

2023-08-03 09:02:32

LangChain開發(fā)GLM

2021-01-22 14:03:34

Flutter系統(tǒng)鴻蒙

2023-03-02 23:09:53

Node.jsC++JS

2010-07-13 09:31:08

RubyRuby on Rai

2011-05-04 11:26:47

優(yōu)化

2021-11-10 10:00:48

鴻蒙HarmonyOS應用

2024-05-27 09:01:22

2021-01-12 11:12:58

大數(shù)據(jù)智慧交通

2022-12-06 09:03:44

代碼fork系統(tǒng)

2015-08-04 17:46:19

戴爾anycloud云計算

2017-11-17 15:25:02

Java線程安全

2012-05-15 13:29:20

HTML5

2023-01-31 07:42:29

代碼JDKMaven

2025-08-22 08:05:01

2014-04-18 17:12:00

樂跑手環(huán)

2022-04-25 10:26:11

Python代碼瀏覽器

2021-04-21 08:28:06

微軟EdgeGoogle

2023-05-17 00:10:55

GPU瀏覽器解鎖

2012-02-21 13:50:29

瀏覽器遙控器
點贊
收藏

51CTO技術棧公眾號

国产啪精品视频网站| 亚洲日韩欧美视频一区| 美女黄色免费看| 日本成人动漫在线观看| 香蕉久久夜色精品| 色多多国产成人永久免费网站| 午夜一区二区视频| 岛国av在线网站| 久久精品一区四区| 国产在线观看不卡| 日韩av女优在线观看| 免费观看不卡av| 91精品啪在线观看国产60岁| 国产精品久久中文字幕| 中文字幕在线观看日本| 成人免费观看男女羞羞视频| 国产精品久久中文| 国产一国产二国产三| 欧美色爱综合| 亚洲成色999久久网站| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 88国产精品视频一区二区三区| 欧美精品一区二区三区视频| 日本激情视频在线播放| 超碰在线cao| 国产精品国产三级国产aⅴ原创| 国产91aaa| 在线免费观看一区二区| 亚洲尤物影院| 国内精品400部情侣激情| 国产大屁股喷水视频在线观看| 欧美xxxx在线| 精品奇米国产一区二区三区| 色播五月综合网| 中文字幕人成乱码在线观看| 亚洲综合成人网| 中文字幕一区二区三区5566| 福利成人在线观看| 久久久久久一级片| 精品国产乱码久久久久| 亚洲国产精品国自产拍久久| 精品一区二区三区在线观看国产| 国产成人精品视| 在线观看亚洲欧美| 亚洲精选91| 欧美激情奇米色| 欧美国产在线看| 欧美永久精品| 色综合久久精品亚洲国产| 久久久久人妻一区精品色| 久久av资源| 亚洲欧美中文日韩在线v日本| 呦呦视频在线观看| 粉嫩精品导航导航| 亚洲国产精品va| 成人性生活免费看| 日本三级久久| 亚洲精品中文字幕女同| 国产麻豆天美果冻无码视频 | 久久国产主播精品| 无码精品在线观看| 91丨porny丨在线| 久久久久久久免费| 免费在线看v| 国产欧美一区二区精品忘忧草| 欧美日韩免费高清| 国产一级免费在线观看| 欧美国产97人人爽人人喊| 日韩精品久久久| 欧美18一19xxx性| 亚洲日本中文字幕区| 中文字幕一区二区三区四区五区六区| 1024视频在线| 亚洲蜜臀av乱码久久精品| 国产精品国三级国产av| 大香伊人久久| 色婷婷精品久久二区二区蜜臀av| 国产免费又粗又猛又爽| 亚洲国产天堂| 精品国产免费久久| 日本黄色网址大全| 日韩情爱电影在线观看| 久久亚洲精品一区二区| 日本三级午夜理伦三级三| 国产欧美精品| 国产精品中文久久久久久久| 国产欧美一级片| www.av精品| 亚洲国产另类久久久精品极度| 黄色在线免费| 午夜视黄欧洲亚洲| 一区二区在线播放视频| 久久亚洲精精品中文字幕| 精品久久久三级丝袜| 亚洲成人网在线播放| 欧美激情777| 欧美激情一区二区三区高清视频| 久久青青草原亚洲av无码麻豆 | 性一交一黄一片| 老汉色老汉首页av亚洲| 日韩在线视频导航| 国产真实的和子乱拍在线观看| 日韩成人dvd| 动漫一区二区在线| 日本一二三区在线视频| 国产精品理论片在线观看| 久久99久久99精品| 久久69成人| 日韩精品视频免费专区在线播放 | 一区二区三区在线播放| 国产成人精品视频免费看| 日本亚洲欧洲无免费码在线| 亚洲精品一区二区三区香蕉| 69xxx免费| 99热这里只有成人精品国产| 91精品国产综合久久久久久蜜臀| 天天干天天做天天操| 中文字幕欧美一| 久久久久久久激情| 日韩一级淫片| 色视频www在线播放国产成人| 五月天婷婷网站| 激情五月婷婷综合网| 欧美午夜欧美| www在线观看黄色| 日韩欧美一级精品久久| 大吊一区二区三区| 日韩精品一级二级| 精品一区二区三区日本| 怡红院在线播放| 51午夜精品国产| 欧美美女性生活视频| 日本欧美一区二区在线观看| 蜜桃av色综合| cao在线视频| 欧美xxxxxxxx| 69av视频在线| 国模娜娜一区二区三区| 亚洲精品一区二| 91在线成人| 亚洲欧美激情在线视频| 日韩三级一区二区三区| 成人美女在线视频| 性高湖久久久久久久久aaaaa| 国产一区二区高清在线| 久久久国产精品视频| 91亚洲欧美激情| 中文字幕一区二区三区乱码在线| mm1313亚洲国产精品无码试看| 国产精品免费大片| 国产福利精品在线| 毛片免费在线观看| 亚洲少妇屁股交4| 最新天堂在线视频| 97视频精品| 成人激情视频在线| 成年人黄视频在线观看| 8x8x8国产精品| 精品在线观看一区| 激情偷乱视频一区二区三区| 亚欧洲精品在线视频免费观看| 福利精品在线| 最近中文字幕2019免费| 中文字幕在线2019| 中文字幕一区三区| 亚洲av无日韩毛片久久| 亚洲人metart人体| 97人人澡人人爽| 色图在线观看| 精品剧情v国产在线观看在线| 麻豆91精品91久久久| 99re这里只有精品首页| 大陆极品少妇内射aaaaa| 秋霞影院一区二区三区| 538国产精品视频一区二区| 青青久在线视频| 网红女主播少妇精品视频| 豆国产96在线|亚洲| 久久久久久av无码免费网站下载| 国产不卡精品在线| 欧美久久精品午夜青青大伊人| 国产精品羞羞答答在线| 亚洲在线中文字幕| 奇米777第四色| 亚洲一区二区网站| 日韩动漫在线观看| 亚洲二区av| 久久久久久久久久久免费 | 另类欧美日韩国产在线| 91手机视频在线| 国产精品流白浆在线观看| 97超级碰碰人国产在线观看| 日本1级在线| 欧美精品日韩综合在线| 国产又粗又长又黄的视频| 国产精品一区二区黑丝| 91成人在线观看喷潮教学| 欧美一区二区三区高清视频| 亚洲在线免费观看| 美女高潮在线观看| 久久精品视频播放| 天天射天天操天天干| 色狠狠一区二区三区香蕉| 91n在线视频| 成人在线视频一区二区| 冲田杏梨av在线| 国内精品久久久久久久影视麻豆| 久久久久久一区| 成人在线视频国产| 国产98色在线| caoporn97在线视频| 日韩成人在线免费观看| 亚洲综合网av| 精品动漫一区二区| 国产成人无码aa精品一区| 91麻豆swag| 一级网站在线观看| 久久一二三四| 少妇人妻无码专区视频| 日韩情爱电影在线观看| 久久久久久99| 玖玖精品一区| 色综合导航网站| 日本三级视频在线观看| 亚洲精品日韩久久久| av官网在线观看| 欧美制服丝袜第一页| 国产香蕉视频在线| 一片黄亚洲嫩模| 一区二区三区在线播放视频| 久久综合久久综合九色| 久国产精品视频| 美国毛片一区二区三区| 国产在线青青草| 黑人一区二区| a级网站在线观看| 91精品综合久久久久久久久久久| 欧美12av| 日韩激情啪啪| 国产综合色一区二区三区| 999久久久精品一区二区| 成人两性免费视频| 国语自产精品视频在线看抢先版结局| 91福利视频网| 午夜小视频福利在线观看| 一区国产精品视频| 青青草视频在线观看| 亚洲丁香婷深爱综合| 丰满人妻一区二区三区免费| 欧美大胆一级视频| 国产绿帽刺激高潮对白| 欧美日韩dvd在线观看| 久久这里只有精品9| 欧美在线观看视频一区二区| 亚洲 欧美 中文字幕| 亚洲综合一二区| 妺妺窝人体色www在线下载| 亚洲靠逼com| 蜜桃av.com| ...av二区三区久久精品| 免费在线观看a级片| 亚洲视频每日更新| 欧美成人综合色| 亚洲一卡二卡三卡四卡 | 欧美午夜宅男影院在线观看| 亚洲日本视频在线观看| 欧美性猛交xxxx免费看久久久| 精品国产乱码一区二区| 精品动漫一区二区| 黄网站免费在线| 欧美三级免费观看| 无码人妻av一区二区三区波多野| 91国偷自产一区二区三区成为亚洲经典| 国产性一乱一性一伧一色| 亚洲18色成人| 国产成人无码av| 欧美色综合网站| 一二三区中文字幕| 精品日韩一区二区三区免费视频| 狠狠躁日日躁夜夜躁av| 亚洲精品乱码久久久久久金桔影视| 国产aⅴ一区二区三区| 亚洲精品99久久久久| 欧美成熟毛茸茸| 最好看的2019的中文字幕视频| 免费网站成人| 97超级碰碰碰| 国产激情欧美| 91入口在线观看| 亚洲性视频大全| 九九久久九九久久| 国产亚洲永久域名| 久久久久国产一区| 国产一区三区三区| 大地资源二中文在线影视观看| 国产亚洲精品超碰| 波多野结衣家庭教师| 亚洲精品国产一区二区精华液| 三级黄色在线视频| 欧美日韩大陆在线| 日本美女一级片| 亚洲丝袜av一区| 国内老司机av在线| 国产精品久久久久久久久久久新郎 | 亚洲天堂中文字幕在线| 亚洲电影中文字幕| 秋霞午夜理伦电影在线观看| 久久人人爽人人爽人人片av高清| 女同一区二区免费aⅴ| 国产精品爽爽爽| eeuss鲁片一区二区三区| 欧美一区二区三区在线免费观看| 亚洲成人tv| 日韩肉感妇bbwbbwbbw| aa级大片欧美| 无码人妻精品一区二区三区夜夜嗨| 色综合久久中文字幕| jizz中国少妇| 中文字幕久热精品在线视频| 超黄网站在线观看| 91久久精品美女高潮| 自拍自偷一区二区三区| 国产精品一二三在线观看| 日韩精品久久久久久| 在线精品一区二区三区| 亚洲免费资源在线播放| 伊人网站在线观看| 国产午夜精品一区二区三区| 视频在线这里都是精品| 国产免费观看久久黄| 亚洲免费毛片| 日韩精品―中文字幕| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 一区二区三区免费观看| 中文字幕人妻丝袜乱一区三区| 亚洲精品日韩欧美| 国产资源在线观看入口av| 91在线看网站| 午夜国产欧美理论在线播放| 九色porny自拍| 国产视频不卡一区| 久久久久久久久久久久久av| 亚洲第一页自拍| 男插女视频久久久| 亚洲综合中文字幕68页| 国产精品亚洲人成在99www| 国产成人久久婷婷精品流白浆| 成人av资源网站| 久久综合综合久久| 日韩精品一区二区三区视频播放 | 精品欧美一区二区三区在线观看| 国产欧美韩日| 中文亚洲免费| 国产精品福利导航| 天天综合网 天天综合色| 国产成人精品a视频| 欧美多人爱爱视频网站| caoporn成人| www.av蜜桃| 不卡欧美aaaaa| 尤物视频在线观看国产| 日韩av在线免费播放| √天堂8资源中文在线| 精品国产aⅴ麻豆| 老司机一区二区三区| 欧美做受高潮6| 欧美日韩国产系列| 欧美成人三区| 91美女片黄在线观看游戏| 日本一本不卡| 在线播放免费视频| 夜色激情一区二区| 日韩一级片免费观看| 热re91久久精品国99热蜜臀| 欧美人妖在线| 亚洲免费看av| 亚洲在线成人精品| 欧美一区二区公司| 2018日韩中文字幕| 色爱综合av| www.夜夜爽| 依依成人综合视频| 亚洲 美腿 欧美 偷拍| 国产精品视频中文字幕91| 午夜精品毛片| 在线观看免费视频黄| 在线观看视频一区二区| 欧美13一16娇小xxxx| 国产伦精品一区二区三区四区视频| 国产精品啊啊啊| 9.1成人看片免费版| 欧美日韩国产另类不卡| 日本高清视频在线播放| 国产一级特黄a大片99| 日韩激情一二三区| 精品欧美一区二区久久久久| 亚洲欧美制服中文字幕| 国产精品久久久久久av公交车| 每日在线观看av| 国产精品麻豆一区二区|