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

為什么說用 Babel 編譯 Typescript 是更好的選擇

開發(fā) 前端
typescript 給 javascript 擴(kuò)展了類型的語法和語義,讓 js 代碼達(dá)到了靜態(tài)類型語言級(jí)別的類型安全,之前只能在運(yùn)行時(shí)發(fā)現(xiàn)的類型不安全的問題,現(xiàn)在能在編譯期間發(fā)現(xiàn)了,所以大項(xiàng)目越來越多的選擇用 typescript 來寫。

[[402840]]

本文轉(zhuǎn)載自微信公眾號(hào)「神光的編程秘籍」,作者神說要有光。轉(zhuǎn)載本文請(qǐng)聯(lián)系神光的編程秘籍公眾號(hào)。

typescript 給 javascript 擴(kuò)展了類型的語法和語義,讓 js 代碼達(dá)到了靜態(tài)類型語言級(jí)別的類型安全,之前只能在運(yùn)行時(shí)發(fā)現(xiàn)的類型不安全的問題,現(xiàn)在能在編譯期間發(fā)現(xiàn)了,所以大項(xiàng)目越來越多的選擇用 typescript 來寫。除此之外,typescript 還能夠配合 ide 做更好的智能提示,這也是用 typescript 的一個(gè)理由。

類型安全:如果一個(gè)類型的變量賦值給它不兼容類型的值,這就是類型不安全,如果一個(gè)類型的對(duì)象,調(diào)用了它沒有的方法,這也是類型不安全。反之,就是類型安全。類型安全就是變量的賦值、對(duì)象的函數(shù)調(diào)用都是在類型支持的范圍內(nèi)。

最開始 typescript 代碼只有自帶的 tyepscript compiler(tsc)能編譯,編譯不同版本的 typescript 代碼需要用不同版本的 tsc,通過配置 tsconfig.json 來指定如何編譯。

但是 tsc 編譯 ts 代碼為 js 是有問題的:

tsc 不支持很多還在草案階段的語法,這些語法都是通過 babel 插件來支持的,所以很多項(xiàng)目的工具鏈?zhǔn)怯?tsc 編譯一遍 ts 代碼,之后再由 babel 編譯一遍。這樣編譯鏈路長(zhǎng),而且生成的代碼也不夠精簡(jiǎn)。

所以,typescript 找 babel 團(tuán)隊(duì)合作,在 babel7 中支持了 typescript 的編譯,可以通過插件來指定 ts 語法的編譯。比如 api 中是這樣用:

  1. const parser = require('@babel/parser'); 
  2.  
  3. parser.parse(sourceCode, { 
  4.     plugins: ['typescript'
  5. }); 

這個(gè)插件是 typescript 團(tuán)隊(duì)與 babel 團(tuán)隊(duì)合作了一年的成果。

但是,這個(gè)插件真的能支持所有 typescript 代碼么?答案是否定的。

我們來看一下 babel 不支持哪些 ts 語法,為什么不支持。

babel 能編譯所有 typescript 代碼么?

babel 的編譯流程是這樣的:

  • parser: 把源碼 parse 成 ast
  • traverse:遍歷 ast,生成作用域信息和 path,調(diào)用各種插件來對(duì) ast 進(jìn)行轉(zhuǎn)換
  • generator:把轉(zhuǎn)換以后的 ast 打印成目標(biāo)代碼,并生成 sourcemap

而 typescript compiler 的編譯流程是這樣的:

  • scanner + parser:分詞和組裝 ast,從源碼到 ast 的過程
  • binder + checker:生成作用域信息,進(jìn)行類型推導(dǎo)和檢查
  • transform:對(duì)經(jīng)過類型檢查之后的 ast 進(jìn)行轉(zhuǎn)換

emitter:打印 ast 成目標(biāo)代碼,生成 sourcemap 和類型聲明文件(根據(jù)配置)

其實(shí) babel 的編譯階段和 tsc 的編譯階段是類似的,只是 tsc 多了一個(gè) checker,其余的部分沒什么區(qū)別。

  • babel 的 parser 對(duì)應(yīng) tsc 的 scanner + parser
  • babel 的 traverse 階段 對(duì)應(yīng) tsc 的 binder + transform
  • babel 的 generator 對(duì)應(yīng) tsc 的 emitter

那么能不能基于 babel 的插件在 traverse 的時(shí)候?qū)崿F(xiàn) checker 呢?

答案是不可以。

因?yàn)?tsc 的類型檢查是需要拿到整個(gè)工程的類型信息,需要做類型的引入、多個(gè)文件的 namespace、enum、interface 等的合并,而 babel 是單個(gè)文件編譯的,不會(huì)解析其他文件的信息。所以做不到和 tsc 一樣的類型檢查。

一個(gè)是在編譯過程中解析多個(gè)文件,一個(gè)是編譯過程只針對(duì)單個(gè)文件,流程上的不同,導(dǎo)致 babel 無法做 tsc 的類型檢查。

那么 babel 是怎么編譯 typescript 的呢?

其實(shí) babel 只是能夠 parse ts 代碼成 ast,不會(huì)做類型檢查,會(huì)直接把類型信息去掉,然后打印成目標(biāo)代碼。

這導(dǎo)致了有一些 ts 語法是 babel 所不支持的:

  • const enum 不支持。const enum 是在編譯期間把 enum 的引用替換成具體的值,需要解析類型信息,而 babel 并不會(huì)解析,所以不支持??梢杂孟鄳?yīng)的插件把 const enum 轉(zhuǎn)成 enum。
  • namespace 部分支持。不支持 namespace 的跨文件合并,不支持導(dǎo)出非 const 的值。這也是因?yàn)?babel 不會(huì)解析類型信息且是單文件編譯。

上面兩種兩個(gè)是因?yàn)榫幾g方式的不同導(dǎo)致的不支持。

  • export = import = 這種 ts 特有語法不支持,可以通過插件轉(zhuǎn)為 esm
  • 如果開啟了 jsx 編譯,那么 aa 這種類型斷言不支持,通過 aa as string 來替代。這是因?yàn)檫@兩種語法有沖突,在兩個(gè)語法插件(jsx、typescript)里,解決沖突的方式就是用 as 代替。

這四種就是 babel 不支持的 ts 語法,其實(shí)影響并不大,這幾個(gè)特性不用就好了。

結(jié)論:babel 不能編譯所有 typescript 代碼,但是除了 namespace 的兩個(gè)特性外,其余的都可以做編譯。

babel 是可以編譯 typescript 代碼,那么為什么要用 babel 編譯呢?

為什么要用 babel 編譯 typescript 代碼?

babel 編譯 typescript 代碼有 3 個(gè)主要的優(yōu)點(diǎn):

產(chǎn)物體積更小

tsc

tsc 如何配置編譯目標(biāo)呢?

在 compilerOptions 里面配置 target,target 設(shè)置目標(biāo)語言版本

  1.     compilerOptions: { 
  2.         target: "es5" // es3、es2015 
  3.     } 

typescript 如何引入 polyfill 呢?

在入口文件里面引入 core-js.

  1. import 'core-js'

babel7

babel7 是如何配置編譯目標(biāo)呢?

在 preset-env 里面指定 targets,直接指定目標(biāo)運(yùn)行環(huán)境(瀏覽器、node)版本,或者指定 query 字符串,由 browserslist 查出具體的版本。

  1.     presets: [ 
  2.         [ 
  3.             "@babel/preset-env"
  4.             { 
  5.                 targets: { 
  6.                     chrome: 45 
  7.                 } 
  8.             } 
  9.         ] 
  10.     ] 
  1.     presets: [ 
  2.         [ 
  3.             "@babel/preset-env"
  4.             { 
  5.                 targets: "last 1 version,> 1%,not dead" 
  6.             } 
  7.         ] 
  8.     ] 

babel7 如何引入 polyfill 呢?

也是在 @babel/preset-env 里面配置,除了指定 targets 之外,還要指定 polyfill 用哪個(gè)(corejs2 還是 corejs3),如何引入(entry 在入口引入 ,usage 每個(gè)模塊單獨(dú)引入用到的)。

  1.     presets: [ 
  2.         [ 
  3.             "@babel/preset-env"
  4.             { 
  5.                 targets: "last 1 version,> 1%,not dead"
  6.                 corejs: 3, 
  7.                 useBuiltIns: 'usage' 
  8.             } 
  9.         ] 
  10.     ] 

這樣可以根據(jù) @babel/compat-data 的數(shù)據(jù)來針對(duì)的做語法轉(zhuǎn)換和 api 的 polyfill:

先根據(jù) targets 查出支持的目標(biāo)環(huán)境的版本,再根據(jù)目標(biāo)環(huán)境的版本來從所有特性中過濾支持的,剩下的就是不支持的特性。只對(duì)這些特性做轉(zhuǎn)換和 polyfill 即可。

而且 babel 還可以通過 @babel/plugin-transform-runtime 來把全局的 corejs 的 import 轉(zhuǎn)成模塊化引入的方式。

顯然,用 babel 編譯 typescript 從產(chǎn)物上看有兩個(gè)優(yōu)點(diǎn):

  • 能夠做更精準(zhǔn)的按需編譯和 polyfill,產(chǎn)物體積更小
  • 能夠通過插件來把 polyfill 變成模塊化的引入,不污染全局環(huán)境

從產(chǎn)物來看,babel 勝。

支持的語言特性

typescript 默認(rèn)支持很多 es 的特性,但是不支持還在草案階段的特性,babel 的 preset-env 支持所有標(biāo)準(zhǔn)特性,還可以通過 proposal 來支持更多還未進(jìn)入標(biāo)準(zhǔn)的特性。

  1.     plugins: ['@babel/proposal-xxx'], 
  2.     presets: ['@babel/presets-env', {...}] 

從支持的語言特性來看,babel 勝。

編譯速度

tsc 會(huì)在編譯過程中進(jìn)行類型檢查,類型檢查需要綜合多個(gè)文件的類型信息,要對(duì) AST 做類型推導(dǎo),比較耗時(shí),而 babel 不做類型檢查,所以編譯速度會(huì)快很多。

從編譯速度來看, babel 勝。

總之,從編譯產(chǎn)物大小(主要)、支持的語言特性、編譯速度來看,babel 完勝。

但是,babel 不做類型檢查,那怎么類型檢查呢?

babel 和 tsc 的結(jié)合

babel 可以編譯生成更小的產(chǎn)物,有更快的編譯速度和更多的特性支持,所以我們選擇用 babel 編譯 typescript 代碼。但是類型檢查也是需要的,可以在 npm scripts 中配一個(gè)命令:

  1.     "scripts": { 
  2.         "typeCheck""tsc --noEmit" 
  3.     } 

這樣在需要進(jìn)行類型檢查的時(shí)候單獨(dú)執(zhí)行一下 npm run typeCheck 就行了,但最好在 git commit 的 hook 里(通過 husky 配置)再執(zhí)行一次強(qiáng)制的類型檢查。

總結(jié)

typescript 給 js 擴(kuò)展了靜態(tài)類型的支持,使得代碼能夠在編譯期間檢查出賦值類型不匹配、調(diào)用了沒有的方法等錯(cuò)誤,保證類型安全。

除了 tsc 之外,babel7 也能編譯 typescript 代碼了,這是兩個(gè)團(tuán)隊(duì)合作一年的結(jié)果。

但是 babel 因?yàn)閱挝募幾g的特點(diǎn),做不了和 tsc 的多文件類型編譯一樣的效果,有幾個(gè)特性不支持(主要是 namespace 的跨文件合并、導(dǎo)出非 const 的值),不過影響不大,整體是可用的。

babel 做代碼編譯,還是需要用 tsc 來進(jìn)行類型檢查,單獨(dú)執(zhí)行 tsc --noEmit 即可。

 

babel 編譯 ts 代碼,相比 tsc 有很多優(yōu)點(diǎn):產(chǎn)物體積更小,支持更多特性,編譯速度更快。所以用 babel 編譯 typescript 是一個(gè)更好的選擇。

 

責(zé)任編輯:武曉燕 來源: 神光的編程秘籍
相關(guān)推薦

2022-03-14 08:33:09

TypeScriptJavaScript前端

2017-06-16 14:18:54

2020-07-03 14:05:26

Serverless云服務(wù)商

2021-11-29 18:27:12

Web Wasmjs

2011-09-20 15:51:42

NoSQL

2011-10-27 13:37:51

網(wǎng)頁設(shè)計(jì)

2023-05-05 16:26:33

2019-09-23 13:37:09

Anthos谷歌Kubernetes

2022-04-10 16:21:43

tscbabelTypeScrip

2019-09-23 13:10:02

容器進(jìn)程

2021-08-14 09:04:58

TypeScriptJavaScript開發(fā)

2018-01-23 11:48:17

Vue.js前端開發(fā)

2021-01-14 15:34:53

區(qū)塊鏈比特幣機(jī)器

2022-07-27 16:50:39

BabelTypeScript前端

2023-05-04 07:44:13

編程界小語言Java

2023-03-21 10:16:36

2019-01-18 15:01:17

云計(jì)算運(yùn)維管理

2021-02-25 14:09:55

人工智能數(shù)據(jù)機(jī)器學(xué)習(xí)

2014-08-18 10:58:20

編程語言編程書籍

2021-02-24 13:53:59

智慧城市智能城市化
點(diǎn)贊
收藏

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

浮妇高潮喷白浆视频| 91精品美女在线| 色呦呦一区二区| av亚洲一区| 亚洲欧美激情视频在线观看一区二区三区 | 91成人免费| 日韩成人在线视频观看| 日本超碰在线观看| 91资源在线观看| 国产欧美日本一区二区三区| 91亚洲精品丁香在线观看| 人人爽人人爽人人片av| 午夜久久久久| 中文字幕成人在线| 黄色激情在线观看| 激情小说亚洲| 色婷婷av一区二区三区大白胸| 一区二区在线观看网站| 少妇精品视频一区二区| 久久精品理论片| 欧洲亚洲免费视频| 成人免费看片98| 日本欧美视频| 日韩电影网在线| 亚洲三级在线视频| 国产第一亚洲| 欧美日韩亚洲视频一区| 日韩成人三级视频| 老司机福利在线视频| 久久精品人人爽人人爽| 国偷自产av一区二区三区小尤奈| 国产精品久久久久久久久久久久久久久久| 国产日韩一区二区三区在线| 欧美激情精品久久久久久| 少妇愉情理伦三级| 国产成人影院| 亚洲午夜精品视频| 最近中文字幕免费视频| 精品国内亚洲2022精品成人| 欧美一级高清片| 91福利免费观看| 久久亚洲国产精品尤物| 欧日韩精品视频| 日本一极黄色片| 松下纱荣子在线观看| 亚洲成av人片在线观看无码| 久久香蕉视频网站| 秋霞在线午夜| 亚洲一区二区偷拍精品| 91视频 - 88av| 亚洲七七久久综合桃花剧情介绍| 中文字幕一区二区日韩精品绯色| 亚洲欧洲一区二区福利| 欧美成人高清在线| 国产精品夫妻自拍| 国产欧美综合一区| 伊人在我在线看导航| √…a在线天堂一区| 国产高潮呻吟久久久| av网址在线看| 一区二区三区小说| 日韩国产一级片| 涩涩视频在线免费看| 欧美日韩在线视频一区| 无遮挡又爽又刺激的视频| 国产麻豆久久| 91精品国产91久久综合桃花| 超级砰砰砰97免费观看最新一期| 91精品国产自产在线丝袜啪| 精品国精品国产| 黄色在线观看av| 红桃视频在线观看一区二区| 色婷婷成人综合| 久久久精品99| 丁香桃色午夜亚洲一区二区三区| 亚洲午夜精品久久久久久久久久久久 | 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲一区二区三区在线| 777777av| 高清电影一区| 欧美精品久久久久久久多人混战| 国产大片一区二区三区| 国内精品偷拍| 国产午夜精品全部视频播放| 中文字幕求饶的少妇| 欧美成人亚洲| 97婷婷涩涩精品一区| 中文字幕天堂在线| 国产精品亚洲一区二区三区妖精| 国产综合欧美在线看| 成人午夜电影在线观看| 国产精品区一区二区三区| 免费看黄色a级片| 偷拍自拍在线看| 欧美高清视频www夜色资源网| 久久国产劲爆∧v内射| 国产欧美日韩在线观看视频| 欧美国产高跟鞋裸体秀xxxhd| 日韩 国产 欧美| 国产乱码精品一区二区三区五月婷| 国产精品一区二区三区在线 | 久久精品综合网| 日日噜噜夜夜狠狠久久丁香五月| 青青青免费在线视频| 777午夜精品免费视频| 中文字幕高清视频| 欧美福利影院| 国产精品嫩草视频| 色婷婷综合视频| 中文字幕在线观看一区二区| 国产精品50p| 精品一区二区三区亚洲| 亚洲色图综合久久| 日产亚洲一区二区三区| 极品少妇xxxx偷拍精品少妇| 美国av一区二区三区| 先锋成人av| 欧美女孩性生活视频| 中国黄色a级片| 韩国一区二区三区在线观看| 国产自摸综合网| 国产在线小视频| 五月婷婷综合激情| 男男受被啪到高潮自述| 久久人人99| 国产精品第三页| 青青草av免费在线观看| 亚洲大尺度视频在线观看| 日本美女久久久| 欧美亚洲高清| 国产成人精品电影久久久| 无码国精品一区二区免费蜜桃| 亚洲精品你懂的| 久久精品免费网站| 日韩av系列| 68精品国产免费久久久久久婷婷| 亚洲h视频在线观看| 亚洲精品乱码久久久久久黑人| 精品综合久久久久| 色综合久久网| 国产一区二区色| 欧美a免费在线| 欧美日韩免费观看一区三区| 丁香六月激情综合| 日本色综合中文字幕| 欧美一区2区三区4区公司二百| 色网在线免费观看| 亚洲欧美在线第一页| 欧美日韩一二三四区| 久久久久久免费网| 亚洲成熟丰满熟妇高潮xxxxx| 美女视频亚洲色图| 91成人福利在线| 免费黄色片在线观看| 91久久精品国产91性色tv| 国产sm调教视频| 蜜臀av一区二区三区| 一区二区高清视频| 国产精品视频一区视频二区| 欧美成年人网站| 亚洲乱熟女一区二区| 亚洲成人免费在线观看| 黄色性生活一级片| 首页国产欧美久久| 亚洲精品成人三区| 免费精品一区| 国模精品一区二区三区色天香| 污污视频在线免费看| 色系网站成人免费| 精品在线观看一区| 国产精品1区2区3区在线观看| 日b视频免费观看| 亚洲8888| 国产区亚洲区欧美区| 怡红院在线播放| 精品亚洲男同gayvideo网站| 中文在线观看av| 亚洲精品水蜜桃| theav精尽人亡av| 日韩不卡手机在线v区| 在线观看18视频网站| 欧美顶级毛片在线播放| 国产精品永久免费观看| 日本高清在线观看视频| 国产视频精品xxxx| 国产三级第一页| 精品久久香蕉国产线看观看亚洲 | 国产欧美在线看| 天堂va在线| 亚洲天堂第一页| 国产高清免费观看| 一本大道久久a久久综合婷婷 | 午夜婷婷国产麻豆精品| 国产在线综合视频| 懂色av一区二区夜夜嗨| 国内自拍视频网| 极品尤物久久久av免费看| 日韩免费三级| 91精品短视频| 成人精品福利视频| 亚洲涩涩在线| 久久99久久99精品中文字幕| 欧美美女色图| 欧美成人乱码一区二区三区| 高潮毛片又色又爽免费| 亚洲永久免费视频| 亚洲人做受高潮| 91麻豆6部合集magnet| xxx中文字幕| 日本中文一区二区三区| 波多野结衣乳巨码无在线| 久久精品亚洲人成影院 | 三级毛片在线免费看| 911国产精品| 波多野结衣二区三区| 精品久久久久久亚洲国产300 | 午夜精品一区| 亚洲欧美日韩高清| 日本激情视频网站| 欧美一区二区三区不卡| 中文字幕一级片| 欧美日韩性视频在线| 免费一级片在线观看| 亚洲视频在线一区观看| 最近中文字幕在线mv视频在线| 不卡视频在线看| 国产成人精品综合久久久久99| 捆绑调教美女网站视频一区| 中文字幕第21页| 久久男女视频| 青青在线视频观看| 国产欧美91| 国产精品12345| 亚洲视频碰碰| 国产精品成人久久电影| 欧美天天在线| 国产av熟女一区二区三区| 国产韩日影视精品| 中文网丁香综合网| 99久久激情| 最近看过的日韩成人| 999精品一区| 亚洲最新免费视频| 视频在线不卡免费观看| 一区二区三区四区| 欧美成人激情| ijzzijzzij亚洲大全| 91高清一区| 久久久久久av无码免费网站下载| 91成人看片| 国产美女作爱全过程免费视频| 欧美日韩国产精品一区二区亚洲| 国产成人一二三区| 一区久久精品| 免费在线激情视频| 老司机精品久久| 中文字幕有码av| 久久精品av麻豆的观看方式| 精品综合久久久久| 高清shemale亚洲人妖| 亚洲黄色免费在线观看| 久久久99久久精品欧美| 影音先锋男人在线| 成人免费在线观看入口| 妺妺窝人体色www聚色窝仙踪| 亚洲电影在线免费观看| 91视频免费网址| 欧美日韩精品欧美日韩精品| 国产999久久久| 亚洲精品电影在线| 国产小视频免费在线观看| 日韩一中文字幕| 青草在线视频在线观看| 欧美在线观看日本一区| 99久久久国产精品免费调教网站 | 国产男男gay体育生网站| 欧美videossexotv100| 日本福利在线观看| 最近2019中文字幕在线高清| 色呦呦在线看| 日本亚洲欧洲色α| 亚洲色图图片| 精品国产乱码久久久久软件| 成人中文视频| 国产精品久久久久9999爆乳| 日日摸夜夜添夜夜添亚洲女人| 五月天激情播播| 99视频有精品| 日本裸体美女视频| 大桥未久av一区二区三区| 一区二区自拍偷拍| 亚洲国产欧美日韩精品| 香蕉视频免费在线播放| 国内外成人免费激情在线视频| 69堂精品视频在线播放| 国产精品日本一区二区| 久久亚洲国产| 黄色动漫在线免费看| 国产精品亚洲一区二区三区在线| 中文字幕一二三四区| 亚洲激情在线播放| 97人妻精品视频一区| 亚洲成avwww人| 免费在线看a| 国产999精品久久久影片官网| 亚洲va欧美va人人爽成人影院| 欧洲高清一区二区| 亚洲激情一区| 亚洲欧美一区二区三区不卡| 国产精品午夜电影| 国产成人一级片| 亚洲精品在线一区二区| 搞黄网站在线观看| 国产精品日韩欧美| 亚洲区小说区图片区qvod按摩| 热久久最新网址| 加勒比av一区二区| 欧美a在线播放| 日本道色综合久久| 日本午夜在线视频| 国内成人精品一区| 亚洲成人五区| 中文字幕在线乱| 久久精品国产免费| 农村老熟妇乱子伦视频| 色综合天天综合在线视频| 婷婷五月综合久久中文字幕| 欧美美女15p| 九九九九九九精品任你躁| 伊人色综合影院| 蜜桃91丨九色丨蝌蚪91桃色| 人妻aⅴ无码一区二区三区| 午夜久久久久久久久| 亚洲av无码一区二区乱子伦| 免费99精品国产自在在线| av成人在线网站| 中文字幕欧美日韩一区二区三区| 天堂va蜜桃一区二区三区漫画版| 自拍视频一区二区| 欧美视频在线观看免费| 日本福利片高清在线观看| 51视频国产精品一区二区| 欧美aaaaaaaa牛牛影院| 少妇高潮毛片色欲ava片| 成人av网址在线| 亚洲一区 视频| 亚洲精品成人网| 伊人色综合一区二区三区影院视频| 国产一区二区视频在线免费观看| 亚洲精选成人| 日本xxx在线播放| 91福利国产成人精品照片| 二区三区在线| 国产一区二区在线免费| 亚洲h色精品| 9191在线视频| 亚洲mv大片欧洲mv大片精品| 亚洲 欧美 精品| 国产精品va在线播放| 成人在线亚洲| 成人在线短视频| 亚洲成人高清在线| 欧美午夜黄色| 91精品国产自产在线观看永久| 亚洲91中文字幕无线码三区| 国产国语老龄妇女a片| 精品国产91久久久| 欧美男男同志| 91麻豆桃色免费看| 在线看片日韩| 日本少妇xxxxx| 这里只有精品视频在线观看| 欧洲性视频在线播放| 欧美一区二区三区精美影视| 精品亚洲成av人在线观看| 久久久无码一区二区三区| 日韩精品在线观看网站| 久久精品国产福利| 嫩草影院中文字幕| 久久久久久久久久久久久夜| 国产麻豆一精品一男同| 性欧美xxxx视频在线观看| 欧美三级伦理在线| 性高潮免费视频| 在线精品视频一区二区三四| 超碰免费在线播放| 蜜桃久久精品乱码一区二区| 久久国产麻豆精品| 日操夜操天天操| 精品久久久999| 色狠狠久久av综合| 99精品视频国产| 岛国精品视频在线播放| a视频在线观看| 欧美日韩亚洲综合一区二区三区激情在线| 国产自产v一区二区三区c| 国产无遮挡呻吟娇喘视频| 久久99国产综合精品女同| 凹凸成人精品亚洲精品密奴| 欧美激情一区二区三区p站|