精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

四虎永久在线精品无码视频| 精品综合在线| 九九视频免费看| 成人高潮视频| 91高清视频免费看| japanese在线播放| 天天干视频在线观看| 日韩高清在线一区| 欧美成人免费小视频| 中国av免费看| 爱情电影网av一区二区| 午夜精品aaa| 伊人天天久久大香线蕉av色| 天堂在线资源网| 久草精品在线观看| 国产69久久精品成人看| 一区二区三区四区五区| 亚洲盗摄视频| 日韩精品中文字幕一区| 精品久久久噜噜噜噜久久图片| 2024最新电影免费在线观看| 国产丝袜欧美中文另类| 波多野结衣精品久久| 丰满人妻一区二区三区四区| 亚洲久久视频| 久久精品国产v日韩v亚洲| 免费观看av网站| av日韩精品| 欧美久久高跟鞋激| 999香蕉视频| 91超碰在线免费| 亚洲精品五月天| 一区二区三区四区欧美| 涩涩视频在线观看免费| 国产乱码一区二区三区| 91精品国产综合久久男男 | 污免费在线观看| av在线一区不卡| 色综合天天综合网天天狠天天| www.亚洲视频.com| 欧美极品少妇videossex| 国产精品无遮挡| 日本一区二区三区视频在线播放| 日韩中文字幕观看| 成人丝袜高跟foot| 99国产视频在线| 国产色综合视频| 精品在线观看免费| 91精品久久久久久久久久久久久| 国产情侣小视频| 亚洲一区日本| 青青草99啪国产免费| 在线观看免费av片| 久久精品卡一| 日韩美女免费线视频| 久久黄色精品视频| 奶水喷射视频一区| 国产精品福利在线| 国产精品成人久久久| 日本一不卡视频| 国产精品久久久久久网站| 国产一级片av| 日本va欧美va欧美va精品| 国产精品久久久av久久久| 无码人妻精品一区二区| 蜜桃久久精品一区二区| 国产有码在线一区二区视频| 国产又色又爽又黄又免费| 激情小说亚洲一区| 亚洲在线视频观看| 免费观看国产精品| 久久久91精品国产一区二区精品| 日本不卡免费新一二三区| 成黄免费在线| 自拍av一区二区三区| 成年人视频大全| 草草在线视频| 欧美性感一区二区三区| theporn国产精品| 在线播放一区二区精品视频| 日韩av在线免费观看| 久久久久久国产精品无码| 日韩毛片视频| 欧美二区乱c黑人| 国产毛片aaa| 麻豆成人综合网| 97久久精品午夜一区二区| 四虎免费在线观看| 中文成人av在线| 国产尤物av一区二区三区| 国产激情在线播放| 欧美日韩一级二级三级| 中文字幕一二三| 精品99久久| 九九热精品在线| 久久久久久久久久久影院| 激情综合色播五月| 蜜桃91精品入口| а√中文在线8| 一本一道久久a久久精品综合蜜臀| 黄色一级片免费的| 久9re热视频这里只有精品| 中文字幕精品久久久久| 国产午夜福利片| 免费观看30秒视频久久| 国产精品免费一区二区三区| 77777影视视频在线观看| 一区二区欧美精品| 中文字幕66页| 亚洲日本三级| 欧美激情xxxx性bbbb| 一级黄色免费片| 久久综合久久综合亚洲| 综合视频在线观看| 欧美xxx网站| 精品对白一区国产伦| 国产小视频你懂的| 久久久噜噜噜久久狠狠50岁| 国产精品福利视频| 日本美女在线中文版| 欧美性猛交xxxx富婆| 黄色av电影网站| 久久蜜桃av| 69久久夜色精品国产69乱青草| 怡春院在线视频| 91香蕉视频污在线| 青青草综合在线| 韩日精品一区| 亚洲欧美国产一区二区三区| 久久综合亚洲色hezyo国产| 日韩国产精品久久| 欧美日韩精品免费观看| 欧美日韩在线观看首页| 欧美成人性福生活免费看| 亚洲精品自拍视频在线观看| 视频一区欧美日韩| 精品一区二区不卡| 毛片在线导航| 欧美一级精品大片| 日本中文在线视频| 蜜桃视频一区二区三区| 噜噜噜噜噜久久久久久91| 啊啊啊久久久| 亚洲精品久久7777777| 国产乡下妇女做爰毛片| 成人三级在线视频| 黄色成人在线看| 丁香五月缴情综合网| 久久91超碰青草是什么| 99热这里只有精品66| 亚洲欧美日韩国产综合在线| 欧美第一页浮力影院| 色婷婷亚洲mv天堂mv在影片| 国产狼人综合免费视频| 在线观看麻豆| 91精品蜜臀在线一区尤物| 国产又色又爽又高潮免费| 精品一区二区三区免费视频| 国产精品亚洲天堂| 欧美专区视频| 欧美激情三级免费| 天天操天天射天天| 色呦呦国产精品| 在线观看国产精品一区| 麻豆精品视频在线| 国产精品av免费| 亚洲高清在线一区| 97视频在线观看网址| 国产在线观看黄| 欧美色成人综合| 永久免费未视频| 国产黄人亚洲片| 欧美日韩二三区| 欧美一区二区三区激情视频 | 欧美视频在线第一页| 99久久香蕉| 91av网站在线播放| 久草在线青青草| 欧美精选一区二区| 国产成人啪精品午夜在线观看| 91网上在线视频| 蜜桃免费在线视频| 亚洲乱码免费伦视频| 国产成人一区二区三区免费看| 蜜桃麻豆av在线| 色黄久久久久久| 色婷婷av一区二区三区之红樱桃 | 中国日韩欧美久久久久久久久| 亚洲天堂中文字幕在线| 一区二区三区.www| 受虐m奴xxx在线观看| 精东粉嫩av免费一区二区三区| 日韩小视频网站| 精品一区二区三区在线| 亚洲一区二区久久久久久久| 天堂网在线最新版www中文网| 色阁综合伊人av| 头脑特工队2免费完整版在线观看| 日本道免费精品一区二区三区| 熟女av一区二区| bt7086福利一区国产| 少妇一级淫免费播放| 亚洲欧洲日本mm| 亚洲a∨一区二区三区| 91精品啪在线观看国产手机| 国产精品久久久久久久7电影| 午夜av在线免费观看 | 精品国产白色丝袜高跟鞋| 亚洲国模精品一区| 国产精品一品二区三区的使用体验| 精品动漫一区二区| 亚洲色图综合区| 国产欧美一区二区精品性色 | 国产亚洲成aⅴ人片在线观看| 国产精品日日摸夜夜爽| 久草中文综合在线| 簧片在线免费看| 国产日韩1区| 精品人妻人人做人人爽| 国产精品久久占久久| 免费国产一区二区| 久久久精品国产**网站| 亚洲综合精品一区二区| 日本久久久久| 国产精品成人一区二区| 天堂√8在线中文| 韩国精品久久久999| 中文字幕伦理免费在线视频| 在线看日韩欧美| 国产精品视频一区二区久久| 亚洲精品久久久久久下一站| 精品国产免费无码久久久| 欧美日韩精品一区二区在线播放| 4438国产精品一区二区| 婷婷综合另类小说色区| 国产午夜精品无码| 性感美女极品91精品| 久久久久成人网站| 一区二区三区av电影| 黄色一级免费视频| 一个色综合网站| 午夜69成人做爰视频| 亚洲精品视频在线| 国产美女福利视频| 亚洲人成在线播放网站岛国| www色aa色aawww| 亚洲靠逼com| 九九热只有精品| 亚洲国产欧美在线人成| 欧美成人aaaaⅴ片在线看| 五月天中文字幕一区二区| 日韩免费在线视频观看| 亚洲成精国产精品女| 黄色片视频网站| 精品久久久久久中文字幕大豆网| 国产成人在线免费观看视频| 欧美日韩国产麻豆| 一区二区三区福利视频| 欧美性猛交xxxx富婆| 91麻豆精品在线| 欧美精品1区2区| 午夜精品久久久久久久96蜜桃 | 成人疯狂猛交xxx| 高清一区二区中文字幕| 成人18视频| 青青草久久爱| 视频一区二区三区免费观看| 久久高清精品| 日本免费a视频| 欧美亚洲三级| 免费成年人高清视频| 国产精品1区二区.| 亚洲少妇一区二区三区| 国产精品一区二区久久不卡 | 成人午夜亚洲| 3d精品h动漫啪啪一区二区| 成人高潮a毛片免费观看网站| 另类视频在线观看+1080p| 日韩系列欧美系列| 白白操在线视频| 欧美一级久久| 中文字幕一区二区在线观看视频| 丁香亚洲综合激情啪啪综合| 久久久久久国产精品无码| 中文字幕一区av| 日本在线小视频| 欧美日韩不卡一区二区| 日本精品久久久久久| 国产一区二区三区直播精品电影 | 欧美在线激情网| 欧美少妇激情| 国产一区免费在线| 日韩大片在线播放| 欧美久久久久久久久久久久久 | 精品久久久久久久中文字幕| 91国内精品视频| 亚洲激情第一页| 免费大片在线观看www| 性欧美xxxx交| 国产精品3区| 欧美一区二区高清在线观看| 欧美片第1页综合| 91蝌蚪视频在线观看| 成人精品视频一区| 久草视频手机在线| 日本精品一级二级| 免费看日韩av| 久久久精品视频成人| 欧美极品免费| 国产精选一区二区| 欧美成人一品| 中文字幕有码av| 91美女精品福利| 久久久久性色av无码一区二区| 91福利精品视频| 亚洲 欧美 激情 小说 另类| 久久综合久中文字幕青草| 丝袜美腿一区| 国产欧美日韩一区| 欧美精品国产一区二区| 粉色视频免费看| 国产亚洲精品资源在线26u| 欧美一级高潮片| 欧美一区三区四区| 在线免费看av| 国产成人短视频| 亚洲精品国产setv| 国精产品一区一区三区视频| 福利电影一区二区| 日本a级片视频| 欧美一区二区久久| 乱人伦中文视频在线| 国产精品国产福利国产秒拍| 亚洲精品国产setv| 国产aaa一级片| 26uuu国产在线精品一区二区| 国产精品视频久久久久久久| 亚洲福利影片在线| 波多野结衣在线播放| 国产98在线|日韩| 欧美深夜福利| 美女伦理水蜜桃4| 亚洲主播在线播放| 国产香蕉在线观看| 88xx成人精品| 日韩大片在线免费观看| 中文字幕日本最新乱码视频| 久久新电视剧免费观看| 欧美一区二区三区网站| 亚洲精品综合精品自拍| 桃子视频成人app| 日韩色妇久久av| 毛片av一区二区三区| 5566中文字幕| 日韩色在线观看| √最新版天堂资源网在线| 精品国产一区二区三区四区vr| 国产欧美一区二区三区国产幕精品| 色天使在线视频| 色狠狠av一区二区三区| h视频在线免费| 国产男女猛烈无遮挡91| 在线观看国产精品入口| japan高清日本乱xxxxx| 亚洲成av人片在线| 免费成人av电影| 国产精品视频区| 一区二区不卡| 9.1在线观看免费| 色又黄又爽网站www久久| av电影在线网| 亚洲一区二区三区四区视频| 极品av少妇一区二区| 不卡一区二区在线观看| 欧美日韩一区二区欧美激情| 日韩av官网| 免费一区二区三区| 国精品**一区二区三区在线蜜桃| 久青草视频在线观看| 亚洲美女自拍视频| 四虎视频在线精品免费网址| 欧美a级免费视频| 国产午夜精品一区二区三区视频 | 芒果视频成人app| 亚洲精品电影在线一区| 国产精品99久久久久久久vr| av黄色在线看| 久久大大胆人体| 亚洲精品一级二级三级| 免费网站在线观看黄| 欧美日韩亚洲91| 黄色免费在线观看| 看高清中日韩色视频| 国产精品一色哟哟哟| 91青青草视频| 高清欧美电影在线| 欧美高清视频手机在在线| 一本加勒比波多野结衣| 91精品国产麻豆国产自产在线| 色是在线视频|