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

【vite】你不知道的小妙招,確定不看一下嗎?

開發 前端
publicDir 限定直接訪問的靜態資源 本文通過列舉處理點,逐一提供案例+debug 截圖+源碼分析的方式,讓大家理解靜態處理的使用和底層原理。

[[407092]]

分析 version:2.3.7。本文將整理 vite 靜態資源的幾種處理方式,應用案例和源碼分析相結合,帶你 10mins 通關該模塊知識~

一.處理的五種方式

(1) 使用根絕對路徑引入 public 中的資源

  1. <img alt="Vue logo" src="/wy-logo.png" /> 

敲重點!

  • publicDir 放靜態資源的目錄,默認為 public
  • 引入 public 中的資源永遠應該使用根絕對路徑 —— 舉個🌰,public/wy-logo.png 應該在源碼中被引用為 /wy-logo.png。在開發時能直接通過${yourHost}/wy-logo.png根路徑訪問到。
  • public 中的資源不應該被 JavaScript 文件引用。

接下來我們來康康代碼處理:當我們直接/wy-logo.png 訪問資源:

以下是 public 靜態資源中間件處理入口 - vite/src/node/server/index.ts:

  1. if (config.publicDir) { 
  2.     middlewares.use(servePublicMiddleware(config.publicDir)) 
  3.  } 

這時候大家就有疑問了,怎樣才會走到 isImportRequest,以及為什么這么干?別急,下面我們慢慢嘮~

(2)通用 import 靜態資源, 返回[解析后]的公共路徑

首先,啥子是通用靜態資源嘞~~

是 vite 支持的默認資源類型:

KNOWN_ASSET_TYPES = ["png", "jpe?g", "gif", "svg", "ico", "webp", "avif", "mp4", "webm", "ogg", "mp3", "wav", "flac", "aac", "woff2?", "eot", "ttf", "otf", "wasm"]

是你自定義的放到 assetsInclude 配置中的文件

其次,我們來康康,靜態資源的導入

  1. <template> 
  2.     <img alt="Vue logo" :src="starImg" /> // 解析后的公共路徑作為 src 來請求資源 
  3. </template> 
  4. <script> 
  5.   import starImg from '../assets/star.png' // 導入靜態資源 - 圖片 
  6.   export default defineComponent({ 
  7.     data () { 
  8.       return { 
  9.         starImg 
  10.       } 
  11.     } 
  12.   }) 
  13. </script> 

這是我們的輸入和輸出:我們可以看到每個 import 都會被處理成 xxx?import 請求,返回解析后的代碼,得到一個公共可訪問 url

然后,我們依舊根據 wy-logo 圖片來對比分析~ 之前是直接靜態文件訪問,提前返回資源,不會被解析成 import 依賴 反之如果作為 js 文件 import 引入,則不會當成正常靜態資源,都得優先處理成通用&import js 文件,:

  1. import logo from '../../public/wy-logo.png' 
  2. console.log(logo) 

關鍵代碼:

  1. // 從初始執行 cli 處啟動 createServer - vite/src/node/server/index.ts 
  2. // 會調用 resolveConfig()獲取 config, 而該方法里會調用 resolvePlugins(), 
  3. // 其中有個 plugin 處理是: importAnalysisPlugin(config) 
  4. // 所在文件如下: 
  5. import { importAnalysisPlugin } from './importAnalysis' 
  6.  
  7. // 在 importAnalysic.js 里有個關鍵方法: 
  8. async transform(source, importer, ssr) { 
  9.   // 用`?import`標識非 js/css 的 import 依賴 
  10.   url = markExplicitImport(url) 

可以看到 public 下的靜態資源直接請求會直接返回,反之 import 靜態資源的話 - 處理成/public/wy-logo.png?importwy-logo.png?import。需要后續通過返回解析后的 url 再去訪問資源。👇🏻es-module-lexer 解析處理:

這時候大家就理解了之前的疑問,isImportRequest 需要區分是否是直接的靜態資源請求,如果是 import xxx 來引入的,都統一處理成依賴,給到你最終需要的一個 URL => 【公共靜態資源訪問路徑】。這就是為什么 public 中的資源不建議被 JavaScript 文件引用,因為 publicDir 資源文件的定義就是直接可以請求,沒有必要解析獲取 url 后再請求!!!

(3)非通用靜態資源?可顯式 URL

引入 ?url通用靜態資源可以直接處理獲取 url,那要是想要處理其他資源,怎么顯式導入為一個 URL 來用 (⊙_⊙)? 答案是用?url后綴 ../data/name.js:

  1. export const nameList = ['Tim''John''Bob''Catherine'
  2. console.log(`名稱列表 = `, nameList.join('  ')) 

components/name.vue

  1. import nameListUrl from '../data/name.js?url' 
  2. console.log(nameListUrl) // 解析成'/src/data/name.js' 

源碼解析: 同理,也是在resolvePlugins()里面有對 asset 處理的assetPlugin

  1. const urlRE = /(\?|&)url(?:&|$)/ 
  2. async load(id) { 
  3.  ... 
  4.   // 如果沒有被配置到靜態資源 assetsInclude 并且 沒有?url 后綴的,直接返回 
  5.   if (!config.assetsInclude(cleanUrl(id)) && !urlRE.test(id)) { 
  6.     return 
  7.   } 
  8.  
  9.   id = id.replace(urlRE, '$1').replace(/[\?&]$/, ''
  10.   const url = await fileToUrl(id, config, this) // 獲取公共可訪問路徑 
  11.   return `export default ${JSON.stringify(url)}` // 返回解析后的代碼 

(4)將資源引入為字符串 ?raw

同一個例子,我們要獲取 name.js 的數據:1.場景 1 是獲取執行 name.js 后輸出的數據 2.場景 2 是僅僅要獲取 name.js 的文本,比如我們可以做 template 的字符串,那就需要使用到?raw后綴了。

  1. import nameString from '../data/name.js?raw' 
  2. console.log(nameString) // 解析出 export default "xxxxx" 文本 

上源碼。。。。。依舊是assetPlugin

  1. const rawRE = /(\?|&)raw(?:&|$)/ 
  2. async load(id) { 
  3.  ... 
  4.   // raw requests, read from disk 
  5.   if (rawRE.test(id)) { 
  6.     // publicDir 存在同名靜態文件,優先返回 
  7.     const file = checkPublicFile(id, config) || cleanUrl(id) 
  8.     // ?raw 作為 query, 讀取對應的文件并且返回其字符串 
  9.     return `export default ${JSON.stringify( 
  10.       await fsp.readFile(file, 'utf-8'
  11.     )}` 
  12.   } 
  13.   ... 

(5)導入腳本作為 Worker ?worker

腳本可以通過 ?worker 或 ?sharedworker 后綴導入為 web worker。上案例:/data/name-worker.js

  1. export const nameList = ['Tim''John''Bob''Catherine'
  2. addEventListener('message', (e) => { 
  3.   console.log('主線程: ', e.data) 
  4.   postMessage({ 
  5.     word: `Hi,我是 worker~~ 老大,這是你要的名單:${nameList.join(' ')}`, 
  6.     nameList 
  7.   }) 
  8.   close() // 關閉 worker 
  9. }, false

/components/name.vue

  1. import NameWorker from '../data/name-worker.js?worker' 
  2. export default defineComponent({ 
  3.   mounted () { 
  4.     const worker = new NameWorker() 
  5.     worker.postMessage('Hi, 我是主線程~') // 主線程向 Worker 發消息 
  6.     worker.onmessage = (e) => { // 接收子線程發回來的消息 
  7.       if (e.data) { 
  8.         console.log('Worder: ' + e.data.word) 
  9.         this.workerNameList = e.data.nameList 
  10.         worker.terminate() // Worker 完成任務以后,主線程就可以把它關掉 
  11.       } 
  12.     } 
  13.     worker.onerror = (e) => { 
  14.       console.log([ 
  15.         'ERROR: Line ', e.lineno, ' in ', e.filename, ': ', e.message 
  16.       ].join('')) 
  17.     } 
  18.   } 
  19. }) 

這里,就是給 name-worker.js 封裝了一層,提供了 WorkerWrapper 函數幫你新建了一個 worker 對象

debug 圖如下:

源碼。。。?!景““?!!源碼可真多,我可太暴躁了】

resolvePlugins()里 執行webWorkerPlugindev 開發環境下:

  1. async transform(_, id) { 
  2.     const query = parseWorkerRequest(id) 
  3.     let url: string 
  4.     url = await fileToUrl(cleanUrl(id), config, this) // 原始 url 
  5.     url = injectQuery(url, WorkerFileId) // 加上&worker_file 的 query 標識 
  6.  
  7.     const workerConstructor = 
  8.       query.sharedworker != null ? 'SharedWorker' : 'Worker' 
  9.     const workerOptions = { type: 'module' } 
  10.  
  11.     return `export default function WorkerWrapper() { // 輸出新建 worker 對象的 template 
  12.       return new ${workerConstructor}(${JSON.stringify( 
  13.       url 
  14.     )}, ${JSON.stringify(workerOptions, null, 2)}) 
  15.     }` 

build 生產下:inline 模式和非 inline 模式

  1. if (query.inline != null) { 
  2.   // 打包文件作為入口去支持 import 導入 worker 或者行內寫入 
  3.   const rollup = require('rollup'as typeof Rollup 
  4.   const bundle = await rollup.rollup({ 
  5.     input: cleanUrl(id), 
  6.     plugins: config.plugins as Plugin[] 
  7.   }) 
  8.   try { 
  9.     // 在生產構建中將會分離出 chunk,worker 腳本將作為單獨的塊發出 
  10.     const { output } = await bundle.generate({ 
  11.       format: 'es'
  12.       sourcemap: config.build.sourcemap 
  13.     }) 
  14.   
  15.     return `const blob = new Blob([atob(\"${Buffer.from(output[0].code).toString('base64')}\")], { type: 'text/javascript;charset=utf-8' }); 
  16.     export default function WorkerWrapper() { 
  17.       const objURL = (window.URL || window.webkitURL).createObjectURL(blob); 
  18.       try { 
  19.         return new Worker(objURL); 
  20.       } finally { 
  21.         (window.URL || window.webkitURL).revokeObjectURL(objURL); 
  22.       } 
  23.     }` 
  24.   } finally { 
  25.     await bundle.close() 
  26.   } 
  27. else { 
  28.   // 作為分開的 chunk 處理`?worker&inline`,內聯為 base64 字符串 - 要求 inline 的 worker 
  29.   url = `__VITE_ASSET__${this.emitFile({ 
  30.     type: 'chunk'
  31.     id: cleanUrl(id) 
  32.   })}__` 
  33.   ....// 同開發返回的 template 

咦~,那這個/src/data/name-worker.js?worker_file 又通過?worker_file后綴給我們處理啥了?webWorkerPlugin:

  1. const WorkerFileId = 'worker_file' 
  2. async transform(_, id) { 
  3.     const query = parseWorkerRequest(id) 
  4.     if (query && query[WorkerFileId] != null) { 
  5.       return { 
  6.         // 其實只是作為 執行導入之前生成的 worker.js 文件 的標識....... 
  7.         code: `import '${ENV_PUBLIC_PATH}'\n` + _ 
  8.       } 
  9.     } 

害!五個靜態處理方式總算是講完了~

二. 總結

vite 的靜態處理關鍵點就是 :

(1)通過特殊 query(?:worker|sharedworker|raw|url)來區分不同類型靜態資源,進行特殊的 transform 處理。

(2)publicDir 限定直接訪問的靜態資源 本文通過列舉處理點,逐一提供案例+debug 截圖+源碼分析的方式,讓大家理解靜態處理的使用和底層原理。

 

責任編輯:姜華 來源: 微醫大前端技術
相關推薦

2020-12-16 10:28:05

Double浮點數計算

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2016-09-30 09:17:10

Windows 10批量一鍵恢復

2021-10-22 07:57:12

路由器網絡卡頓網絡建設

2023-10-23 10:20:25

2018-09-27 14:50:04

機器學習數據科學書籍

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機制操作系統

2021-02-01 23:23:39

FiddlerCharlesWeb

2011-09-15 17:10:41

2010-08-23 09:56:09

Java性能監控

2021-02-16 09:02:59

Python代碼技巧

2011-08-11 10:22:40

Windows7Tab鍵

2022-11-04 08:19:18

gRPC框架項目

2020-09-15 08:35:57

TypeScript JavaScript類型

2021-11-01 12:10:56

Python技巧代碼

2021-03-18 14:02:56

iOS蘋果細節

2021-10-17 13:10:56

函數TypeScript泛型

2021-12-29 11:38:59

JS前端沙箱
點贊
收藏

51CTO技術棧公眾號

yiren22综合网成人| 国产性猛交普通话对白| 成人黄色图片网站| 国产精品午夜在线观看| 91超碰在线免费观看| 精品一区二区三区四| 欧美禁忌电影网| 欧美精品1区2区3区| 欧美一级免费播放| av电影在线网| 成人免费观看视频| 国产精品久久在线观看| 久草视频免费播放| 欧美日韩高清| 亚洲国产精品久久久久秋霞不卡| 国产一区亚洲二区三区| 91亚洲天堂| 久久色中文字幕| 99re视频在线| 亚洲天堂中文网| aa级大片欧美三级| 欧美另类在线播放| 午夜精产品一区二区在线观看的| 人人爱人人干婷婷丁香亚洲| 色婷婷国产精品综合在线观看| 色哟哟免费网站| 国产高清视频在线播放| 成人av一区二区三区| 成人免费xxxxx在线观看| 一本一道无码中文字幕精品热| 欧美日韩亚洲一区| 日韩视频在线免费观看| 国精产品一区一区三区免费视频| 日韩中文字幕视频网| 精品视频在线免费| www黄色av| 91美女主播在线视频| 亚洲精品欧美激情| 一本一道久久a久久综合精品| 神马久久久久久久久久| 美女脱光内衣内裤视频久久网站 | 日本国产一区二区| 久操网在线观看| 手机在线免费观看av| 综合av第一页| 一区二区三区四区视频在线观看| 国产一级免费在线观看| 久久亚洲捆绑美女| 久久国产精品精品国产色婷婷| 精品欧美在线观看| 国产大片一区二区| 亚洲综合自拍一区| 99久久一区二区| 国产美女视频一区| 97视频热人人精品| 精品人妻一区二区三区三区四区 | 久久精品视频中文字幕| 精品成人av一区二区三区| 欧美三级午夜理伦三级在线观看 | 91久久在线视频| 亚洲字幕av一区二区三区四区| 免费在线视频一区| 国产日本欧美在线观看| 亚洲图片视频小说| 国产在线精品一区在线观看麻豆| 91九色蝌蚪国产| av手机免费看| 懂色av噜噜一区二区三区av| 国产一区免费视频| 免费看男男www网站入口在线| 久久亚洲精品国产精品紫薇| 欧美深深色噜噜狠狠yyy| 国产精品视频二区三区| 国产精品污网站| 免费观看国产视频在线| 欧美日韩经典丝袜| 欧美日韩中文字幕在线视频| 欧美爱爱视频免费看| 日韩成人av电影| 欧美日韩国产一级| 深夜视频在线观看| 色综合综合网| 日韩视频一区在线| 国产精彩视频在线观看| 久久都是精品| 成人精品在线视频| 人妻丰满熟妇av无码区hd| 91小视频免费看| 午夜精品一区二区在线观看| 宅男在线观看免费高清网站| 精品国产乱码久久久久酒店| 中国黄色片免费看| 9l亚洲国产成人精品一区二三| 亚洲男人的天堂在线| 日韩精品123区| 亚洲国产免费看| 国产精品人成电影| 国产又大又长又粗| 91视频www| 自拍偷拍视频在线| 二区三区不卡| 欧美一级精品在线| av电影在线不卡| 欧美天天视频| 国产欧美日韩中文字幕| 无码国产精品一区二区免费16| 国产精品免费视频观看| av在线观看地址| 视频91a欧美| 日韩av在线资源| 青青草原在线免费观看| 日韩精品国产欧美| 国产精品v欧美精品∨日韩| 成年人视频在线免费观看| 亚洲第一在线综合网站| 五月天丁香花婷婷| 国产剧情一区| 91精品国产乱码久久久久久久久| 91久久精品无码一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 中日韩在线视频| 新片速递亚洲合集欧美合集| 欧美videos大乳护士334| 日韩欧美在线视频播放| 性色一区二区三区| 国产乱码精品一区二区三区中文 | 精品熟女一区二区三区| 欧美国产偷国产精品三区| 欧美一级淫片播放口| 亚洲精品成人区在线观看| 中文字幕日本乱码精品影院| www.xxx亚洲| 妖精视频一区二区三区| 午夜精品久久久久久久久久久久 | 精品一区二区三区免费看| 中文字幕视频在线免费欧美日韩综合在线看 | 91麻豆精品国产91久久久| 欧美做受高潮6| 在线视频精品| 精品欧美一区二区三区久久久| 黄页网站在线| 91精品国产91久久久久久最新毛片| 永久免费av无码网站性色av| 日韩黄色小视频| 欧美影视一区二区| 日韩在线短视频| 亚洲一区av在线播放| 日韩欧美国产另类| 国产三级欧美三级日产三级99 | 亚洲欧洲日产国码av系列天堂| 日本系列第一页| av爱爱亚洲一区| 欧美丰满熟妇bbbbbb百度| 日韩电影不卡一区| 欧美在线视频a| 国产最新视频在线观看| 欧美中文字幕一区| 久久精品三级视频| 激情久久五月天| 日本大胆人体视频| 超碰成人在线观看| 欧美一级大片在线观看| 欧洲一区av| 欧美三级中文字幕| 少妇aaaaa| 不卡欧美aaaaa| 日韩 欧美 高清| 四虎国产精品免费观看| 亚洲综合国产精品| av3级在线| 亚洲午夜av电影| 91好色先生tv| 国产成人av免费看| 91蜜桃网址入口| 国产精品69页| 91精品国产乱码久久久久久| 国产精品av一区| 韩日成人影院| 久久精品一偷一偷国产| 人妻少妇精品无码专区| 色老综合老女人久久久| 极品魔鬼身材女神啪啪精品| 成人福利视频在线| 日本www高清视频| 亚洲乱码电影| 极品尤物一区二区三区| 懂色aⅴ精品一区二区三区| 蜜臀久久99精品久久久无需会员| 手机看片国产1024| 欧美三级午夜理伦三级中视频| 欧美黄色aaa| 99re这里只有精品首页| 国产成人综合一区| 欧美日一区二区三区在线观看国产免| 噜噜噜噜噜久久久久久91| 在线观看亚洲精品福利片| 性日韩欧美在线视频| 在线看黄色av| 亚洲精品按摩视频| 国产乱淫a∨片免费视频| 欧美日韩国产中文字幕 | 波多野结衣免费观看| 国产日产高清欧美一区二区三区| 一区精品在线| 亚洲免费专区| 亚洲精品视频观看| 国产精品国产三级欧美二区 | 国产精品成人国产乱一区| 色呦呦久久久| 日韩中文字幕网| 免费在线稳定资源站| 欧美成人综合网站| 一级特黄色大片| 色综合久久久久综合体| 久久久久香蕉视频| 亚洲欧美在线另类| 91l九色lporny| 99天天综合性| 成人做爰69片免费| 国产一区二区三区久久久 | 狠狠色丁香久久婷婷综| 久久久久久久久久久福利| 在线成人超碰| 一区二区三区四区五区精品 | 国产第一精品| 青青久久av北条麻妃海外网| av在线资源| 欧美黑人xxxx| 18videosex性欧美麻豆| 日韩在线小视频| av资源种子在线观看| 亚洲毛片一区二区| 视频二区在线| 日韩一区二区在线播放| 在线观看中文字幕码| 欧美影院一区二区三区| 青青视频在线免费观看| 欧美午夜电影在线| 免费观看成人毛片| 欧美视频在线免费看| 国产午夜视频在线播放| 一级做a爱片久久| 国产精品久久久精品四季影院| 国产精品黄色在线观看| 国产成人精品视频免费| 亚洲国产成人自拍| 亚洲毛片亚洲毛片亚洲毛片| 欧美国产日产图区| 亚洲精品国产精品国自| 国产精品天天看| 国产精品视频看看| 日韩美女久久久| 国产精品三区在线观看| 国内精品伊人久久久| 色婷婷综合久久久久中文字幕1| 国产精品久久久久一区二区国产| 亚洲人a成www在线影院| www日韩tube| 精品国产区一区二区三区在线观看| 免费观看成人高潮| 九九精品视频在线观看| av第一福利在线导航| 欧美一区二区三区免费观看| 伊人久久国产| 国产精品自产拍在线观| 国产精品免费精品自在线观看| 亚洲tv在线观看| 99re8这里有精品热视频8在线| 国精产品一区二区| 精品国产不卡| www.-级毛片线天内射视视| 欧美性色综合| 免费无码av片在线观看| 免费看黄色91| www.欧美com| 久久久天堂av| 内射一区二区三区| 亚洲成人激情自拍| 一级片在线免费播放| 日韩一二在线观看| 日韩精品视频在线观看一区二区三区| 一本色道久久综合狠狠躁篇怎么玩| 生活片a∨在线观看| 欧美裸体xxxx极品少妇| 在线精品亚洲欧美日韩国产| 国产日韩精品在线播放| av成人综合| 日韩和欧美的一区二区| 女人色偷偷aa久久天堂| 国产淫片免费看| 经典一区二区三区| 亚洲黄色在线网站| 亚洲欧美激情一区二区| 精品欧美一区二区三区免费观看 | 一本一道精品欧美中文字幕| 精品国产伦一区二区三区观看方式 | 国产精品23p| 在线免费一区三区| 亚洲卡一卡二卡三| 中文字幕亚洲欧美日韩高清| 高h视频在线播放| 国产欧美韩国高清| 日韩精品社区| 99久久久精品视频| 美女在线视频一区| 香蕉网在线播放| 亚洲黄色小视频| 日本一区二区三区久久| 亚洲电影免费观看高清完整版在线| 77导航福利在线| 91成人性视频| ccyy激情综合| 好吊色这里只有精品| 日日摸夜夜添夜夜添国产精品 | 国产精品特级毛片一区二区三区| 亚洲级视频在线观看免费1级| 黄色网在线播放| 国产脚交av在线一区二区| 开心激情综合| 久久久无码中文字幕久...| 琪琪一区二区三区| 中文字幕国产专区| 午夜精品久久久久久| 国产高清在线观看视频| zzjj国产精品一区二区| 外国电影一区二区| 欧美精品二区三区四区免费看视频| 欧美日本精品| 天堂在线精品视频| 17c精品麻豆一区二区免费| 波多野结衣一区二区三区在线| 亚洲精品美女网站| av3级在线| 国产一区二区无遮挡| 亚洲国产1区| 亚洲精品成人无码毛片| 亚洲精品写真福利| 国产高清免费观看| 欧美激情a∨在线视频播放| 国产精品亚洲一区二区在线观看| 亚洲蜜桃在线| 免费不卡在线视频| 少妇太紧太爽又黄又硬又爽小说| 在线看日韩精品电影| 国产日本在线视频| 国产成人拍精品视频午夜网站| 亚洲综合小说图片| www.99在线| 国产精品视频九色porn| 亚洲一级av毛片| 久久精品99久久久香蕉| 国产精品一区二区精品| 欧美高清中文字幕| zzijzzij亚洲日本少妇熟睡| 一级片免费网址| 国产偷亚洲偷欧美偷精品| 欧美大片免费| 亚洲看片网站| 国产精品白丝jk白祙喷水网站 | 黄色av网站在线播放| 亚洲aⅴ日韩av电影在线观看| 欧美激情性爽国产精品17p| 又黄又色的网站| 狠狠躁夜夜躁人人爽超碰91| 国产特黄在线| 成人激情视频小说免费下载| 在线中文一区| 欧美一区二区免费在线观看| 色偷偷88欧美精品久久久| 在线免费观看黄| 国产精品二区在线| 国产精品久久777777毛茸茸 | av中文字幕在线| 91免费版网站入口| 影音先锋国产精品| 国产精久久一区二区三区| 欧美日韩久久久一区| 欧美家庭影院| 欧美日韩一区二区三区在线视频 | 欧美日韩成人综合天天影院| а√天堂8资源在线官网| 国产在线观看一区| 欧美aa在线视频| 久一视频在线观看| 在线亚洲国产精品网| 玖玖玖视频精品| 欧美日韩激情视频在线观看| 国产精品久久久久影院| 全部免费毛片在线播放一个| 国产精品久久久久久久久久免费| 欧美~级网站不卡| 色欲av无码一区二区三区| 91精品国产色综合久久不卡电影 | 欧美性高清videossexo| 亚洲第一图区| 日韩一区国产在线观看| 成人丝袜视频网| 在线观看日韩一区二区| 欧美综合一区第一页| 欧美一区二区三区免费看|