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

Vite 微前端實踐,實現(xiàn)一個組件化的方案

開發(fā) 前端
微前端是一種多個團隊通過獨立發(fā)布功能的方式來共同構(gòu)建現(xiàn)代化 web 應用的技術(shù)手段及方法策略。

本文轉(zhuǎn)載自微信公眾號「前端星辰」,作者旋律 。轉(zhuǎn)載本文請聯(lián)系前端星辰公眾號。

什么是微前端

微前端是一種多個團隊通過獨立發(fā)布功能的方式來共同構(gòu)建現(xiàn)代化 web 應用的技術(shù)手段及方法策略。

微前端借鑒了微服務的架構(gòu)理念,將一個龐大的前端應用拆分為多個獨立靈活的小型應用,每個應用都可以獨立開發(fā)、獨立運行、獨立部署,再將這些小型應用聯(lián)合為一個完整的應用。微前端既可以將多個項目融合為一,又可以減少項目之間的耦合,提升項目擴展性,相比一整塊的前端倉庫,微前端架構(gòu)下的前端倉庫傾向于更小更靈活。

特性

  • 技術(shù)棧無關(guān) 主框架不限制接入應用的技術(shù)棧,子應用可自主選擇技術(shù)棧
  • 獨立開發(fā)/部署 各個團隊之間倉庫獨立,單獨部署,互不依賴
  • 增量升級 當一個應用龐大之后,技術(shù)升級或重構(gòu)相當麻煩,而微應用具備漸進式升級的特性
  • 獨立運行時 微應用之間運行時互不依賴,有獨立的狀態(tài)管理
  • 提升效率 應用越龐大,越難以維護,協(xié)作效率越低下。微應用可以很好拆分,提升效率

目前可用的微前端方案

微前端的方案目前有以下幾種類型:

基于 iframe 完全隔離的方案

作為前端開發(fā),我們對 iframe 已經(jīng)非常熟悉了,在一個應用中可以獨立運行另一個應用。它具有顯著的優(yōu)點:

  • 非常簡單,無需任何改造
  • 完美隔離,JS、CSS 都是獨立的運行環(huán)境
  • 不限制使用,頁面上可以放多個 iframe 來組合業(yè)務

當然,缺點也非常突出:

  • 無法保持路由狀態(tài),刷新后路由狀態(tài)就丟失
  • 完全的隔離導致與子應用的交互變得極其困難
  • iframe 中的彈窗無法突破其本身

整個應用全量資源加載,加載太慢

這些顯著的缺點也催生了其他方案的產(chǎn)生。

基于 single-spa 路由劫持方案

single-spa 通過劫持路由的方式來做子應用之間的切換,但接入方式需要融合自身的路由,有一定的局限性。

qiankun 孵化自螞蟻金融科技基于微前端架構(gòu)的云產(chǎn)品統(tǒng)一接入平臺。它對 single-spa 做了一層封裝。主要解決了 single-spa 的一些痛點和不足。通過 import-html-entry 包解析 HTML 獲取資源路徑,然后對資源進行解析、加載。

通過對執(zhí)行環(huán)境的修改,它實現(xiàn)了 JS 沙箱、樣式隔離 等特性。

京東 micro-app 方案

京東 micro-app 并沒有沿襲 single-spa 的思路,而是借鑒了 WebComponent 的思想,通過 CustomElement 結(jié)合自定義的 ShadowDom,將微前端封裝成一個類 webComponents 組件,從而實現(xiàn)微前端的組件化渲染。

在 Vite 上使用微前端

我們從 我們從 UmiJS 遷移到了 Vite 之后,微前端也成為了勢在必行,當時也調(diào)研了很多方案。

為什么沒用 qiankun

qiankun 是目前是社區(qū)主流微前端方案。它雖然很完善、流行,但最大的問題就是不支持 Vite。它基于 import-html-entry 解析 HTML 來獲取資源,由于 qiankun 是通過 eval 來執(zhí)行這些 js 的內(nèi)容,而 Vite 中的 script 標簽類型是 type="module",里面包含 import/export 等模塊代碼, 所以會報錯:不允許在非 type="module" 的 script 里面使用 import。

退一步實現(xiàn),我們采用了 single-spa 的方式,并使用 systemjs 的方式進行了微前端加載方案,也踩了不少的坑。single-spa 沒有一個友好的教程來接入,文檔雖然多,但大多都在講概念,當時讓人覺得有一種深奧的感覺。

后來看了它的源碼發(fā)現(xiàn),這都是些什么……里面大部分代碼都是圍繞路由劫持而展開的,根本沒有文檔上那種高大上的感覺。而我們又用不到它路由劫持的功能,那我們?yōu)槭裁匆盟?

從組件化的層面來說 single-spa 這種方式實現(xiàn)得一點都不優(yōu)雅。

  • 它劫持了路由,與 react-router 和組件化的思維格格不入
  • 接入方式一大堆繁雜的配置
  • 單實例的方案,即同一時刻,只有一個子應用被展示

后來琢磨著 single-spa 的缺點,我們可以自己實現(xiàn)一個組件化的微前端方案。

如何實現(xiàn)一個簡單、透明、組件化的方案

通過組件化思維實現(xiàn)一個微應用非常簡單:子應用導出一個方法,主應用加載子應用并調(diào)用該方法,并傳入一個 Element 節(jié)點參數(shù),子應用得到該 Element 節(jié)點,將本身的組件 appendChild 到 Element 節(jié)點上。

類型約定

在此之前我們需要約定一個主應用與子應用之間的一個交互方式。主要通過三個鉤子來保證應用的正確執(zhí)行、更新、和卸載。

類型定義:

  1. export interface AppConfig { 
  2.   // 掛載 
  3.   mount?: (props: unknown) => void; 
  4.   // 更新 
  5.   render?: (props: unknown) => ReactNode | void; 
  6.   // 卸載 
  7.   unmount?: () => void; 

子應用導出

通過類型的約定,我們可以將子應用導出:mount、render、unmount 為主要鉤子。

React 子應用實現(xiàn):

  1. export default (container: HTMLElement) => { 
  2.   let handleRender: (props: AppProps) => void; 
  3.  
  4.   // 包裹一個新的組件,用作更新處理 
  5.   function Main(props: AppProps) { 
  6.     const [state, setState] = React.useState(props); 
  7.     // 將 setState 方法提取給 render 函數(shù)調(diào)用,保持父子應用觸發(fā)更新 
  8.     handleRender = setState; 
  9.     return <App {...state} />; 
  10.   } 
  11.  
  12.   return { 
  13.     mount(props: AppProps) { 
  14.       ReactDOM.render(<Main {...props} />, container); 
  15.     }, 
  16.     render(props: AppProps) { 
  17.       handleRender?.(props); 
  18.     }, 
  19.     unmount() { 
  20.       ReactDOM.unmountComponentAtNode(container); 
  21.     }, 
  22.   }; 
  23. }; 

 

Vue 子應用實現(xiàn):

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3.  
  4. export default (container: HTMLElement) => { 
  5.   // 創(chuàng)建 
  6.   const app = createApp(App); 
  7.   return { 
  8.     mount() { 
  9.       // 裝載 
  10.       app.mount(container); 
  11.     }, 
  12.     unmount() { 
  13.       // 卸載 
  14.       app.unmount(); 
  15.     }, 
  16.   }; 
  17. }; 

主應用實現(xiàn)

React 實現(xiàn)

其核心代碼僅十余行,主要處理與子應用交互 (為了易讀性,隱藏了錯誤處理代碼):

  1. export function MicroApp({ entry, ...props }: MicroAppProps) { 
  2.   // 傳遞給子應用的節(jié)點 
  3.   const containerRef = useRef<HTMLDivElement>(null); 
  4.   // 子應用配置 
  5.   const configRef = useRef<AppConfig>(); 
  6.  
  7.   useLayoutEffect(() => { 
  8.     import(/* @vite-ignore */ entry).then((res) => { 
  9.       // 將 div 傳給子應用渲染 
  10.       const config = res.default(containerRef.current); 
  11.       // 調(diào)用子應用的裝載方法 
  12.       config.mount?.(props); 
  13.       configRef.current = config; 
  14.     }); 
  15.     return () => { 
  16.       // 調(diào)用子應用的卸載方法 
  17.       configRef.current?.unmount?.(); 
  18.       configRef.current = undefined; 
  19.     }; 
  20.   }, [entry]); 
  21.  
  22.   return <div ref={containerRef}>{configRef.current?.render?.(props)}</div>; 

完成,現(xiàn)在已經(jīng)實現(xiàn)了主應用與子應用的裝載、更新、卸載的操作。現(xiàn)在,它是一個組件,可以同時渲染出多個不同的子應用,這點就比 single-spa 優(yōu)雅很多。

entry 子應用地址,當然真實情況會根據(jù) dev 和 prod 模式給出不同的地址:

  1. <MicroApp className="micro-app" entry="//localhost:3002/src/main.tsx" /> 

Vue 實現(xiàn)

  1. <script setup lang="ts"
  2. import { onMounted, onUnmounted, ref } from 'vue'
  3.  
  4. const { entry, ...props } = defineProps<{ entry: string }>(); 
  5. const container = ref<HTMLDivElement | null>(null); 
  6. const config = ref(); 
  7.  
  8. onMounted(() => { 
  9.   const element = container.value; 
  10.   import(/* @vite-ignore */ entry).then((res) => { 
  11.     // 將 div 傳給子應用渲染 
  12.     const config = res.default(element); 
  13.     // 調(diào)用子應用的裝載方法 
  14.     config.mount?.(props); 
  15.     config.value = config; 
  16.   }); 
  17. }); 
  18.  
  19. onUnmounted(() => { 
  20.   // 調(diào)用子應用的卸載方法 
  21.   config.value?.unmount?.(); 
  22. }); 
  23. </script> 
  24.  
  25. <template> 
  26.   <div ref="container"></div> 
  27. </template>

如何讓子應用也能獨立運行

single-spa 等眾多方案,都是將一個變量掛載到 window 上,通過判斷該變量是否處于微前端環(huán)境,這樣很不優(yōu)雅。在 ESM 中,我們可以通過 import.meta.url 傳入?yún)?shù)來判斷:

  1. if (!import.meta.url.includes('microAppEnv')) { 
  2.   ReactDOM.render( 
  3.     <React.StrictMode> 
  4.       <App /> 
  5.     </React.StrictMode>, 
  6.     document.getElementById('root'), 
  7.   ); 

入口導入修改:

  1. // 添加環(huán)境參數(shù)和當前時間避免被緩存 
  2. import(/* @vite-ignore */ `${entry}?microAppEnv&t=${Date.now()}`); 

瀏覽器兼容性

IE 瀏覽器已經(jīng)逐步退出我們的視野,基于 Vite,我們只需要支持 import 的特性瀏覽器就夠了。當然,如果考慮 IE 瀏覽器的話也不是不可以,很簡單:將上面代碼的 import 替換為 System.import 即 systemjs,也是 single-spa 的所推崇的用法。

瀏覽器 Chrome Edge Firefox Internet Explorer Safari
import 61 16 60 No 10.1
Dynamic import 63 79 67 No 11.1
import.meta 64 79 62 No 11.1

模塊公用

我們的子組件必須要使用 mount 、unount 模式嗎?答案是不一定,如果我們的技術(shù)棧都是 React 的話。我們的子應用只導出一個 render 就夠了。這樣用的就是同一個 React 來渲染,好處是子應用可以消費父應用的 Provider。但有個前提是兩個應用之間的 React 必須為同一個實例,否則就會報錯。

我們可以將 react、react-dom 、styled-componets 等常用模塊提前打包成 ESM 模塊,然后放到文件服務中使用。

更改 Vite 配置添加 alias:

  1. defineConfig({ 
  2.   resolve: { 
  3.     alias: { 
  4.       react: '//localhost:8000/react@17.js'
  5.       'react-dom''//localhost:8000/react-dom@17.js'
  6.     }, 
  7.   }, 
  8. }); 

這樣就能愉快地使用同一份 React 代碼了。還能抽離出主應用和子應用之間的公用模塊,讓應用總體積更小。當然如果沒上 http2 的話,就需要考慮顆粒度的問題了。

在線 CDN 方案:https://esm.sh

還有個 importmap 方案,兼容性不太好,但未來是趨勢:

  1. <script type="importmap"
  2.   { 
  3.     "imports": { 
  4.       "react""//localhost:8000/react@17.js" 
  5.     } 
  6.   } 
  7. </script> 

 

父子通信

組件式微應用,可以傳遞參數(shù)而通信,完全就是 React 組件通信的模型。

資源路徑

  1. import logo from './images/logo.svg'
  2.  
  3. <img src={logo} />; 

在 Vite 的 dev 模式中,子應用里面靜態(tài)資源一般會這樣引入:

  1. import logo from './images/logo.svg'
  2.  
  3. <img src={logo} />; 

圖片的路徑:/basename/src/logo.svg,在主應用顯示就會 404。因為該路徑只是存在于子應用。我們需要配合 URL 模塊使用,這樣路徑前面會帶上 origin 前綴:

  1. const logoURL = new URL(logo, import.meta.url); 
  2.  
  3. <img src={logoURL.href} />; 

當然這樣使用比較繁瑣,我們可以將其封裝為一個 Vite 插件自動處理該場景。

路由同步

項目使用 react-router,那么它可能會存在路由不同步的問題,因為不是同一個 react-router 實例。即路由之間出現(xiàn)不聯(lián)動的現(xiàn)象。

在 react-router 支持自定義 history 庫,我們可以創(chuàng)建:

  1. import { createBrowserHistory } from 'history'
  2.  
  3. export const history = createBrowserHistory(); 
  4.  
  5. // 主應用:路由入口 
  6. <HistoryRouter history={history}>{children}</HistoryRouter>; 
  7.  
  8. // 主應用:傳遞給子應用 
  9. <Route 
  10.   path="/child-app/*" 
  11.   element={<MicroApp entry="//localhost:3002/src/main.tsx" history={history} />} 
  12. />; 
  13.  
  14. // 子應用:路由入口 
  15. <HistoryRouter basename="/child-app" history={history}> 
  16.   {children} 
  17. </HistoryRouter>; 

最終子應用使用同一份 history 模塊。當然這不是唯一的實現(xiàn),也不是優(yōu)雅的方式,我們可以將路由實例 navigate 傳遞給子應用,這樣也能實現(xiàn)路由的交互。

注意:子應用的 basename 必須與主應用的 path 名稱保持一致。這里還需要修改 Vite 的配置 base 字段:

  1. export default defineConfig({ 
  2.   base: '/child-app/'
  3.   server: { 
  4.     port: 3002, 
  5.   }, 
  6.   plugins: [react()], 
  7. }); 

JS 沙箱

因為沙箱在 ESM 下不支持,因為無法動態(tài)改變執(zhí)行環(huán)境中模塊 window 對象,也無法注入新的全局對象。

一般 React、Vue 項目也很少修改全局變量,做好代碼規(guī)范檢查才是最主要的。

CSS 樣式隔離

自動 CSS 樣式隔離是有代價的,一般我們建議子應用使用不同的 CSS 前綴,再配合 CSS Modules 基本上能實現(xiàn)需求。

打包部署

部署可以根據(jù)子應用的 base 放置在不同的目錄,并將名稱對應。配置好 nginx 轉(zhuǎn)發(fā)規(guī)則就可以了。我們可以將子應用統(tǒng)一路由前綴,便于 nginx 將主應用區(qū)分開并配置通用規(guī)則。

比如將主應用放置在 system 目錄,子應用放置在 app- 開頭的目錄:

  1. location ~ ^\/app-.*(\..+)$ { 
  2.     root /usr/share/nginx/html; 
  3.  
  4. location / { 
  5.     try_files $uri $uri/ /index.html; 
  6.     root /usr/share/nginx/html/system; 
  7.     index  index.html index.htm; 

優(yōu)點

1. 簡單 核心不足 100 行代碼,無需多余的文檔

2. 靈活 通過約定的方式接入,也可以漸進增強

3. 透明 無任何劫持方案,更多邏輯透明性

4. 組件化 組件化的渲染及參數(shù)通信

5. 基于 ESM 支持 Vite,面向未來

6. 向下兼容 可選 SystemJS 方案,兼容低版本瀏覽器

有示例嗎

示例代碼在 Github,感興趣的朋友可以 clone 下來學習。由于我們的技術(shù)棧是 React,所以這里示例的主應用的實現(xiàn)用的是 React 。

微前端組件(React):https://github.com/MinJieLiu/micro-app

微前端示例:https://github.com/MinJieLiu/micro-app-demo

結(jié)語

微前端的方案適合團隊場景的最好,打造一個團隊能掌控的方案尤為重要。

參考資料:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/import.meta

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/import

 

 

責任編輯:武曉燕 來源: 前端星辰
相關(guān)推薦

2022-01-24 12:38:58

Vite插件開發(fā)

2020-05-19 10:45:31

沙箱前端原生對象

2024-07-16 11:26:35

微前端代碼JS

2017-07-24 13:58:49

Android組件化插件化

2022-08-10 10:32:47

編程實踐

2022-07-27 22:56:45

前端應用緩存qiankun

2021-01-01 09:01:05

前端組件化設計

2022-05-09 09:28:04

Vite前端開發(fā)

2021-01-28 06:11:40

導航組件Sidenav Javascript

2024-03-06 11:14:13

ViteReact微前端

2021-01-26 10:33:45

前端開發(fā)技術(shù)

2020-05-06 09:25:10

微前端qiankun架構(gòu)

2021-06-21 15:49:39

React動效組件

2025-01-09 10:46:01

2023-09-07 20:04:06

前后端趨勢Node.js

2021-04-11 09:00:13

Fes.js前端

2024-09-23 00:00:10

2014-05-26 16:52:29

移動前端web組件

2020-11-30 06:20:13

javascript

2015-01-08 10:08:03

前后端分離
點贊
收藏

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

女人丝袜激情亚洲| 91av久久| 国产丶欧美丶日本不卡视频| 欧美激情国产高清| 成人h动漫精品一区| 日本免费一区二区三区等视频| 一区二区三区中文在线| 免费av在线一区二区| 国产又粗又黄又爽视频| 一本久久综合| xxx一区二区| 亚洲av成人片色在线观看高潮| 欧美日韩亚洲国产| 亚洲电影在线免费观看| 亚洲精蜜桃久在线| 天天干天天草天天射| 精品亚洲国内自在自线福利| 777精品视频| 99久久99久久精品国产| 精品国产中文字幕第一页 | 99热自拍偷拍| 黄色在线免费看| 国产亚洲欧美在线| 国产欧美综合精品一区二区| 一本一道精品欧美中文字幕| 国产模特精品视频久久久久| 欧美日韩国产成人在线观看| 999精品久久久| 精品免费视频| 国产偷国产偷亚洲清高网站| 久久久久国产免费| japansex久久高清精品| 欧美色图免费看| 日韩av播放器| 澳门成人av网| 五月天国产精品| 免费av手机在线观看| av电影免费在线观看| 国产精品久久久久aaaa樱花| 欧美一卡2卡3卡4卡无卡免费观看水多多| 高潮毛片7777777毛片| 国产一区二区三区蝌蚪| 成人午夜激情网| 中文字幕人妻色偷偷久久| 久久精品一区| 日本精品免费观看| 人妻丰满熟妇av无码区| 亚洲视频成人| 欧美做受高潮电影o| 91av在线免费视频| 亚洲免费高清| 5252色成人免费视频| 三级视频在线观看| 男女精品视频| 国产精品第3页| 一区二区视频网| 久久99精品久久久久久国产越南| 国产久一一精品| 91影院在线播放| 国产精品白丝av| 国产福利久久精品| 色欲av永久无码精品无码蜜桃| www.av亚洲| 免费久久久一本精品久久区| 国产乱子伦三级在线播放 | 欧美成人免费观看视频| 欧美日韩国产欧| 久久久这里只有精品视频| 日本一二三区不卡| 久久精品一区| 国产在线观看91精品一区| 精品国产无码AV| 本田岬高潮一区二区三区| 久久一区免费| 一广人看www在线观看免费视频| 亚洲欧美国产三级| 成人网站免费观看入口| 成人短视频app| 欧美精品vⅰdeose4hd| 91精品国产高清91久久久久久| 久久悠悠精品综合网| 国产亚洲精品久久久| 亚洲波多野结衣| 亚洲激情社区| 国产精品一区二区久久国产| av片免费播放| 久久人人爽人人爽| 一区中文字幕在线观看| www在线观看黄色| 欧美亚洲丝袜传媒另类| 无码人妻一区二区三区在线视频| 视频福利一区| 波霸ol色综合久久| 亚洲图片在线视频| 国产精品系列在线观看| 日韩精品伦理第一区| 在线视频国产区| 色爱区综合激月婷婷| 自拍偷拍激情视频| 欧美艳星介绍134位艳星| 欧美精品一区二区免费| 成人av网站在线播放| 国产成人亚洲综合a∨婷婷 | 性久久久久久久久久久| 久久五月天小说| 2019日本中文字幕| 国产jzjzjz丝袜老师水多| 国产亚洲一区二区三区在线观看| 可以在线看黄的网站| 成人黄色视屏网站| 日韩高清av一区二区三区| 欧美被狂躁喷白浆精品| 蜜桃一区二区三区在线| 蜜桃视频成人| 2021天堂中文幕一二区在线观| 欧美久久一二区| 黄色三级生活片| 久久精品国语| 极品尤物一区二区三区| 久久av色综合| 欧美一区二区日韩一区二区| 天天干天天操天天拍| 亚洲欧美日韩国产综合精品二区| 亚洲伊人久久综合| 欧美日韩在线看片| 欧美亚州韩日在线看免费版国语版| 久久久午夜精品福利内容| 牛牛国产精品| 91欧美日韩一区| av播放在线观看| 欧美在线观看视频在线| 精品人妻互换一区二区三区| 国产人成精品一区二区三| 国产精品区二区三区日本| 日韩激情av| 日韩免费视频线观看| 色在线观看视频| 国产乱人伦偷精品视频免下载| 一区二区精品在线观看| 四虎影视国产精品| 久久久久www| 国产熟女一区二区三区四区| 亚洲欧洲国产日韩| 日韩 国产 一区| 在线观看国产精品入口| 亚洲自拍偷拍网址| 超碰在线观看免费| 日韩精品一区二区三区中文不卡 | 91精品国产高清久久久久久91裸体| 午夜视频在线看| 欧美日本乱大交xxxxx| www.xx日本| 激情综合网av| 国产欧美123| jizz国产精品| 992tv成人免费影院| 美丽的姑娘在线观看免费动漫| 欧美日韩一区二区免费视频| 中文字幕在线观看网址| 新67194成人永久网站| 欧美一区少妇| 亚洲一区二区av| 久99久在线视频| 五月天婷婷社区| 在线亚洲一区观看| 自拍偷拍你懂的| 国产精品正在播放| 131美女爱做视频| 国产精品一区2区3区| 国产中文字幕91| 女同视频在线观看| 日韩精品免费观看| 亚洲图片中文字幕| 一区二区三区高清不卡| 无码h肉动漫在线观看| 美日韩一区二区| 嫩草影院中文字幕| 一区二区三区日本久久久| 成人精品在线观看| 天堂√8在线中文| 最近中文字幕mv在线一区二区三区四区| 97成人在线观看| 亚洲国产乱码最新视频 | 国产精品免费丝袜| 亚洲欧美aaa| 女同性一区二区三区人了人一| 国产一区免费在线观看| 中文字幕系列一区| 久久97久久97精品免视看| 视频国产在线观看| 欧美片网站yy| 日产欧产va高清| 中文字幕一区二区日韩精品绯色| 日本少妇一级片| 可以看av的网站久久看| 黄色成人在线免费观看| 国产精品一区二区av交换| y111111国产精品久久婷婷| 日韩欧美另类一区二区| 美日韩精品视频免费看| 国产一二在线观看| 精品国产99国产精品| 中文字幕在线视频第一页| 红桃av永久久久| 欧美成人手机视频| 国产精品久久久久久户外露出| 内射中出日韩无国产剧情| 国产精品99久久久久久久女警 | 亚洲性夜色噜噜噜7777| 亚洲老妇色熟女老太| 欧美日韩mp4| 波多野结衣视频免费观看| 亚洲一区二区欧美| www.99re7| 中文字幕一区视频| 亚洲色成人网站www永久四虎 | 一色道久久88加勒比一| 成人网男人的天堂| 伊人免费视频二| 人人超碰91尤物精品国产| 秋霞无码一区二区| 欧美色综合网| 色中文字幕在线观看| 日本一区二区三区视频| 欧美日韩系列| 天堂成人娱乐在线视频免费播放网站 | 高清不卡一区| 国产精品久久一区| 卡通欧美亚洲| 欧美在线视频观看| 两个人看的在线视频www| 欧美高清视频在线播放| 97超碰资源站在线观看| 久久亚洲精品网站| 理论片午午伦夜理片在线播放| 色香阁99久久精品久久久| 成人在线播放视频| 自拍偷拍亚洲精品| 免费在线午夜视频| 久久精品视频免费播放| av网址在线| 久久91精品国产| 牛牛电影国产一区二区| 久久久久国产精品免费| www.综合网.com| 性欧美长视频免费观看不卡| h片视频在线观看| 4388成人网| 日韩欧美一区二区三区在线观看| 国产精品高精视频免费| 成人做爰免费视频免费看| 国产精品视频久久| 国产日本亚洲| 国产精品日韩一区二区三区| 日韩av影院| 亚洲电影免费| 自拍偷拍欧美专区| 九九爱精品视频| 久久久久免费| 亚洲欧美国产中文| 国产精品一区专区| 香港三级日本三级| 欧美极品aⅴ影院| 中文字幕av免费在线观看| 亚洲制服丝袜一区| 午夜毛片在线观看| 欧美日韩另类一区| www.国产黄色| 日韩精品久久久久| 欧美日韩xx| 国模gogo一区二区大胆私拍 | 91免费在线视频| 激情av综合| 亚洲aⅴ天堂av在线电影软件| 国产高清一区二区| 妺妺窝人体色777777| 久久国产精品亚洲77777| 午夜剧场在线免费观看| 成人一级视频在线观看| 亚洲精品国产精品国自产网站| 成人欧美一区二区三区白人| 国产无码精品在线播放| 欧美日韩国产片| 色呦呦中文字幕| www.日本久久久久com.| 黄色aa久久| 国产综合香蕉五月婷在线| 久久影视三级福利片| 一本二本三本亚洲码| 欧美专区一区二区三区| 手机在线免费毛片| 久久日一线二线三线suv| 在线免费观看亚洲视频| 日本韩国欧美在线| 亚洲精品久久久久久无码色欲四季| 亚洲欧美国内爽妇网| 性欧美高清come| 国产精品免费久久久久影院| 欧美丝袜美腿| 久久最新免费视频| 日本强好片久久久久久aaa| 国产精品91av| 中文字幕一区二区三区在线播放| 日产精品久久久久久久| 日韩一级高清毛片| av大片在线观看| 国产福利视频一区| 老汉色老汉首页av亚洲| 最近中文字幕免费mv| 日本一不卡视频| 蜜桃精品成人影片| 亚洲高清中文字幕| 99精品在线看| 视频一区视频二区国产精品| 中文在线最新版地址| 国产视频一区二区三区四区| 伊人久久大香线| 91亚洲精品久久久蜜桃借种| 国产喷白浆一区二区三区| 中文字幕亚洲精品在线| 欧美电视剧在线看免费| 婷婷在线播放| 亚洲综合色av| 一区二区国产在线| 国产aⅴ爽av久久久久| 国产精品麻豆视频| 国产乡下妇女三片| 亚洲欧美国内爽妇网| 性欧美18~19sex高清播放| 国产精品一区二区av| 欧美另类女人| 国产精品无码自拍| 亚洲综合在线免费观看| 亚洲国产成人在线观看| 欧美肥臀大乳一区二区免费视频| 日韩成人视屏| 国产在线拍揄自揄拍无码| 国产最新精品免费| 丁香花五月激情| 欧美成人官网二区| 爱情岛亚洲播放路线| 国产一区二区免费在线观看| 日韩午夜免费视频| 久久中文字幕人妻| 91国在线观看| 午夜免费播放观看在线视频| 国产区精品在线观看| 66视频精品| 中文在线字幕观看| 天天亚洲美女在线视频| 麻豆影视在线| 国产精品成人在线| 久久久久av| 中文在线观看免费视频| 欧美性xxxx| a√资源在线| 91免费观看| 嫩草成人www欧美| 婷婷丁香综合网| 宅男在线国产精品| 99热99re6国产在线播放| 开心色怡人综合网站| 日本va欧美va瓶| 久久高清无码视频| 亚洲精品午夜精品| 久久久久久一区二区三区四区别墅 | 无码国产精品96久久久久| 国产成人高清激情视频在线观看| 欧美日韩精品在线一区| 一区二区久久精品| 午夜激情一区二区三区| 高清日韩av电影| 91精品国产综合久久久久久丝袜| 制服诱惑一区二区| 少妇愉情理伦三级| 精品国产污污免费网站入口| 久久毛片亚洲| 欧洲精品视频在线| 久久久久久久久久久黄色 | 欧美片第一页| 影音先锋男人的网站| xfplay精品久久| a级片在线播放| 国产成人一区二区三区小说| 欧美在线网址| 亚洲精品国产精品国自产网站| 日韩一级片在线观看| 日韩大尺度黄色| 久久久国内精品| 国产精品素人视频| 日韩一级片免费| 亚洲一区亚洲二区亚洲三区| 久久久噜噜噜久久狠狠50岁| 久久久久久久久久综合| 中文字幕亚洲专区| 免费看久久久| 超碰人人cao| 欧美色综合网站| 久久久男人天堂| 中文字幕日韩精品无码内射|