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

從零開始搭建一個(gè)屬于你自己的組件庫!

開發(fā) 新聞
其實(shí)組件庫這個(gè)東西真是早有早好,如果當(dāng)前團(tuán)隊(duì)還沒有的話,趕緊搞一個(gè)吧。

之前發(fā)過一篇搭建組件庫文章 使用 Vite 和 TypeScript 從零打造一個(gè)屬于自己的 Vue3 組件庫 兩篇文章可以結(jié)合一起學(xué)習(xí)

組件在前端開發(fā)中越來越重要了,開發(fā)者更細(xì)分、聚焦于組件層面的開發(fā),然后像搭積木一樣完成應(yīng)用功能。組件庫可以統(tǒng)一管理組件,輸出文檔,能提升組件復(fù)用性、避免重復(fù)造輪子。趕快搭建自己的組件庫吧,這瓜保甜!

需求背景

為什么要搭建組件庫?

雖然業(yè)界已經(jīng)有很多成熟優(yōu)秀的ui庫可以供我們使用,也為我們解決了很多問題。但是基礎(chǔ)的東西總是不能滿足所有業(yè)務(wù)場景,更多時(shí)候我們需要擴(kuò)展功能來滿足業(yè)務(wù)的需求,好比 table 需要自定列這樣的~相信這也是很多小伙伴開發(fā)時(shí)候的場景。

跨項(xiàng)目復(fù)用。很多時(shí)候?yàn)榱朔奖悖皇腔诋?dāng)前項(xiàng)目對組件進(jìn)行二次封裝(反正我是這樣干的哈哈),然后做其他項(xiàng)目遇到同樣場景時(shí),要么copy(經(jīng)常忘記之前封裝在哪個(gè)項(xiàng)目里了??)、要么重新干一個(gè)...總是缺少一個(gè)統(tǒng)籌的地方,復(fù)用很不方便。

組件使用文檔。文檔產(chǎn)出對于一線開發(fā)來說可能相對比較欠缺,因?yàn)榇蠹叶济τ跀]業(yè)務(wù),文檔這種奢侈品能省一點(diǎn)是一點(diǎn)。這樣導(dǎo)致一個(gè)問題就是自己封裝的組件別人不會(huì)用、不知道在哪里用,甚至不知道有這么個(gè)東西。

跨團(tuán)隊(duì)共建發(fā)展。大多B端系統(tǒng)都是以 element 、 antd 等ui框架為主,基于各種業(yè)務(wù)場景,基本都會(huì)有自己團(tuán)隊(duì)的二次封裝。其實(shí)類似的功能擴(kuò)展肯定會(huì)有的,如果有組件庫把組件都集中起來,就能減少很多重復(fù)造輪子的勞動(dòng)力了!

筆者之前就經(jīng)常有這樣的痛點(diǎn),在某個(gè)項(xiàng)目里二次封裝了 el-select ,實(shí)現(xiàn) filterable 的時(shí)搜索輸入框移到下拉列表中,避免多選時(shí)多個(gè)tag擠壓了搜索框的空間。當(dāng)時(shí)是寫在一個(gè)項(xiàng)目里,然后其他項(xiàng)目也遇到了這樣的需求...我在十幾個(gè)項(xiàng)目里面尋找、回憶,找回當(dāng)年封裝的組件,人都麻了......

正好最近在搞云產(chǎn)品,需要提供給各中后臺(tái)統(tǒng)一的樣式、布局規(guī)范以接入,還需要統(tǒng)一擴(kuò)展基礎(chǔ)組件的能力。于是組件庫的需求的就這么出來了!基本想做成的就是對 element-ui/plus 、 antd 一些組件進(jìn)行二次封裝、擴(kuò)展,并集成到組件庫中,筆者當(dāng)仁不讓把需求從大佬手上搶過來做。

目前初步搭建起來了一個(gè)簡易的組件庫了,可對 element-plus 、 element-ui 的組件進(jìn)行開發(fā)調(diào)試,且目前已經(jīng)實(shí)現(xiàn)幾個(gè)組件的擴(kuò)展了~當(dāng)然,第一版還是有很多工作沒做完、做好,不過沒關(guān)系,畢竟不能一下吃成一個(gè)胖子。

圖片

本文會(huì)從組件庫的工程架構(gòu)、文檔、組件開發(fā)環(huán)境準(zhǔn)備、打包、發(fā)布進(jìn)行分享,組件開發(fā)環(huán)境主要是 element-ui/plus 的??,因?yàn)楸酒谛枨笾灰獫M足 vue2 、 vue3 的中臺(tái),所以 antd 的還沒有投入。與其說分享,其實(shí)更是做一個(gè)記錄沉淀一下,也是回顧總結(jié)~事不宜遲!開始進(jìn)入主題吧,從0-1搭建一個(gè)組件庫!

一、項(xiàng)目架構(gòu)

第一次搞組件庫,仿佛走進(jìn)一個(gè)新的空白領(lǐng)域了。作為一個(gè)沒經(jīng)驗(yàn)的小白,當(dāng)然是得抄作業(yè)啦,不不不,應(yīng)該是“借鑒”??。這時(shí)候搞個(gè)開源的項(xiàng)目來參照參照還是挺香的,于是筆者就去“學(xué)習(xí)了” element-plus項(xiàng)目[1]的架構(gòu)、代碼組織方式,再結(jié)合自己的需求場景就開始干了。

1. Monorepo

整個(gè)工程的代碼組織采用 Monorepo 的組織方式,使用工具 pnpm + workspace 來實(shí)現(xiàn)。所以全部項(xiàng)目都是放在一個(gè)倉庫里的,包括文檔、組件。

工程具體分為以下幾塊,以文檔和組件庫為兩大類進(jìn)行分塊:

(1)文檔工程(docs)

  • 安裝指引
  • 組件使用文檔(elm、elp、antd)
  • 組件開發(fā)文檔

(2)組件庫(packages)

  • element-plus
  • element-ui
  • ant-design
  • voice-components

其中 voice-components 筆者是打算用來做 adapt層 用的,因?yàn)槲臋n工具用了 VitePress(后面會(huì)講),它只能支持 vue3 的組件,所以 vue2 、 react 的組件需要做一層適配,這一塊是預(yù)留的,暫時(shí)可以不關(guān)注。

圖片

第一版比較簡單,后續(xù)如果沉淀出一些工具、打包腳本等,也會(huì)再擴(kuò)展幾個(gè)項(xiàng)目放進(jìn)去 workspace 里。所以目前就先這樣吧,用著先~

2. 文檔項(xiàng)目結(jié)構(gòu)

抄作業(yè)抄作業(yè),這部分跟 element-plus 基本是一致的。

  • index.md。!!顧名思義,文檔首頁~
  • .vitepress目錄:文檔站點(diǎn)工具配置相關(guān),這個(gè)后面再展開~
  • zh-CN目錄:文檔md文件

components:組件使用文檔.md。組件的使用demo及案例代碼,相關(guān)配置說明

guide:組件庫指引文檔.md。包括組件的安裝指南、開發(fā)指南

  • public目錄:相關(guān)靜態(tài)資源目錄。css、image等
  • build目錄:放點(diǎn)自己實(shí)現(xiàn)的構(gòu)建腳本、vite插件啥的

圖片

3. 組件庫結(jié)構(gòu)

這部分跟 element-plus 也是基本一致的,具體大家可以參照他們的實(shí)現(xiàn),這里就記錄個(gè)大概,粗略帶過吧。

每一個(gè)ui框架的結(jié)構(gòu)都一樣,以其中一個(gè)為例記錄:

(1)組件項(xiàng)目入口——根index。導(dǎo)出當(dāng)前項(xiàng)目需要導(dǎo)出的所有模塊(可按需引入)。并導(dǎo)出全局安裝方法。(Vue.use(VcComponents))可全局注冊

export * from './components'
export default {
install
}

(2)components:

  • 入口文件:index。導(dǎo)出所有組件。
export * from '...'
export * from '...'
export * from '...'
  • 存放全部組件,以組件名作為文件夾名。

(3)組件文件夾(以button為例):

  • 入口文件:index。導(dǎo)出當(dāng)前組件,并包裝 install 方法(主要用于Vue.use調(diào)用時(shí)進(jìn)行全局注冊)。
  • 組件文件。實(shí)現(xiàn)組件擴(kuò)展的二次封裝。(這里建議擴(kuò)展組件時(shí)保留組件的原來用法,這樣可以降低使用時(shí)候的學(xué)習(xí)成本)

圖片

二、組件庫工具

這里不會(huì)面面俱到,只記錄一些用到的核心工具以及核心的用法~就算不是特別細(xì)粒度,相信大家要自己動(dòng)手搞的時(shí)候也難不倒你們的!!筆者這么菜都一樣搞,你們肯定都行!

1. 文檔站點(diǎn)工具——VitePress

對于組件庫來說,文檔可以說是最關(guān)鍵的一環(huán)了,沒有文檔的組件庫不是真的組件庫~這里筆者用了幾分鐘去調(diào)研(根本就沒怎么調(diào)研),最終決定使用 VitePress[2] 作為文檔站點(diǎn)工具,目前用的版本是 1.0.0-alpha.4。(哈哈哈大家不要害怕alpha版,用著沒啥毛病)

使用下來基本配置用法在官方文檔[3]中都能找到,已經(jīng)滿足當(dāng)前的使用場景了~大家也要采用的話,花點(diǎn)時(shí)間去搓一搓就好,整個(gè)文檔站點(diǎn)搭建不算難,畢竟只要能跑起來就可以慢慢調(diào)整慢慢搞。

核心配置(都放在 .vitepress 目錄下):

(1)配置文件:.vitepress 根目錄的 config 文件。其實(shí)沒有特別多的配置,主要就是導(dǎo)航欄和菜單欄而已。

export default defineConfig({
title: 'voice-ui',
description: '',
base,
head: [
[
'link',
{
rel: 'icon',
href: '/images/favicon.ico'
}
]
],
themeConfig: {
logo: '/images/favicon.ico',
nav, // 配置導(dǎo)航欄
sidebar, // 配置側(cè)邊菜單欄
footer // 配置頁腳
}
})

(2)nav 配置導(dǎo)航欄配置(文檔鏈接4)

export default [
{ text: '指南', link: '', activeMatch: '' },
{ text: 'element-plus', link: '', activeMatch: '' },
{ text: 'element-ui', link: '', activeMatch: '' },
{ text: 'ant-design', link: '', activeMatch: '' }
]

(3)sidebar 配置側(cè)邊菜單欄(文檔鏈接[5])。具體配置太多就不全貼出來了,這里的配置在文檔中都能找到。如下這樣配置就是一個(gè) nav 路由對應(yīng)一個(gè) sidebar 菜單。

export default {
'/zh-CN/guide/': [
{
text: '安裝',
items: [
{ text: 'element-plus', link: '' },
...
]
},
{
text: '開發(fā)者指南',
items: ...
}
]
}

大概的效果如下,不同nav對應(yīng)各自的側(cè)邊欄菜單:

(4)/theme/index 中自定義主題 & 全局注冊 vue3 組件

  • 具體配置參照文檔[6]。這里的僅是筆者的基本配置~
import { App } from 'vue'
import Theme from 'vitepress/theme'
import '../../public/css/customStyle.css' // 自定義的主題色文件
import 'element-plus/dist/index.css'
import 'element-plus/theme-chalk/dark/css-vars.css'
import VcComponent from '@voice-ui/voice-components' // 上文提到的adapt層,導(dǎo)出vue3的組件
export default {
...Theme,
enhanceApp ({ app }: {app: App}) {
app.use(VcComponent) // 進(jìn)行組件注冊,這樣我們可以直接在 markdown 中使用組件啦!
}
}
  • customStyle.css文件其實(shí)就是對VitePress的一些css變量進(jìn)行自定義重寫??
:root {
--vc-primary-color: #295dfa;
...
}
:root {
--vp-c-brand: var(--vc-primary-color); /* 自定義 VitePress 的主題色 */
...
}

2. 打包工具——Vite

提到這個(gè)必須提一嘴:開發(fā)真絲滑!是的,包括各項(xiàng)目的 dev 、 build 都是使用 Vite 完成。其實(shí)這個(gè)沒什么好說的,大家可能用得比我都熟~所以這里只簡單帶一帶用了什么功能~

(1)用到的 vue2、 vue3 插件(官方文檔戳[7]):

  • underfin/vite-plugin-vue2
  • @vitejs/plugin-vue

(2)打包配置——庫模式。基本的都有了。es、cjs、umd、iife。(官方文檔戳[8],具體下文會(huì)講)

(3)配置alias。各模塊在dev、prod環(huán)境中相互引用(官方文檔戳[9],具體下文會(huì)講)

(4)配置external。(vite配置[10];rollup配置[10])

第一版差不多就這些了,配置上還是比較簡單的。基本可以滿足 dev開發(fā)、build打包 需求。

三、開發(fā)環(huán)境

因?yàn)槭褂玫?VitePress 支持在 markdown 中直接使用 vue3 組件,所以 vue2 、 vue3 、 react 相關(guān)的開發(fā)環(huán)境有所不同。基于此, element-plus 的開發(fā)環(huán)境就沒有單獨(dú)搞了,直接在 docs 項(xiàng)目中進(jìn)行組件開發(fā)。

1. vue3 + element-plus 開發(fā)環(huán)境

這里也是直接抄作業(yè)的,模仿 element-plus 的實(shí)現(xiàn)。核心做法:

  • 包裝 element-plus組件 一層 install 方法
  • 在 VitePress 中進(jìn)行全局注冊
  • 在 md文件 中直接使用注冊好的組件,可以直接在文檔中進(jìn)行開發(fā)調(diào)試

大概的代碼思路:

(1)給組件對象添加 install 方法

import { withInstall } from '../../utils'
import Button from './button.vue'
export const VcButton = withInstall(Button)
export default VcButton
export * from './'

(2)install方法:接收一個(gè) Vue3 對象,用 Vue.component 進(jìn)行組件注冊

export const withInstall = comp => {
comp.install = app => {
app.component(comp.name, comp)
}
return comp
}

(3)文檔項(xiàng)目中,在 .vitepress/theme/index.ts 中進(jìn)行全局注冊(上文也有提到)

export default {
enhanceApp ({ app }: {app: App}) {
// 這里能拿到 app ,也就是Vue3的app
// VcButton在這里進(jìn)行全局注冊
app.use(VcButton) // app.use 就會(huì)調(diào)用 VcButton的install方法
}
}

(4)md中直接使用注冊好的組件

# Button 按鈕
這是一個(gè)按鈕
# Element-plus
## Button
<vc-button />

然后就能在頁面上看到了,并且是有熱更新的!這樣我們直接開發(fā)調(diào)試即可了。

圖片

2. vue2 + element-ui 開發(fā)環(huán)境

vue2 、 react 的開發(fā)環(huán)境實(shí)現(xiàn)思路大致相同(react的這次還沒搞,以vue2為例就好),就是在當(dāng)前項(xiàng)目中用vite啟動(dòng)一個(gè)devServer進(jìn)行開發(fā),就跟普通的項(xiàng)目開發(fā)是一樣的。

(1)根目錄建一個(gè) index.html ,指定入口

(2)搞個(gè)demo目錄,其實(shí)就是Vue項(xiàng)目,newVue完后掛載到dom上。如下:

圖片

在 demo-xxx 的vue文件中導(dǎo)入開發(fā)的組件進(jìn)行試用、調(diào)試。

頁面效果如下:

圖片

react的雖然還沒做,但是具體思路也是跟vue2一樣的,在react自己的項(xiàng)目中起服務(wù)進(jìn)行組件的開發(fā)調(diào)試~

四、組件打包、發(fā)布

目前的打包、發(fā)布實(shí)現(xiàn)得比較簡單。大概是統(tǒng)一打包,然后進(jìn)到每個(gè)目錄中去進(jìn)去npm發(fā)布,目前也是只發(fā)布在內(nèi)部的npm中。

1. 統(tǒng)一打包

為了打包方便,且契合當(dāng)前發(fā)布平臺(tái)的特性,在整個(gè)項(xiàng)目的根目錄中 package.json 的 scripts 中進(jìn)行了命令整合。這里后續(xù)可能會(huì)用腳本的方式去實(shí)現(xiàn),因?yàn)榭赡茉诖虬臅r(shí)候要處理一些其他的邏輯。目前第一版大概如下:

{
"scripts": {
"build": "pnpm run build:elp && pnpm run build:elu && pnpm run build:shared",
"build:elp": "pnpm run -C packages/element-plus build",
"build:elu": "pnpm run -C packages/element-ui build",
"build:shared": "pnpm run -C packages/shared build",
"release": "node scripts/release.ts"
}
}

2. 組件庫的打包配置

上文打包工具哪里有提到過,目前是最簡單版的,打出 es、cjs、umd、iife 格式的包,而且要external掉第三方庫。大概配置:

export default defineConfig(async ({ command, mode }) => {
return {
plugins: [ createVuePlugin() ],
build: {
rollupOptions: {
external: ['element-ui', 'vue']
},
lib: {
entry: path.resolve(__dirname, './components/index.js'),
name: 'voiceUi',
fileName: 'vc-element-ui',
formats: ['es', 'cjs', 'umd', 'iife']
}
},
resolve: {
alias: await alias()
}
}
})

3. npm發(fā)布

其實(shí) npm包 安裝只是其中一種方式,該組件庫后續(xù)還會(huì)新增模塊聯(lián)邦——MF的接入方式

目前的npm發(fā)包時(shí)候用了個(gè)腳本,基本就是進(jìn)到每個(gè)目錄下去執(zhí)行以下更新版本好,然后執(zhí)行 npm publish。(這里的腳本會(huì)結(jié)合自己發(fā)布平臺(tái)的一些能力去寫的,所以就不貼出來了,大致思路就是這樣)

五、開發(fā)時(shí)一些注意點(diǎn)

1. Vue版本沖突導(dǎo)致啟動(dòng)服務(wù)、打包失敗

因?yàn)槭鞘褂?Monorepo 代碼組織方式,所以整個(gè)項(xiàng)目難免會(huì)出現(xiàn)依賴包重合(版本不同)的問題。就好比這整個(gè)項(xiàng)目中既裝了 Vue3 、也裝了 Vue2 ,可能起項(xiàng)目時(shí)會(huì)報(bào)錯(cuò):

Vue packages version mismatch:
- vue@3.xxx
- vue-template-compiler@2.xxx

但是仔細(xì)檢查發(fā)現(xiàn)當(dāng)前項(xiàng)目的 node_modules 中的 vue 和 vue-compiler 是同版本的,而且是在當(dāng)前工程中執(zhí)行的啟動(dòng)、打包。查了個(gè) issus ,在pnpm文檔中找到了相關(guān)的解決方案:

圖片

具體文檔地址:pnpm—shared-workspace-lockfile[11]

配置了這個(gè)文件后問題就解決了~

圖片

2. 配置alias解決入口問題

組件庫打包后的入口跟開發(fā)時(shí)的入口其實(shí)是有點(diǎn)不一致的,所以如果我們開發(fā)中直接 import xxx from 組件庫名稱 這樣導(dǎo)入組件是會(huì)有問題的,畢竟一般情況下我們的入口是配置打包完之后的產(chǎn)物的入口的(一般是dist、lib目錄下的index)。

圖片

出于這點(diǎn),配置個(gè)alias就很好解決問題了,因?yàn)楹芏嗟胤接玫剑P者直接就封成了個(gè)函數(shù):

export async function alias (): Promise<Array<Alias>> {
const projectPath = packagesPath()
const dirArr = await fsPromises.readdir(projectPath)
return dirArr.map(packagePath => {
return {
find: new RegExp(`^@voice-ui\/${packagePath}(\/(dist))?$`),
replacement: path.join(projectPath, `/${packagePath}/index`)
}
})
}

大概作用就是把入口從 dist 下面換到當(dāng)前工程的對應(yīng)項(xiàng)目下的index入口。

3. 樣式隔離

docs項(xiàng)目中用的 VitePress ,他會(huì)有一些自己的樣式控制,可能會(huì)影響到我們需要在文檔中展示的組件。剛好筆者就遇到了這么一個(gè)情況:

圖片

如圖所示,table的樣式變得很奇怪。筆者并沒有對樣式有做什么處理,就是element-plus的table。用審查元素看了下,主要是 VitePress 也有自己的table的樣式,影響到 el-table 的表現(xiàn)了。

我們可以通過重寫樣式解決,但這樣在其他的如 antd、element-ui 的組件放進(jìn)來的時(shí)候也會(huì)有問題。所以最好還是把樣式進(jìn)行隔離。哈哈哈,其實(shí)寫到這里的時(shí)候,筆者還沒有實(shí)現(xiàn)樣式隔離,畢竟給大伙寫文章更重要嘛!!

筆者有個(gè)大概想法是用 webComponent 去隔離,這只好做完了再寫出來了??,讓大家留個(gè)念想。

寫在最后

其實(shí)組件庫這個(gè)東西真是早有早好,如果當(dāng)前團(tuán)隊(duì)還沒有的話,趕緊搞一個(gè)吧。筆者以前也沒意識(shí)去搞這個(gè)東西(還是太菜了),所以做了很多重復(fù)的勞動(dòng)。每做一些新項(xiàng)目,或者參與別人的項(xiàng)目,經(jīng)常想用一些自己之前封裝的組件,都很麻煩,有時(shí)候?yàn)榱瞬幌肭衼砬腥ィ苯泳蛣?dòng)手寫了。

現(xiàn)在想想,要是那時(shí)候就做了個(gè)組件庫該多好啊~其實(shí)做個(gè)簡單版的也不是很難,如果是只需要關(guān)注一種前端框架的那就更簡單了,要考慮的東西更少。把整個(gè)組件庫搭出來之后,還能找其他小伙伴一起共建,一起維護(hù),不斷強(qiáng)大自己團(tuán)隊(duì)的組件庫,大家一起受益~

真的!還沒有的趕緊搭!這瓜保甜。

責(zé)任編輯:張燕妮 來源: 大前端技術(shù)之路
相關(guān)推薦

2017-05-08 14:27:49

PHP框架函數(shù)框架

2013-07-10 10:38:48

JavaScript框

2020-04-02 08:47:04

開發(fā)網(wǎng)站技術(shù)

2024-05-15 14:29:45

2022-11-08 15:14:17

MyBatis插件

2015-10-15 14:16:24

2017-09-13 14:01:51

數(shù)據(jù)庫MongoDB數(shù)據(jù)庫即服務(wù)

2013-07-11 10:03:36

JavaScript框架

2023-11-23 15:06:36

PythonHTTP服務(wù)器

2023-10-24 16:44:24

RubyDNS

2025-04-23 03:00:00

多模態(tài)RAGMinerU

2022-08-09 10:00:57

ViteTypeScripVue3

2022-06-02 09:09:27

前端React低代碼編輯器

2015-11-17 16:11:07

Code Review

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2019-01-18 12:39:45

云計(jì)算PaaS公有云

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構(gòu)

2023-12-05 13:10:00

ReflexPython

2016-11-02 14:18:45

搭建論壇Flask框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产裸体舞一区二区三区| 国产精品美女诱惑| 久久国产高清视频| 日韩精品一区二区三区中文字幕 | 亚洲无线视频| 亚洲乱码av中文一区二区| 天天操天天爱天天爽| 国产福利视频在线观看| 不卡在线视频中文字幕| 国产精品久久久久高潮| 成人高潮免费视频| 亚洲va久久| 欧美一区二区三区影视| 日本国产在线播放| 国产福利在线播放麻豆| 国产亚洲欧美日韩日本| av资源一区二区| 一区二区乱子伦在线播放| 好吊日精品视频| 中文字幕在线日韩 | 亚洲区小说区| 日韩一二三四区| 中文字幕欧美人妻精品一区| 日本aa在线| 国产精品第四页| 看高清中日韩色视频| 国产乱码精品一区二三区蜜臂 | 国产黄色一区二区三区| 91丝袜在线| 国产亚洲成av人在线观看导航| 99久久无色码| 97人人爽人人爽人人爽| 日韩不卡手机在线v区| 久久久亚洲国产| www久久久久久久| 天天久久夜夜| 亚洲精品一区二区三区影院| 四虎1515hh.com| 精品肉辣文txt下载| 欧美视频免费在线| avav在线播放| 伊人222成人综合网| 国产精品区一区二区三区| 欧美精品久久| 亚洲 国产 欧美 日韩| 粉嫩av亚洲一区二区图片| 国产伦精品一区二区三区精品视频| 天天干天天干天天干天天| 国产在线成人| 欧美丰满少妇xxxxx做受| 国产女人18水真多毛片18精品| 日韩不卡一区| 一区二区三区黄色| 成人国产精品久久久网站| 亚洲天堂日韩在线| 亚洲精品一区二三区不卡| 国产又粗又猛又色| 米奇精品关键词| 亚洲成人av在线| 日本美女视频网站| 欧美福利在线播放网址导航| 亚洲国产成人在线视频| www.四虎在线| 欧美毛片免费观看| 亚洲精品98久久久久久中文字幕| 东京热av一区| 秋霞在线一区| 亚洲天堂av电影| 国产在线综合视频| 成人羞羞在线观看网站| 日韩中文在线视频| 国产大片免费看| 激情欧美一区| 青青草成人在线| 国产在线一级片| 精品无人码麻豆乱码1区2区| 91久久综合亚洲鲁鲁五月天| 精品人妻一区二区三区日产乱码| 国产成人av一区二区三区在线观看| 国产精品乱子乱xxxx| 婷婷在线观看视频| 国产精品私人影院| 成人性做爰片免费视频| 波多野一区二区| 欧美少妇一区二区| 337p日本欧洲亚洲大胆张筱雨 | 日韩亚洲视频在线| 国内精品不卡| 天天色天天操综合| 美女一区二区三区视频| 欧美大片91| 亚洲精品日韩欧美| 小向美奈子av| 亚洲精品少妇| 国产精品视频自在线| а√中文在线资源库| 97精品久久久久中文字幕| 亚洲国产另类久久久精品极度| 最新日本在线观看| 色诱视频网站一区| 又黄又爽又色的视频| 欧美亚洲精品日韩| 青青操视频在线播放| 在线综合亚洲| 成人免费观看a| 五月婷婷六月丁香综合| 国产精品久久久久婷婷二区次| 日韩精品一区二区三区四| gogo亚洲高清大胆美女人体| 日韩午夜三级在线| 久久久久亚洲av成人无码电影| 午夜激情一区| 国产精品久久久久久一区二区| www.色播.com| 国产精品嫩草久久久久| 伊人成色综合网| 欧美一级片网址| 亚洲免费视频观看| 久久精品女人毛片国产| 九色综合狠狠综合久久| 欧美激情视频一区二区三区| 影音先锋男人在线资源| 欧美日韩精品系列| 欧洲av一区二区三区| 伊人精品成人久久综合软件| 91精品在线观看视频| 国模吧精品人体gogo| 午夜私人影院久久久久| 男插女视频网站| 99精品小视频| 国产精品精品视频| 你懂的在线网址| 亚洲第一激情av| 波多野结衣免费观看| 日韩aaaa| 国产精品视频网址| 国产在线色视频| 日本久久电影网| 欧洲女同同性吃奶| 西西人体一区二区| 久久66热这里只有精品| 99riav视频在线观看| 精品国产百合女同互慰| 免费一级黄色大片| 国产suv精品一区二区三区| 男女爱爱视频网站| 国产一区二区三区免费在线 | 美国黄色a级片| 一区二区三区国产在线| 国精产品99永久一区一区| 好久没做在线观看| 亚洲国产精品久久91精品| 国产精品23p| caoporn国产一区二区| 99在线精品免费视频| 久久精品论坛| 91精品国产自产91精品| 四虎影视精品成人| 日韩欧美精品免费在线| 91中文字幕永久在线| 玖玖精品视频| 亚洲欧美日产图| 久久er热在这里只有精品66| 播播国产欧美激情| 国产肥老妇视频| 亚洲影院理伦片| 少妇户外露出[11p]| 久久九九99| 天堂精品视频| 国产精品日韩精品在线播放| 欧美乱大交xxxxx另类电影| 性网爆门事件集合av| 亚洲二区视频在线| 国产熟妇搡bbbb搡bbbb| 男女性色大片免费观看一区二区| 日韩精品第一页| 3d动漫一区二区三区在线观看| 欧美成人一二三| 无码国产精品一区二区色情男同| 日韩欧美亚洲一二三区| 成人18视频免费69| 国产成人在线视频免费播放| 99热自拍偷拍| 欧美丝袜激情| av蓝导航精品导航| 欧洲av不卡| www日韩欧美| 天天干天天做天天操| 欧美日韩亚洲综合在线| 欧美日韩偷拍视频| 国产午夜精品久久久久久久| 视频区 图片区 小说区| 国产精品日本| 黄色a级在线观看| 羞羞色国产精品网站| 成人夜晚看av| 亚洲精品福利电影| 九九精品在线视频| 久蕉在线视频| 日韩女优av电影在线观看| 蜜臀精品一区二区三区| 亚洲免费在线电影| 欧洲av一区二区三区| 成人免费高清在线观看| 午夜免费精品视频| 国产精品激情| 一区二区高清视频| 日韩电影不卡一区| 96国产粉嫩美女| 亚洲日本在线观看视频| 孩xxxx性bbbb欧美| 免费观看在线午夜影视| 日韩精品在线影院| 亚洲高清视频在线播放| 欧美日韩国产精品自在自线| 中文字幕激情小说| 亚洲精品乱码久久久久久黑人| 中文字幕被公侵犯的漂亮人妻| 国产成人综合自拍| www.色就是色.com| 美女诱惑一区| 成年人午夜视频在线观看| 偷拍欧美精品| 香蕉久久夜色| 精品国产91乱码一区二区三区四区 | 激情欧美一区二区三区黑长吊| 欧美性受xxxx黑人猛交| 亚洲七七久久综合桃花剧情介绍| 中文字幕亚洲欧美一区二区三区| 亚洲av成人精品一区二区三区在线播放| 宅男噜噜噜66一区二区66| 国语对白做受69按摩| 狠狠干狠狠久久| 日韩人妻无码一区二区三区99| 亚洲精品日韩综合观看成人91| 亚洲一级理论片| 中文字幕国产精品一区二区| 久久精品国产亚洲av麻豆| 91在线观看地址| 四季av综合网站| 成人国产一区二区三区精品| 日本少妇一级片| 国产98色在线|日韩| 亚洲少妇一区二区| 懂色av中文一区二区三区| 蜜桃视频无码区在线观看| 国产精品一级在线| 国产探花一区二区三区| 国产成人午夜99999| 韩国三级在线看| av资源网一区| 法国伦理少妇愉情| 久久久久久亚洲综合影院红桃| 中文字幕一二三四区| 国产日韩欧美综合在线| 欧美黄色激情视频| 国产精品欧美久久久久一区二区 | 亚洲av成人无码久久精品老人| 日韩高清av一区二区三区| 欧美女优在线| 在线视频欧美日韩精品| 麻豆传媒在线免费看| 免费成人高清视频| a级大胆欧美人体大胆666| 97视频在线免费观看| 日韩性xxx| 国产精品网址在线| 视频国产精品| 精品国产乱码久久久久久郑州公司 | 一级黄色录像视频| 天天综合日日夜夜精品| 伊人久久久久久久久久久久| 欧美网站一区二区| www.我爱av| 亚洲精品少妇网址| 蜜芽在线免费观看| 久久久亚洲福利精品午夜| 综合在线影院| 91色在线观看| 任你躁在线精品免费| 亚洲一区精品视频| 欧美午夜在线视频| 日韩中文字幕组| 国产精品综合二区| 精品少妇一区二区三区免费观| 亚洲国产精品传媒在线观看| 免费看一级一片| 欧美色道久久88综合亚洲精品| 91久久精品无码一区二区| 亚洲国产精品字幕| 夜级特黄日本大片_在线| 久久久久久尹人网香蕉| 国产麻豆久久| 国产伦精品一区二区三区视频孕妇| 色棕色天天综合网| 欧美在线观看黄| 日韩av电影天堂| 白嫩情侣偷拍呻吟刺激 | 小说区视频区图片区| 国产欧美69| 成人免费黄色av| 国产性做久久久久久| 久久久久黄色片| 欧美日韩一区久久| 亚洲av电影一区| 欧美精品在线免费播放| 欧美国产日韩电影| 精品一区二区三区自拍图片区| 99久久夜色精品国产亚洲96| 国模吧无码一区二区三区| 国产精品一区二区x88av| 五月天婷婷丁香网| 色激情天天射综合网| 色呦呦中文字幕| 久久综合五月天| 国产亚洲人成a在线v网站| 美女主播视频一区| 精品动漫3d一区二区三区免费版 | 久久夜色精品国产亚洲aⅴ| 日韩欧美另类一区二区| 久久99影院| 亚洲先锋成人| 午夜性福利视频| 伊人开心综合网| 国产精品一品二区三区的使用体验| 亚洲香蕉av在线一区二区三区| zzzwww在线看片免费| 国产精品精品软件视频| 欧美久色视频| 日韩av影视大全| 成人欧美一区二区三区| 在线免费看91| 中文字幕在线看视频国产欧美在线看完整 | 日本中文字幕在线视频| 国产成人久久精品| 伊人久久大香线蕉av不卡| 无码人妻丰满熟妇区96| yourporn久久国产精品| 久久精品免费av| 精品99999| √天堂8资源中文在线| 国产精品毛片va一区二区三区| 亚洲无线视频| 成人免费无码大片a毛片| 精品久久久久久中文字幕一区奶水| 成人免费视频国产免费麻豆| 欧美黄色www| 成人激情自拍| 777精品久无码人妻蜜桃| 91在线丨porny丨国产| 黄色免费av网站| 亚洲日本成人女熟在线观看| 欧美日韩精品免费观看视完整| 日日噜噜噜噜夜夜爽亚洲精品| 青青青爽久久午夜综合久久午夜| 纪美影视在线观看电视版使用方法| 欧美在线三级电影| 免费黄网在线观看| 亚洲综合在线播放| 亚洲国产专区校园欧美| 中文字幕在线观看网址| 在线亚洲+欧美+日本专区| av网站无病毒在线| 91久久国产精品| 亚洲第一黄网| 香蕉视频久久久| 3751色影院一区二区三区| 亚洲丝袜精品| 欧美一区二区高清在线观看| 奇米色一区二区三区四区| 欧美精品久久久久久久久46p| 欧美mv日韩mv国产网站app| 久久男人av资源站| 亚洲巨乳在线观看| 懂色av一区二区三区蜜臀| 久久夜色精品国产噜噜亚洲av| 自拍偷拍亚洲一区| 草莓视频一区二区三区| 久章草在线视频| 亚洲欧洲精品成人久久奇米网| www.麻豆av| 国产精品xxxxx| 欧美精品一卡| 欧美日韩高清丝袜| 日韩区在线观看| 天天综合网天天| 奇米影视亚洲色图| 国产清纯白嫩初高生在线观看91 | 毛片在线播放视频| 中文字幕欧美激情| 欧美77777| 国产欧美日韩专区发布| 亚洲精品日本| 粉嫩av性色av蜜臀av网站| 亚洲精品一区av在线播放| 香蕉大人久久国产成人av| 天天天干夜夜夜操| 亚洲成人你懂的| 国产三区在线观看| 欧美极品视频一区二区三区|