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

如何在 Vue 項目中,通過點擊 DOM 自動定位VSCode中的代碼行?

開發
現在大型的 Vue項目基本上都是多人協作開發,并且隨著版本的迭代,Vue 項目中的組件數也會越來越多,如果此時讓你負責不熟悉的頁面功能開發,甚至你才剛剛加入這個項目,那么怎么樣才能快速找到相關組件在整個項目代碼中的文件位置呢?

作者 | vivo 互聯網大前端團隊- Youchen

一、背景

現在大型的 Vue項目基本上都是多人協作開發,并且隨著版本的迭代,Vue 項目中的組件數也會越來越多,如果此時讓你負責不熟悉的頁面功能開發,甚至你才剛剛加入這個項目,那么怎么樣才能快速找到相關組件在整個項目代碼中的文件位置呢?想必大家都有采取過以下這幾種方法:

  • 【搜類名】,在工程文件里搜索頁面 DOM元素中的樣式類名
  • 【找路由】,根據頁面鏈接找到Vue路由匹配的頁面組件
  • 【找人】,找到當初負責開發該頁面的人詢問對應的代碼路徑

以上幾種方法確實能夠幫助我們找到具體的代碼文件路徑,但都需要人工去搜索,并不是很高效,那有沒有其它更高效的方式呢?

答案是有的。Vue官方就提供了一款 vue-devtools  插件,使用該插件就能自動在 VSCode 中打開對應頁面組件的源代碼文件,操作路徑如下:

使用vue-devtools插件可以很好地提高我們查找對應頁面組件代碼的效率,但只能定位到對應的組件代碼,如果我們想要直接找到頁面上某個元素相關的具體代碼位置,還需要在當前組件源代碼中進行二次查找,并且每次都要先選擇組件,再點擊打開按鈕才能打開代碼文件,不是特別快捷。

針對這個問題,我們開發了輕量級的頁面元素代碼映射插件,使用該插件可以通過點擊頁面元素的方式,一鍵打開對應代碼源文件,并且精準定位對應代碼行,無需手動查找,能夠極大地提高開發效率和體驗,實際的使用效果如下:

二、實現原理

整個插件主要分為3個功能模塊:client、server、add-code-location,client端發送特定請求給server端,server端接收到該請求后執行定位代碼行命令,而add-code-location模塊用于源碼的轉換。

2.1 client

client端這里其實就是指瀏覽器,我們在點擊頁面元素時,瀏覽器就會發送一個特定請求給server端,該請求信息包含了具體的代碼文件路徑和對應代碼行號信息。

function openEditor(filePath) {
axios
.get(`${protocol}//${host}:${port}/code`, {
params: {
filePath: `${filePath}`
}
})
.catch(error => {
console.log(error)
})
}

而監聽頁面元素的點擊事件則通過事件代理的方式全局監聽,給document綁定了點擊事件,監聽鍵盤和鼠標點擊組合事件來發起定位代碼行請求,避免和頁面原生的click事件發生沖突。

function openCode(e) {
if (isShiftKey || isMetaKey || e.metaKey || e.shiftKey) {
e.preventDefault()
const filePath = getFilePath(e.target)
openEditor(filePath)
}
...
}

2.2 server

server端是指本地起的一個服務器,可以監聽client端發送的特定請求,當接收到執行定位命令的請求時,執行VSCode打開代碼文件命令,并定位到對應的代碼行。

2.2.1 webpack devServer

如果是采用webpack構建的項目,webpack的devServer開發服務器已經提供了一個before屬性,可以通過它來監聽發送給開發服務器的請求。

before: function (app) {
app.get('/code', function (req, res) {
if (req.query.filePath) {
// 執行vscode定位代碼行命令
openCodeFile(req.query.filePath)
...
}
...
})
}

2.2.2 vite configureServer

如果是采用Vite構建的項目,可以使用Vite插件來實現server端監聽特定請求,Vite插件擴展于rollup插件接口,并且在原有的基礎上增加了一些特有的鉤子函數,例如configureServer鉤子,通過該鉤子函數可以用于配置開發服務器來監聽特定的請求。

const codeServer = () => ({
name: 'open-code-vite-server',
configureServer(server) {
server.middlewares.use((req, res, next) => {
...
if (pathname == '/code') {
...
if (filePath) {
openCodeFile(filePath) // 執行vscode定位代碼行命令
...
}
res.end()
}
...
})
}
})

2.2.3 執行 VSCode 定位命令

當server端監聽到client端發送的特定請求后,接下來就是執行VSCode定位代碼行命令。實際上,VSCode編輯器是可以通過code命令來啟動,并且可以相應使用一些命令行參數,例如:

"code --reuse-window"或"code -r"命令可以打開最后活動窗口的文件或文件夾;"code --goto"或"code -g"命令后面可以拼接具體文件路徑和行列號,當使用"code -g file:line:column"命令時可以打開某個文件并定位到具體的行列位置。

利用 VSCode 編輯器的這個特性,我們就能實現自動定位代碼行功能,對應的代碼路徑信息可以從client端發送的請求信息當中獲得,再借助node的child_process.exec方法來執行VSCode定位代碼行命令。

const child_process = require('child_process')
function openCodeFile(path) {
let pathBefore = __dirname.substring(0, __dirname.search('node_modules'))
let filePath = pathBefore + path
child_process.exec(`code -r -g ${filePath}`)
}

另外,為了正常使用 VSCode 的 Code命令,我們需要確保添加VSCode Code命令到環境變量當中。Mac系統用戶可以在VSCode界面使用command+shift+p快捷鍵,然后搜索Code 并選擇install 'code' command in path;Windows用戶可以找到VSCode安裝位置的bin文件夾目錄,并將該目錄添加到系統環境變量當中。

2.3 add-code-location

通過前面的介紹,大家應該了解了client端和server端的執行機制,并且在執行定位命令時需要獲取到頁面元素的代碼路徑,而具體的代碼路徑是以屬性的方式綁定到了DOM元素上,這時候就需要用到add-code-location模塊在編譯時轉換我們的源碼,并給 DOM元素添加對應的代碼路徑屬性。

整個源碼轉換處理流程如下:

2.3.1 獲取文件路徑

源碼轉換過程的第一步是獲取代碼文件的具體路徑,對于webpack打包的項目來說,webpack loader用來處理源碼字符串再合適不過,loader的上下文this對象包含一個resourcePath資源文件的路徑屬性,利用這個屬性我們很容易就能獲得每個代碼文件的具體路徑。

module.exports = function (source) {
const { resourcePath } = this
return sourceCodeChange(source, resourcePath)
}

對于Vite構建的項目來說,源碼的轉化操作也是通過插件來完成,Vite插件有通用的鉤子transform,可用于轉換已加載的模塊內容,它接收兩個參數,code參數代表著源碼字符串,id參數是文件的全路徑。

module.exports = function() {
return {
name: 'add-code-location',
transform(code, id) {
...
return sourceCodeChange(code, id)
}
}
}

2.3.2 計算代碼行號

接著在遍歷源碼文件的過程中,需要處理對應Vue文件template模板中的代碼,以“\n”分割template模板部分字符串為數組,通過數組的索引即可精準得到每一行html標簽的代碼行號。

function codeLineTrack(str, resourcePath) {
let lineList = str.split('\n')
let newList = []
lineList.forEach((item, index) => {
newList.push(addLineAttr(item, index + 1, resourcePath)) // 添加位置屬性,index+1為具體的代碼行號
})
return newList.join('\n')
}

2.3.3 添加位置屬性

在獲取到代碼文件路徑和代碼行號以后,接下來就是對Vue template模板中分割的每一行標簽元素添加最終的位置屬性。這里采用的是正則替換的方式來添加位置屬性,分別對每一行標簽元素先正則匹配出所有元素的開始標簽部分,例如<div、<span、<img等,然后將其正則替換成帶有code-location屬性的開始標簽,對應的屬性值就是前面獲取的代碼路徑和對應標簽的行號。

function addLineAttr(lineStr, line, resourcePath) {
let reg = /<[\w-]+/g
let leftTagList = lineStr.match(reg)
if (leftTagList) {
leftTagList = Array.from(new Set(leftTagList))
leftTagList.forEach(item => {
if (item && item.indexOf('template') == -1) {
let regx = new RegExp(`${item}`, 'g')
let location = `${item} code-location="${resourcePath}:${line}"`
lineStr = lineStr.replace(regx, location)
}
})
}
return lineStr
}

2.4  其他處理

2.4.1 源碼相對路徑

在給DOM元素添加對應的源碼位置屬性時,實際上采用的是相對路徑,這樣可以使得DOM元素上的屬性值更加簡潔明了。node_modules文件夾通常是在項目的根目錄下,而插件是以npm包的形式安裝在node_modules路徑下,利用node的__dirname變量可以獲得當前模塊的絕對路徑,因此在源碼轉換過程中就可以獲取到項目的根路徑,從而就能獲得Vue代碼文件的相對路徑。

let pathBefore = __dirname.substring(0, __dirname.search('node_modules'))
let filePath = filePath.substring(pathBefore.length) // vue代碼相對路徑

在server端執行代碼定位命令時,再將對應的代碼相對路徑拼接成完整的絕對路徑。

2.4.2 外部引入組件

add-code-location雖然可以對本地的Vue文件進行代碼路徑信息的添加,但是對于外部引入或解析加載的組件目前是沒有辦法進行轉換的,例如element ui組件,實際上的代碼行信息只會添加在element ui組件的最外層。這時候client端在獲取點擊元素的代碼路徑時會做一個向上查找的處理,獲取其父節點的代碼路徑,如果還是沒有,會繼續查找父節點的父節點,直到成功獲取代碼路徑。

function getFilePath(element) {
if (!element || !element.getAttribute) return null
if (element.getAttribute('code-location')) {
return element.getAttribute('code-location')
}
return getFilePath(element.parentNode)
}

這樣就可以在點擊后臺element ui搭建的頁面元素時,也能成功定位打開對應代碼文件。

三、接入方案

通過前面的介紹,想必大家對頁面元素代碼映射插件原理有了清晰的了解,接下來就介紹一下在項目中的接入方式。接入方式其實很簡單,并且可以選擇只在本地開發環境接入,不用擔心對我們的生產環境造成影響,放心使用。

3.1 webpcak構建項目

對于webpack構建的項目來說,首先在構建配置項vue.config.js文件中配置一下devServer和webpack loader,接著在main.js入口文件中初始化插件。

// vue.config.js
const openCodeServe = require('@vivo/vue-dev-code-link/server')
devServer: {
...
before: openCodeServe.before
},
if (!isProd) { // 本地開發環境
config.module
.rule('vue')
.test(/\.vue/)
.use('@vivo/vue-dev-code-link/add-location-loader')
.loader('@vivo/vue-dev-code-link/add-location-loader')
.end()
}
// main.js
import openCodeClient from '@vivo/vue-dev-code-link/client'
if (process.env.NODE_ENV == 'development') {
openCodeClient.init()
}

3.2 Vite構建項目

Vite構建項目接入該插件的方案和webpack構建項目基本上一致,唯一不一樣的地方在于打包配置文件里引入的是兩個Vite插件。

// vite.config.js
import openCodeServer from '@vivo/vue-dev-code-link/vite/server'
import addCodeLocation from '@vivo/vue-dev-code-link/vite/add-location'
export default defineConfig({
plugins: [
openCodeServer(),
addCodeLocation()
]
}

四、總結

以上就是對頁面元素代碼映射插件核心原理和接入方案的介紹,實現的方式充分利用了項目代碼打包構建的流程,實際上無論是哪個打包工具,本質上都是對源碼文件的轉換處理,當我們理解了打包工具的運行機制后,就可以做一些自己認為有意義的事。就拿頁面元素代碼映射插件來說,使用它可以極大提升開發效率,不再需要花費時間在尋找代碼文件上,特別是頁面數和組件數比較多的項目,只需點擊頁面元素,即可一鍵打開對應代碼文件,精準定位具體代碼行,無需查找,哪里不會點哪里,so easy!

責任編輯:未麗燕 來源: vivo互聯網技術
相關推薦

2022-12-10 17:47:03

VSCode代碼

2021-09-15 07:56:32

TypeScriptVue項目

2022-12-29 07:37:19

Java項目慢業務

2021-06-18 13:58:28

ESLint Vue 項目

2021-04-09 18:01:03

前端ReactDOM

2022-11-23 15:44:49

2022-12-04 23:54:39

2022-02-17 20:51:00

vuevscode前端

2021-08-04 08:27:00

VueReact自動化部署

2017-07-04 19:02:17

ReacRedux 項目

2022-06-21 07:41:08

FCPJS代碼

2022-08-15 18:22:22

JS代碼

2020-09-28 14:26:42

Shadow DOMWeb組件

2021-08-23 10:40:30

人工智能KubernetesAI

2022-06-20 10:45:55

SpringBoot項目

2009-04-07 09:12:35

敏捷新手入門大型開發

2021-09-14 07:06:13

React項目TypeScript

2021-09-03 09:06:42

代碼時間開發

2021-05-23 15:46:23

React代碼前端

2011-04-06 13:40:48

Delphi
點贊
收藏

51CTO技術棧公眾號

日本视频在线免费观看| 日韩欧美一区二区视频| 精品美女国产在线| 日本午夜精品理论片a级appf发布| 青青青青草视频| 日韩久久精品视频| av漫画网站在线观看| 亚洲精品一二| 欧美日韩一区二区在线| 国产经典一区二区| 亚洲第一成肉网| 国产99对白在线播放| 日韩精品视频中文字幕| 国产91综合一区在线观看| 精品久久久久久久一区二区蜜臀| 欧美成人一区二区在线| 天天操天天摸天天舔| 国产网友自拍视频导航网站在线观看 | 丰满熟妇乱又伦| 51亚洲精品| www.av亚洲| 亚洲欧美激情另类校园| 亚洲日本japanese丝袜| 免费视频一二三区| 欧美成人午夜77777| 国产精品久久三| 91精品国产高清| 亚洲人成人无码网www国产| 日韩毛片久久久| 国产v综合v亚洲欧| 国产va免费精品高清在线| 国产在线免费av| 久久男人av资源站| 国产一区二区三区高清播放| 欧美国产精品人人做人人爱| 在线观看av日韩| 麻豆tv入口在线看| 久久精品30| 亚洲第一福利网站| 中文精品一区二区三区| 国产精品国产精品国产| 啪啪激情综合网| 欧美性生活一区| 国产99午夜精品一区二区三区 | 日韩高清a**址| 99亚洲精品视频| 亚洲性在线观看| 伊人久久大香线蕉综合网蜜芽| 成人免费在线播放视频| 日韩免费不卡av| 中文字幕手机在线观看| 日韩av一级| 久久久精品国产99久久精品芒果| 国产精品久久久久久婷婷天堂| 国产一级特黄aaa大片| 日韩av在线中文字幕| 香蕉成人伊视频在线观看| 5566av亚洲| 亚洲综合久久av一区二区三区| 手机在线观看av| 国产精品91一区二区| 日韩免费中文字幕| 日本少妇bbwbbw精品| 亚洲一本二本| 91精品欧美福利在线观看| www黄色av| 成人免费网站观看| 成人久久视频在线观看| 久久久久久国产精品三级玉女聊斋 | 亚洲精品视频三区| 国产午夜精品一区理论片| 国产精品日本欧美一区二区三区| 精品国精品国产| 欧美性受xxxxxx黑人xyx性爽| 91成人在线| 国产精品全国免费观看高清| 欧美性bbwbbwbbwhd| 欧美日韩a v| 日韩天堂av| 亚洲二区中文字幕| 中文字幕在线观看91| 天堂av最新在线| 中文子幕无线码一区tr| 日韩av片永久免费网站| 国产一级一片免费播放| 欧美成人高清视频在线观看| 国产丝袜欧美中文另类| 日本亚洲欧美三级| 中文字幕视频网| 色爱综合网欧美| 这里只有精品在线播放| 亚洲精品色午夜无码专区日韩| 蜜桃a∨噜噜一区二区三区| 欧美日韩视频在线第一区 | 国产免费拔擦拔擦8x在线播放 | 人妻夜夜添夜夜无码av | 色婷婷**av毛片一区| 一本久道综合色婷婷五月| 欧美xx视频| 91搞黄在线观看| 正在播放91九色| 成人a在线视频免费观看| 成人免费视频一区| 精品一区二区三区国产| 国产精品美女一区| 国产一区二区三区高清播放| 国产精品毛片va一区二区三区| 日韩伦人妻无码| 亚洲区第一页| 日韩av日韩在线观看| 97超视频在线观看| 久久99精品久久久久久动态图| 亚洲欧美在线播放| 激情五月深爱五月| 一区视频在线| 国产成一区二区| 国产一区二区三区在线观看| 国产高清精品在线| 欧美日韩高清免费| 国产福利电影在线| 亚洲免费av网站| 波多野结衣之无限发射| 成人免费在线视频网| 国产精品久久看| 韩国无码av片在线观看网站| 色哟哟在线观看| 精品一区二区三区在线观看国产| 粉嫩精品一区二区三区在线观看| 美国成人毛片| 亚洲欧美综合在线精品| 日本丰满少妇xxxx| 四虎永久精品在线| 欧美视频免费在线| 男女视频在线看| 亚洲男人av| 制服丝袜国产精品| 蜜桃传媒一区二区亚洲av| 亚洲一区二区三区| 国产日产亚洲精品系列| 精品免费日韩av| 国产精品1000部啪视频| 亚洲五月综合| 国产成人精品在线视频| 国产综合无码一区二区色蜜蜜| 国产精品欧美久久久久无广告 | 亚洲成人一二三区| 国产日韩高清一区二区三区在线| 国产精品99久久久久久人| 国产成人精品亚洲精品色欲| 久久久99精品久久| 久久久久99精品成人片| 成人av免费| 欧美在线三级电影| 草草地址线路①屁屁影院成人| 亚洲最大黄网| 国产欧美一区二区三区久久人妖| 波多野结衣爱爱| k8久久久一区二区三区| 五月天男人天堂| 欧美日韩精品一区二区三区视频| 亚洲成色999久久网站| 高h视频免费观看| 开心九九激情九九欧美日韩精美视频电影| 久久伊人资源站| 丰满的护士2在线观看高清| 91精品欧美一区二区三区综合在| 国精产品视频一二二区| 日韩国产欧美在线视频| 日本一欧美一欧美一亚洲视频| 韩国中文字幕hd久久精品| 亚洲欧美一区二区久久| 黑人巨大国产9丨视频| av成人亚洲| 伊人久久精品视频| 无码人妻丰满熟妇区五十路| 91丨porny丨户外露出| www在线观看免费| 免费观看成人www动漫视频| 九色91av视频| 亚洲精品网站在线| 亚洲大片一区二区三区| 亚欧美一区二区三区| 小处雏高清一区二区三区| 91久久久久久久一区二区| 中文字幕在线观看网站| 亚洲高清三级视频| 日本一卡二卡在线| 亚洲免费在线| 国产精品久久久久久久9999| 9i精品一二三区| 在线日韩一区二区| 日韩激情小视频| 亚洲女同同性videoxma| 欧美成人免费在线| 人人超在线公开视频| 国产欧美日韩另类一区| 在线免费观看成人| 91精品亚洲一区在线观看| 美女视频黄免费的亚洲男人天堂| 亚洲av无码国产综合专区| 亚洲国产精品一区二区久久恐怖片 | 肉大捧一出免费观看网站在线播放| 美女日韩一区| 久久久久久亚洲精品不卡| 国产精品免费一区二区三区都可以| 日韩欧美一级视频| 久久久国产一区二区三区四区小说| 网站一区二区三区| 午夜精彩国产免费不卡不顿大片| 国产一区在线观| 粉嫩一区二区三区| 久久亚洲精品网站| 欧美 日韩 国产 在线| 婷婷久久综合九色综合伊人色| 丰满少妇一区二区三区| 久久av资源网| 亚洲乱码日产精品bd在线观看| 日韩福利视频一区| 国产视频福利一区| 台湾佬中文娱乐网欧美电影| 色婷婷成人综合| 亚洲国产一二三区| 日韩欧美在线观看| 国产精品视频一区二区三| 一区二区电影在线观看| 国新精品乱码一区二区三区18| 日韩精选视频| 久久久亚洲国产天美传媒修理工| jizz视频在线观看| 亚洲国产精品久久久久久| 我和岳m愉情xxxⅹ视频| 美女性感视频久久| 欧美日韩性生活片| 亚洲色图网站| 天堂社区 天堂综合网 天堂资源最新版 | 亚洲精华液一区二区三区| www.日韩不卡电影av| 天天舔天天干天天操| 欧美一区二区三区在线观看| 国产精品久久久久久久久久精爆| 国产精品美女久久久久久2018 | 欧美日韩美女| 久久免费在线观看| 2024最新电影在线免费观看| 国产一区二区三区中文| 亚洲伦理在线观看| 欧美三级电影精品| 欧美日韩综合在线观看| 亚洲视频免费观看| 青青草自拍偷拍| www.日韩av| 亚洲妇女无套内射精| 精品一区二区三区欧美| 男人添女人下面免费视频| 久久精品首页| 蜜臀av午夜一区二区三区 | 久久人人爽人人爽人人片亚洲| 黄色软件在线| 国产丝袜一区二区| 天天操天天摸天天干| 一区二区在线免费| 亚洲 欧美 变态 另类 综合| 中文幕一区二区三区久久蜜桃| 熟女俱乐部一区二区| 日本不卡一区二区三区| aa在线免费观看| 狠狠爱www人成狠狠爱综合网| 自拍亚洲欧美老师丝袜| 日韩欧美字幕| 欧美日本韩国国产| 蜜桃精品噜噜噜成人av| 九九九久久久| 超碰成人97| 国产精品久久久久久久久久直播| 亚洲精品国产九九九| 亚洲精品日产aⅴ| 日本成人手机在线| caoporen国产精品| 51亚洲精品| 国产综合精品一区二区三区| 看全色黄大色大片免费久久久| 国产一区二区三区奇米久涩| 9国产精品午夜| 国产欧美日本在线| 日韩a级大片| 日韩av一区二区三区在线| 欧美aaa级| 国产精品户外野外| 色综合一区二区日本韩国亚洲 | 99久久久久久久久| 日本韩国精品一区二区在线观看| 成人一级免费视频| 欧美日韩视频不卡| 国产农村老头老太视频| 精品成人久久av| 五月婷婷中文字幕| 日本久久一区二区三区| 中文字幕一区2区3区| 欧美一区二区福利在线| 亚洲成人中文字幕在线| 日韩电影中文字幕av| 国产精品麻豆一区二区三区| 久久精品国产亚洲7777| 久久免费电影| 日本久久91av| 91国产精品| 精品视频一区二区| 欧美一区三区| 50度灰在线观看| 国产亚洲毛片在线| 九九九在线观看视频| 国产在线精品免费av| 国产精品探花在线播放| av男人天堂一区| 很污很黄的网站| 午夜久久福利影院| 在线观看国产精品视频| 亚洲第一av网| 95在线视频| 性欧美办公室18xxxxhd| 日韩精品成人av| 欧美日韩成人免费| 色综合一本到久久亚洲91| 3d动漫啪啪精品一区二区免费| 亚洲三级精品| 国产女人18毛片| 丝袜亚洲另类丝袜在线| 福利视频一区二区三区四区| 国产欧美日韩一级| 国产精品久久久久久久99| 久久日韩粉嫩一区二区三区 | 亚洲婷婷综合色高清在线| 日本污视频在线观看| 欧美日韩国产系列| 午夜视频免费看| 亚洲成人av片| 麻豆tv在线| 国产精品7m视频| 国产欧美三级电影| 免费成人进口网站| 日韩va亚洲va欧美va久久| 日批视频免费看| 日韩一区在线免费观看| 成人免费视频国产免费| 亚洲高清久久网| 中文字幕有码在线视频| 欧美在线国产精品| 只有精品亚洲| 国产专区一区二区| 激情久久久久久| 深爱五月综合网| 国产精品视频在线看| 激情五月婷婷网| 精品亚洲一区二区三区在线播放| 色网在线观看| 亚洲一区精品电影| 亚洲91视频| www.久久久精品| 中文字幕第一区二区| 欧产日产国产69| 日韩精品久久久久久福利| 麻豆蜜桃在线| 粉嫩av一区二区三区免费观看| 国内精品久久久久久久影视麻豆 | 亚洲一二三四五六区| 日本精品一级二级| 欧洲视频在线免费观看| 欧美一区二区.| 欧美91在线| 日本www在线播放| 久久综合狠狠综合久久综合88| 日本一级淫片色费放| 亚洲国产黄色片| 18video性欧美19sex高清| 国产乱码一区| 亚洲日本黄色| 添女人荫蒂视频| 欧美日韩亚洲激情| 天天操天天插天天射| 欧美自拍视频在线| 国产真实有声精品录音| 亚洲最大综合网| 综合av第一页| 国产片在线播放| 欧美大片免费观看| www.爱久久| 亚洲人精品午夜射精日韩| 91免费视频大全| 小泽玛利亚一区二区三区视频| 最近免费中文字幕视频2019| 日韩三级一区| 成人污网站在线观看| 成人性色生活片| 超碰中文字幕在线| 国产亚洲激情在线| aa在线视频| 国产精品入口免费| 亚洲一区二区三区高清| 欧美老女人性生活视频| 欧美一区二区人人喊爽|