国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Webpack入門(mén)到精通(AST、Babel、依賴(lài))

共 10466字,需瀏覽 21分鐘

 ·

2021-09-12 01:09

?

讀者投稿:作者:一咻,原文地址:https://juejin.cn/post/6975885302493609991?share_token=68a0b777-70c1-4021-a894-3ed9f8c107e9

?

babel與AST

初始化項(xiàng)目

mkdir webpack-study
cd webpack-study
yarn init -y

此時(shí)在package.json里面加入以下依賴(lài)

{
  "name""01",
  "version""1.0.0",
  "main""index.js",
  "license""MIT",
  "dependencies": {
    "@babel/core""7.12.3",
    "@babel/generator""7.12.5",
    "@babel/parser""7.12.5",
    "@babel/preset-env""7.12.1",
    "@babel/traverse""7.12.5",
    "ts-node""9.0.0",
    "typescript""4.0.5"
  },
  "devDependencies": {
    "@types/babel__core""7.1.12",
    "@types/babel__generator""7.6.2",
    "@types/babel__parser""7.1.1",
    "@types/babel__preset-env""7.9.1",
    "@types/babel__traverse""7.0.15",
    "@types/node""14.14.6"
  }
}

babel以及項(xiàng)目依賴(lài)

對(duì)使用到的包進(jìn)行說(shuō)明 詳細(xì)內(nèi)容請(qǐng)參考: 理解babel的基本原理和使用方法

  • @babel/core Babel 是一個(gè) JavaScript 編譯器, Babel 是一個(gè)工具鏈,主要用于將采用 ECMAScript 2015+ 語(yǔ)法編寫(xiě)的代碼轉(zhuǎn)換為向后兼容的 JavaScript 語(yǔ)法,以便能夠運(yùn)行在當(dāng)前和舊版本的瀏覽器或其他環(huán)境中。下面列出的是 Babel 能為你做的事情:
  1. 語(yǔ)法轉(zhuǎn)換
  2. 通過(guò) Polyfill 方式在目標(biāo)環(huán)境中添加缺失的特性(通過(guò)第三方 polyfill 模塊,例如 core-js,實(shí)現(xiàn))
  3. 源碼轉(zhuǎn)換 (codemods)
  • @babel/generator

    這個(gè)過(guò)程已經(jīng)在上面的實(shí)例中有所展現(xiàn),使用的插件是@babel/generator,其作用就是將轉(zhuǎn)換好的ast重新生成代碼。這樣的代碼就就可以安全的在瀏覽器運(yùn)行。

  • @babel/parser

    在babel中編譯器插件是@babel/parser,其作用就是將源碼轉(zhuǎn)換為AST,

  • @babel/preset-env (預(yù)設(shè)(preset)——babel的插件套裝)

    那么問(wèn)題來(lái)了新語(yǔ)法新特性那么多,難道我們要挨個(gè)去加嗎?當(dāng)然不是,babel已經(jīng)預(yù)設(shè)了幾套插件,將最新的語(yǔ)法進(jìn)行轉(zhuǎn)換,可以使用在不同的環(huán)境中,如下:

@babel/preset-env
@babel/preset-flow
@babel/preset-react
@babel/preset-typescript

從名字上就能看出他們使用的環(huán)境了,需要注意的是env,他的作用是將最新js轉(zhuǎn)換為es6代碼。預(yù)設(shè)是babel插件的組合,我們可以看下package.json(截取一部分):

image.png
  • @babel/traverse

ast進(jìn)行遍歷parse

  • ts-node 使用.d.ts文件 既然要開(kāi)發(fā)一個(gè)項(xiàng)目,顯然不會(huì)只有這些代碼。肯定要用到內(nèi)建模塊和第三方模塊。然而,直接導(dǎo)入模塊,在.ts文件中是不行的。例如:

這是由于typescript自身的機(jī)制,需要一份xx.d.ts聲明文件,來(lái)說(shuō)明模塊對(duì)外公開(kāi)的方法和屬性的類(lèi)型以及內(nèi)容。感覺(jué)有一些麻煩。好在,官方以及社區(qū)已經(jīng)準(zhǔn)備好了方案,來(lái)解決這個(gè)問(wèn)題。

在TypeScript 2.0以上的版本,獲取類(lèi)型聲明文件只需要使用npm。在項(xiàng)目目錄下執(zhí)行安裝:

npm install --save-dev @types/node

就可以獲得有關(guān)node.js v6.x的API的類(lèi)型說(shuō)明文件。之后,就可以順利的導(dǎo)入需要的模塊了:

import * as http from 'http';

小試牛刀

我們安裝好依賴(lài)之后,編寫(xiě)以下代碼

touch var_to_let.ts
import { parse } from '@babel/parser'
import traverse from '@babel/traverse'
import generate from '@babel/generator'

//將一段代碼(字符串)轉(zhuǎn)換成 AST

let code = `let a = 'str'; let b = 2`

const ast = parse(code, { sourceType: 'module' })

console.log(ast)

在vscode里面打上斷點(diǎn)

接著我們?cè)诮K端運(yùn)行

就可以進(jìn)行斷點(diǎn)調(diào)試了,我們可以看到parse()函數(shù)把字符串的代碼轉(zhuǎn)換后的結(jié)果

image.png

我們?cè)谶@個(gè)ast樹(shù)形結(jié)構(gòu)里面找到以下幾個(gè)屬性,不難發(fā)現(xiàn)ats就是把一個(gè)字符串代碼,表示成一個(gè)樹(shù)形結(jié)構(gòu)。

image.png

把let變成 var

traverse(ast, {
  //遍歷每一個(gè)節(jié)點(diǎn)都會(huì)進(jìn)入的回調(diào)函數(shù)。
  enteritem => {
    if(item.node.type === 'VariableDeclaration') {
      if(item.node.kind === 'let') {
        item.node.kind = 'var'
      }
    }
  }
})

const result = generate(ast, {}, code)
console.log(result)

看下面的結(jié)果,我們修改了ats對(duì)象里面的屬性的值,最終通過(guò)generate函數(shù)生成了一個(gè)新的字符串代碼片段。成功的將原始代碼里面的let轉(zhuǎn)化成了var。嗯?Es6轉(zhuǎn)Es5就這么簡(jiǎn)單?我們繼續(xù)

為什么用AST?

  1. 很難用正則表達(dá)式來(lái)替換,正則表達(dá)式很容易把let a = 'let',替換成var a = 'var'
  2. 在修改的時(shí)候需要知道每一個(gè)單詞的意思,才能做到只修改用于變量聲明let
  3. 而AST能明確的告訴你每個(gè)let的意思

把代碼轉(zhuǎn)化為ES5

//使用@babel/core 和 @babel/preset-env把代碼自動(dòng)轉(zhuǎn)化成ES5

import { parse } from '@babel/parser'
import * as babel from '@babel/core'

let code = `let a = 'str'; let b = 2; const c = 100`

//把字符串轉(zhuǎn)成ast
const ast = parse(code, { sourceType'module' })

//把a(bǔ)ts變成字符串
const result = babel.transformFromAstSync(ast, code, {
  presets: ['@babel/preset-env']
})

console.log(result)

得到以下結(jié)果,可以看到constlet都被轉(zhuǎn)化成了ES5的代碼了。下面我們接著寫(xiě),我們把code字符串代碼放在文件里面,把生成的結(jié)果寫(xiě)入到另一個(gè).es5.js結(jié)尾的文件中。

//使用@babel/core 和 @babel/preset-env把代碼自動(dòng)轉(zhuǎn)化成ES5

import { parse } from '@babel/parser'
import * as babel from '@babel/core'
import * as fs from 'fs'

//從文件中讀取源代碼,并轉(zhuǎn)成字符串
let code = fs.readFileSync('./test.js').toString()

//把字符串轉(zhuǎn)成ast
const ast = parse(code, { sourceType'module' })

//把a(bǔ)ts變成字符串
const result = babel.transformFromAstSync(ast, code, {
  presets: ['@babel/preset-env']
})

//把生成好的字符串寫(xiě)入文件里面
let fileName = 'test.es5.js'
fs.writeFileSync(fileName, result.code)

通過(guò)以上代碼我們就將一個(gè)源文件是ES6js代碼轉(zhuǎn)換成了ES6的代碼

image.png

分析index.js的依賴(lài)

在當(dāng)前目錄下新建project-01目錄,新建三個(gè)文件a.js,b.js,index.js分別寫(xiě)下以下內(nèi)容

a.js

var a = {
  value100
}

export default a

b.js

var b = {
  value : 100
}

export default b

index.js

import a from './a'
import b from './b'

var sum = a.value + b.value 

console.log(sum)

因?yàn)楫?dāng)前我們的環(huán)境是node環(huán)境,為了在node里面讓import生效,我們使用以下方法。

全局安裝 babel-cli

npm install babel-cli -g

安裝 babel-preset-env

npm install babel-preset-env -D

然后原來(lái)是 node server.js,改為這樣調(diào)用:babel-node --presets env server.js

?

需要注意的是如果只是為了 babel-node 這一個(gè)命令,安裝 babel-cli 會(huì)加載安裝很多資源和模塊,出于性能考慮不推薦在生產(chǎn)環(huán)境使用。自己在開(kāi)發(fā)調(diào)試的時(shí)候,可以鼓搗著玩玩

?

下面我們?cè)诿钚袌?zhí)行以下操作,便可以看到結(jié)果。呀是不是有點(diǎn)跑偏了的感覺(jué),我們是來(lái)分析index.js文件的依賴(lài)項(xiàng)的呀,趕緊回到正題。

image.png

在項(xiàng)目下新建deps.ts文件,在文章最后面我會(huì)把完整的代碼放上來(lái),一段一段貼代碼,太浪費(fèi)空間了。

最終我們得到了想要的結(jié)果。

image.png

遞歸分析嵌套的依賴(lài)

下面我們?cè)偌右稽c(diǎn)難度,假如我們的a.js又依賴(lài)了其他的文件呢?b.js也同樣依賴(lài)了其他文件呢?我們又該如何獲取到其內(nèi)部文件依賴(lài)的依賴(lài)呢?我們繼續(xù)

 cp -r project-01/ project-02
cd project-02

mkdir lib

a.js

import a1 from "./lib/a1.js"

var a = {
  value'a'
}

export default a

b.js

js
import b1 from "./lib/b1.js"

var b = {
  value : 100
}

export default b

在之前的a.jsb.js里面分別把這兩個(gè)文件import進(jìn)去, 這樣就有更深層次的依賴(lài)關(guān)系了,我們下面只需要在遍歷AST語(yǔ)法樹(shù)的時(shí)候,當(dāng)發(fā)現(xiàn)這個(gè)節(jié)點(diǎn)是ImportDeclaration的時(shí)候,再獲取這個(gè)節(jié)點(diǎn)的值,組裝一下真實(shí)的文件路徑,再遞歸調(diào)用把組裝好的路徑傳入collectCodeAndDeps便可以繼續(xù)分析了。

什么是循環(huán)依賴(lài)?

index.js

import a from './a.js'
import b from './b.js'

console.log(a)
let sum = a.value + b.value

console.log(sum)

a.js

import b from './b.js'

var a = {
  value: b.value + 1
}

export default a

b.js

js
import a from './a.js'

var b = {
  value: a.value + 1
}

export default b

我在node版本為v16.3.0下面測(cè)試得到的結(jié)果。

image.png

如果我們把上面value的值換成一個(gè)常量的話(huà),就可以正常執(zhí)行完代碼了。

靜態(tài)分析循環(huán)依賴(lài)

在遍歷AST的時(shí)候如果發(fā)現(xiàn)在之前的記錄里面已經(jīng)有了,就不再進(jìn)行遍歷了。

//分析index.js里面代碼依賴(lài)的文件
import { resolve, relative, dirname } from 'path'
import { readFileSync } from 'fs'

import { parse } from '@babel/parser'
import traverse from '@babel/traverse';


//設(shè)置項(xiàng)目根目錄


const projectRoot = resolve(__dirname, 'project-02')

//聲明最終結(jié)果的類(lèi)型
var result = {
  'index.js': {
    deps: ['a.js''b.js'],
    code"import a from './a'\r\nimport b from './b'\r\n\r\nvar sum = a.value + b.value \r\n\r\nconsole.log(sum)"
  }
}

type DepRelation = {
  [key: string]: {
    deps: string[],
    code: string
  }
}

interface a {

}
//初始化

const depRelation: DepRelation = {}

function collectCodeAndDeps(filepath: string{
  let key = getProjectPath(filepath)
  if (Object.keys(depRelation).includes(key)) {
    // 注意,重復(fù)依賴(lài)不一定是循環(huán)依賴(lài)
    return
  }
  //先讀取index文件的內(nèi)容
  //把字符串代碼轉(zhuǎn)換成ats
  let code = readFileSync(resolve(filepath)).toString()

  //把入口文件的文件名當(dāng)做map的key
  depRelation[key] = {
    deps: [],
    code
  }

  let ast = parse(code, {
    sourceType'module'
  })

  //遍歷ast

  traverse(ast, {
    enterpath => {
      //如果發(fā)現(xiàn)當(dāng)前語(yǔ)句是 import 就把inport的value 寫(xiě)入到依賴(lài)中去
      if (path.node.type === 'ImportDeclaration') {
        //當(dāng)前文件的上一級(jí)目錄 與獲取到當(dāng)前文件的依賴(lài)文件進(jìn)行拼接。
        let depAbsolutePath = resolve(dirname(filepath), path.node.source.value)
        //獲取當(dāng)前文件與根目錄的相對(duì)路徑
        const depProjectPath = getProjectPath(depAbsolutePath)
        // 把依賴(lài)寫(xiě)進(jìn) depRelation
        depRelation[key].deps.push(depProjectPath)
        //拿到依賴(lài)文件的真實(shí)路徑進(jìn)行再一次依賴(lài)分析
        collectCodeAndDeps(depAbsolutePath)
      }
    }
  })
}

collectCodeAndDeps(resolve(projectRoot, 'index.js'))

console.log(depRelation)

//獲取文件相對(duì)跟目錄的相對(duì)路徑
/*
C: \\Users\\code\\zf\\webpack\\01\\project - 01
C: \\Users\\code\\zf\\webpack\\01\\project - 01\\index.js

//得到的結(jié)果就是index.js
*/

function getProjectPath(path: string{
  return relative(projectRoot, path).replace(/\\/g'/')
}

總結(jié)

AST相關(guān)

  1. parse:把代碼轉(zhuǎn)換成AST
  2. traverse:遍歷AST,并在需要的時(shí)候可以進(jìn)行修改
  3. generate:把AST再轉(zhuǎn)換成代碼code2

工具相關(guān)

  1. babel 可以把高級(jí)代碼轉(zhuǎn)換成ES5代碼
  2. @babel/parser
  3. @babel/traverse
  4. @babel/generate
  5. @babel/core
  6. @babel-preset-env 獲取您指定的任何目標(biāo)環(huán)境并根據(jù)其映射檢查它們以編譯插件列表并將其傳遞給 Babel

代碼技巧

用哈希表來(lái)存儲(chǔ)映射關(guān)系 通過(guò)檢查哈希表的key來(lái)檢測(cè)重復(fù)

循環(huán)依賴(lài)

有的循環(huán)依賴(lài)可以正常執(zhí)行 有的循環(huán)依賴(lài)不可以正常執(zhí)行 但是兩者都可以進(jìn)行靜態(tài)分析


瀏覽 58
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲天堂本一| 成人无码影院日韩,成人年…| 成人视频18| 男女视频网站| 日本黄色电影在线| 四川少BBB搡BBB爽爽爽| 国产搡BBB爽爽爽视频| 国产成人一区| AV在线无码| 日韩高清在线播放| 国产乱子伦无码视频免费| 欧美A片在线免费观看| 国产A片| 男女日比视频| 色婷婷一区二区三区久久| 亚州视频在线观看| 天天撸天天色| 视色视频在线观看| 亚洲色图图片| 国产精品无码AV| 日日骚av一区二区三区| 国产1级a毛a毛1级a毛1级| 伊人网在线免费视频| 国产日韩欧美| 午夜激情视频| 91亚洲精品乱码久久久久久蜜桃 | 亚洲人一级电影| 黄色毛片网站| www.狠狠| 免费久久久| 青娱乐Av| 高清无码不卡在线观看| 国产精久久| 丁香五月天色婷婷| 中文字幕无码视频| 香蕉一区| 人人妻人人爽人人精品| 亚洲电影无码| 五月婷婷激情五月| 日日爽夜夜| 精品久久三级片| 约操少妇| 欧美成人精品一区二区| 中文字幕国产视频| 天天肏天天干| 日韩黄色片网站| 大伊香蕉视频| 超碰人人人| 日韩不卡精品| 国产精品激情| 中文字幕在线免费观看视频| 久久午夜无码鲁丝片午夜精| 亚洲福利在线观看视频| 国产无码AV在线| 1000部毛片A片免费视频| 婷婷在线影院| va色婷婷亚洲在线| 大香蕉最新国产2025| 操比视频| 这里都是精品| 国产一区二区三区免费视频| 九色国产在线| 亚洲日韩免费视频| 香蕉伊人视频| 天天天天天天天操| 国产A片大全| 亚洲国产中文字幕在线播放| 国产成人精品国内自产拍免费看| 日韩中文字幕一区二区三区| 欧美丝袜脚交xxxxBH| 天堂视频在线| 欧洲一级片| 免费婷婷| 啪啪视频免费观看| caopro| 国产成人无码免费| 欧美日韩色图| WWW久久久| 成人黄色无码视频| 国产一级自拍| 三级片无码在线| 国产精品伊人| 91精品国产综合久久久蜜臀粉嫩| 中文字幕性| 国产精品伦理| 国产精品HongKong麻豆| 国产清纯可爱美女自卫裸贷偷情 | 久久午夜成人电影| 成人视频观看| 欧美在线观看视频一区| 日韩黄在线| 国产AV无码区亚洲| 免费射精一二三区| 日韩三级视频| 99这里只有精品| 免费国产黄色| 大肉大捧一进一出两腿| 人人妻人人爽人人精品| 操少妇| 就要草| 国产精品成人99一区无码| 久久精品www人人爽人人| 久久做爱视频| 五月天高清无码| 欧美久久久久久| 日韩少妇无码视频| 亚洲色欲av| 伊人操逼| 国产肏屄| 国产精品久久久久久无码人妻| 人妻精品无码| 久久播视频| 欧美一本在线| 欧一美一婬一伦一区二区三区自慰,| 99成人网站| 91在线无码精品在线看| 国产熟女一区| 国产l精品久久久久久久久久| 天堂网久久| 久久蜜桃视频| 日韩一级片免费观看| 成人无码免费看| 中文字幕区| 中文字幕av第一页| 亚洲天堂AV网| 麻豆性爱视频| av资源网站| 国产精品成人无码a无码| 中文字幕视频在线播放| 国产无套视频| 亚洲卡一卡二| 久久久九九九| 国产人人干| 日本A片| www.97yy| 日本三级片网站在线观看| а√天堂中文最新版8| 在线观看AV无码| 亚洲中文字幕日韩在线| 黄色激情av| 9l人人澡人人妻人人精品| 亚洲一区视频在线| 在线无.码| 青青草视频偷拍| 日本亲子乱婬一级A片| 国产日本在线观看| 精品无码视频在线观看| 中文在线a∨在线| 蜜臀av一区二区| 三级在线观看视频| 残忍另类BBWBBWBBW| 久久久久久AV| 日韩免费av| 亚洲综合五月天婷婷丁香| 高清一区二区| 日韩免费在线视频观看| 欧美性爱无码在线| 女邻居的B好大| 国产aaaaaaaaaa| 欧美日韩国产性爱| 嫰BBB槡BBBB槡BBBB| 国产主播在线播放| 国产又粗又长的视频| 欧美、日韩、中文、制服、人妻| 操逼精品| 中文字幕午夜福利| 在线观看亚州| 日本无码毛片| 日韩黄色小电影| 日本有码在线| 婷婷夜色福利网| 久久99精品久久久水蜜桃| 黄色免费大片| 一区二区视频免费| 久久毛片人妻| 最新日韩中文字幕| 全国男人的天堂网站| 免费一级AAAAA片在线播放| 波多野结衣无码在线视频| 黄色电影a片| 欧美大香蕉在线视频| 久久亚洲天堂| 高清一区二区| 中文字幕网站在线观看| 黄色小视频在线| 婷婷五月中文| AV午夜| 操b视频在线观看| 青娱乐成人| 亚洲不卡视频| 日本黄色精品| 搡BBB搡BBBB搡BBBB'| 国产主播第一页| 色999日韩| 91蝌蚪网| 国产精品9| 狠狠干高清成人二区三区| 香蕉一级视频| 狠狠ri| 国产黄a| 黑人大荫蒂女同互磨| 亚洲中文AV| A片在线免费观看| 欧美操B在线| 成人18视频| 黄在线| 欧美日逼网站| 久久激情网| 午夜亚洲国产一区视频网站| 97免费在线视频| 影音先锋中文字幕av| 国产精品视频免费观看| 日韩插插| 秋霞欧美在线| 牛牛精品一区二区| 成人色色网| 一区二区三区久久久| 亚洲色色视频| 人人摸人人看人人| 欧美伊人久久| 日韩成人无码人妻| www.狠狠操| 成人免费内射视频| 精品色播| 四川少妇BBBB| 日韩人妻无码一区二区三区99| 日韩无码人妻久久一区二区三区| 亚洲欧美视频| 免费成人一级片| 久99久热| 国产日韩欧美在线观看| 日韩v欧美v日本v亚洲v国产v | 一级欧美黑人大战白妞| 免费a视频在线观看| 无码中文字幕在线观看| 69av视频在线观看| 无码9999| 久久久久婷婷| AV免费网站| 大香蕉88| 爱爱午夜福利| 韩国无码一区二区三区| 91麻豆视频| 无码人妻丰满熟妇区17水蜜桃| 真人BBwBBWBBw另类视频| 日本成人三级片| 日韩免费视频在线观看| 九九色色| 69精品在线| 久久久久久久亚洲| 亚洲日韩中文字幕| 亚洲综合网在线观看| 老司机视频在线视频18| 欧美日韩国产高清| 欧美日本成人网站入口| 色五月电影| 香蕉AV777XXX色综合一区| 久久99热这里只频精品6学生| 黄频美女日本免费| 视频一区中文字幕| 有码中文字幕在线观看| 国产精品无码怀孕软件| 婷婷五月激情中文字幕| 久久精品一二三| 欧美插穴| 韩国日本久久| 99操99| 国产乱子伦视频国产印度| 亚洲精品成人无码| av天天操| 午夜福利视频91| 日本成人中文字幕| 国产寡妇亲子伦一区二区三区四区 | 亚洲精品高清无码| 狠狠干,狠狠操| 日韩精品丰满无码一级A片∴ | 色情综合| 日韩精品一区二区三区中文在线| 中文字幕成人电影| 丰满人妻一区二区三区精品高清| 翔田千里无码播放| 殴美老妇BBBBBBBBB| 日韩69| 西西444WWW无码大胆知乎| jiujiuav| 91精品国际| 在线观看黄视频| 色综合久久88色综合天天| 天天综合字幕一区二区| 天堂婷婷| 日韩视频一区二区三区| 人人操人人爱人人摸| 超碰在线人人| 91精品国产综合久久久蜜臀酒店 | 成人永久免费视频| 人妻少妇一区| 久久无码黄片| 成人黄色无码视频| 老司机无码视频| AV电影免费看| 日本a在线免费观看| 亚洲有码在线观看| 日韩vA| 人妻AV一区| 国产成人精品免费视频| 狠狠躁夜夜躁人人爽视频| 日本成人网址| 亚洲成人无码在线| 国产一级二级三级久久久| 你懂的网址在线观看| 国产三级片在线观看| 亚洲免费观看高清完| 日韩av毛片| 色综合视频| 国产又粗又猛又爽又黄91精品| 熟女一区二区| 蜜桃无码一区| 日韩无码电| 免费视频一区二区| 日本午夜无码| 中文天堂网| 人妻丰满熟妇| 亚洲秘无码一区二区三区蜜桃中文 | 99er视频| 亚洲日韩AV电影| 日韩a在线| 国产高清做爱| 丁香天堂| 91久久99久久91熟女精品| 亚洲日本中文字幕在线观看| 亚洲性爱一级片| 欧美成人精品无| 激情久久av| 日韩欧美中文字幕在线观看| 欧美最猛黑A片黑人猛交蜜桃视频| 丝袜足交在线| 俺来了俺去了www色官网| 日本免费爱爱| 这里只有精品视频| 国产美女做爱视频| 特级西西WWW888| 青青操天天干| 中文字幕免费在线视频| 久久国产精品在线| 91在线无码精品秘入口国战| 欧美人妻视频在线| 玖玖爱在线精品视频| 日本精品人妻无码77777| 草草影院第一页YYCCC| 亚洲精品无码久久| 色色射| 日韩精品成人无码免费| 四季AV一区二区凹凸懂色桃花 | 国产久久久久久久久久| 亚洲永久免费| 999福利视频| 中文字幕第6页| gogogo免费高清在线偷拍| 毛片在线观看视频| 在线观看免费黄| 国产精品不卡在线观看| 爱爱帝国综合社区| 亚洲综合中文字幕在线| 综合婷婷| 超碰人妻97| 丁香婷婷色五月| 国产精品XXX视频| 一区二区三区视频在线观看| 免费人成在线观看视频播放| 五月激情丁香| 日韩无码视频一区二区| 亚洲无码高清视频在线观看| 久艹在线视频| 不卡av在线| 特黄特色免费视频| 婷婷狠狠| 豆花成人网站在线看| 天天综合天天干| 国产嫩草影院| 操碰人人| 91欧美精品成人AAA片| 无码人妻一区二区三区免费n狂飙 性猛交AAAA片免费看蜜桃视频 | 午夜精东影业传媒在线观看| 国产成人97精品免费看片| 久久久一| 国产精品麻豆视频| 三级无码在线| 大逼影院| 蜜桃视频网站18| 伦理无码| 黄色福利在线观看| 无码在线播放视频| 亚洲sese| 天天日av| 鸡巴网站| 丁香乱伦| 正在播放李彩斐被洋老外| 五月天婷婷久久| 韩国三级中文字幕HD久久精品| 一二三区免费视频| 日本黄色视频官网| 免费黄片视频在线观看| 久久久久国产精品视频| 日韩免费三级片| 日韩精品一二| 成人一级电影| 学生妹一级片内射视频| 成人在线视频免费观看| 亚洲无码图片| 久久中文字幕综合| 国产精品日韩无码| 猫咪亚洲AV成人无码电影| 色片在线| 高清无码内射视频| 国产suv精品一区二区6| 豆花成人视频在线观看| 久久V| 亚洲成人免费观看| 五月丁香花婷婷| 免费操| 精品中文视频| 丰满欧美熟妇免费视频| 天天干天天天天| 国产天天操| 色999日韩| 日韩中文无码一级A片| 国产草逼视频| 91亚洲国产精品| 91成人免费视频| 91精品国产乱码香蕉黄瓜草莓| 欧美h| 手机看片1204| 99av| 日韩欧美一级片| 日韩在线视频中文字幕码无| 国产乱码精品一区二区三区的特点 | 水蜜桃一区| 日韩欧美中文字幕公布| 国产麻豆AⅤMDMD0071| 日韩性爱小视频| 国产高潮视频在线观看| 免费A片国产毛无码A片| 老司机一区二区| 狠狠操狠狠操| 日本一区免费| 六月丁香综合| 成人AV天堂| 日本一本在线| 青青草黄色片| 高清无码在线观看18| 中文字幕天堂在线| adn日韩av| 视频在线观看一区| 一级一级a免一级a做免费线看内裤 | 国产熟女AV| 91国产爽黄在线相亲| AA丁香综合激情| 天天色区| 撸一撸在线视频| 亚洲欧美国产高清vA在线播放| 一本一道vs波多野结衣| 无码爱爱视频| 亚洲国产成人无码a在线播放| 日本少妇视频| 8x8x黄色| 中文人妻无码| 日本少妇午夜福利| 国产精品二区高清在线苍井空 | 国产做受91| 操比视频在线观看| 亚洲国产成人精品激情在线| 91麻豆国产| 久草免费在线观看视频| 日韩一区二区免费看| 久久精品视频18| 亚洲中文字幕2019| 国产尤物在线| 婷婷天堂站| 911香蕉视频| 天天日天天干天天爽| 免费无码国产在线53| 青娱乐在线视频精品| 欧美日韩免费在线视频| 婷婷天堂| 色婷婷一区二区三区久久午夜 | 国产精品高清无码| 波多野结衣中文字幕久久| 国产美女精品| 在线操B| 西西444WWW无码视频软件功能介绍| 9118禁| 色九九九九| 老女人AV| 小日本91在线观看| 蜜桃精品在线观看| 天天拍天天射| 伊人蕉 | 欧美三级长视频| 一级av片| 亚洲日韩三级| 超碰天天射| 一夲道无码专区av无码A片| 亚洲无码在线视频观看| 粉嫩99国产精品久久久久久人妻| 四虎网站| 欧美八区| 亚洲高清视频免费| 五月婷婷啪| 91国产爽黄在线相亲| 成人午夜在线| 日本成人一区二区| 日本一区二区三| 毛片毛片毛片毛片| 91狠狠色丁香婷婷综合久久精品 | 亚洲偷拍视频| 国产一区二区三区成人| 91丨九色丨熟女老版| 久久午夜一级A片| 久久久久久久AV| 韩国精品久久久| 久久黄片| 精品人妻二区三区蜜桃| 2020无码| 亚州精品国产精品乱码不99勇敢 | 精品三级在线观看| 搞搞网日本9| 欧美级毛片一进一出| 九九国产| eeuss久久| 国产黄色一区| 一级黄片免费看| xxxx国产| 青青草原无码| 18害羞勿进网站国产| 色99在线视频| 久久人人操| 98国产精品| 99Re66精品免费视频| 丰滿人妻一区二区三| 日韩欧美中文在线观看| 天天干夜夜爽| 国产成人91| 韩国无码一区| 日韩在线第—页| 日韩三级视频在线观看| 青草av在| 中文字幕久久无码| 黄色网址在线免费观看| 乱子伦国产精品视频一级毛| 亚洲天堂在线免费观看视频| AV草逼| 亚洲一区二区成人网站戴套| 亚洲色欲色欲www在线成人网| 大香蕉1024| 成人一区二区在线观看| 久久精品片| 看国产AA免费| 天天插天天插| 中文在线a√在线8| 无码成人精品| 一级A片黄色| 免费观看黄色一级片| 欧美黄色站| 黄色片网站| 国产黄片网站| 久久久久久久久久国产| 日本爱爱免费播放视频| 91大神在线免费观看| 日韩成人黄色视频| 在线观看中文字幕| 97在线免费视频| 亚洲va视频| 毛片久久久| 国产av播放| 成年人AV| 国产性精品| 一插菊花综合网| 操毛| 爱逼AV| 婷婷夜色福利网| 国产熟女一区| 天堂网2025| 免费v在线观看| 熟女少妇网站| 日韩欧美亚洲| 逼特逼在线观看| 黄色视频亚洲| 99日韩| AV自拍偷拍| 一区二区在线免费观看| 人人操人人妻人人看| 91精品国产乱码| 欧美footjob| 在线看A片| 懂色aV| 99成人国产精品视频| AV天堂无码| 热久久91| 性九九九九九九| 91国在线| 国产精品卡一| 91久久精品一区二区三区| 欧美黄色网视频| 巨い巨乳の少妇あジed2k| www色色| 午夜高清无码| 中文字幕免费高清在线观看| 日本一本不卡| 日本大香蕉伊人| 五月婷婷丁香网| 一区视频免费观看| 欧美日韩性色无码免费| 日逼老女人| 国产免费成人在线观看| 99re6热在线精品视频功能| 伊人网视频| www.欧美日韩| av在线免费播放| 久久精品小视频| 一区二区三区成人电影| 黄色成人网站在线播放| 热久久这里只有精品| 免费看黄的网站在线观看| 亚洲AV无码成人精品区在线欢看 | 人人爱人人干人人操| 伊人黄色网| 免费一级欧美片在线观看| 最美孕交vivoestv另类| 人人操人人妻| 尤物在线播放| 一级欧美一级日韩| 成人无码一区| 午夜日韩| 亚洲成人无码电影| 香蕉久久a毛片| 国产又爽又黄A片| 欧美日韩精品一区二区| 91蜜桃网| 欧美黄片免费在线观看| 黄色小说视频网站| 十八毛片| 婷婷激情av| 红桃视频无码| 日韩欧美成人在线视频| 日韩欧美在中文| 又黄又爽的视频| 久久夜色精品国产噜噜亚洲AV| 欧美亚洲国产视频| 国产成人在线视频免费| 一边做一边说国语对白| 日本一级片免费看| 国产视频123区| 色婷婷狠| 能看的操逼视频| 福利视频在线| 天堂v视频| 国产成人激情| 手机av网站| 爱爱视频天天操| 丁香五月综合啪啪| 综合AV在线| 蜜桃人妻无码AV天堂三区| 中字AV| 牛牛在线精品视频| 91精品国产一区三一| 69自拍视频| 精品无码一区二区三区在线| 人妻黑人一区二区三区| 久久综合17p| 日本韩国欧美18| 久久国产乱子伦精品免费午夜...| 亚洲黄色在线看| 人人操人人摸人人爽| 国产日本在线观看| 高清无码免费不卡| 日韩爆乳在线| 操屄视频网站| 蜜桃精品视频在线观看| 精品久久久国产| 大地影院资源官网| 99热r| 三级网站大全| av免费播放| 欧美成人精品一区二区三区| 老熟女乱伦| 欧美、日韩、中文、制服、人妻| 精品福利在线| 丁香五香天堂网| 美女av日逼| 天天撸天天干天天日| 国产综合色婷婷精品久久| 亚洲小电影在线观看| 中文字幕精品久久久久人妻红杏Ⅰ | 欧美三级欧美成人高清| 国产成人在线免费视频| 午夜九九| 日本不卡一区二区| 在线观看a片| 一欧美日韩免费/看| 伊人三区| 日韩主播在线| AAA一区二区三区| 俺也去网av| 一区二区三区四区av| 激情午夜av| 在线观看黄视频| 京熱大亂交无碼大亂交| 麻豆性爱视频| 亭亭五月丁香| 国产91白丝在一线播放| 久久久久久网| 黄页网站在线观看| 午夜精品18视频国产17c| 久久黄色A片| 超碰P| 日韩香蕉网| 91麻豆精品无码人妻| 婷婷久久在线| 黄色小说视频网站| 男女啪啪动态图| 免费成人黄片| www.三级| 欧美午夜乱伦电影| 青青热视频| 亚洲无码在线资源| 在线观看av资源| 91西安站街老熟女露脸| 丁香五月天社区| 1插菊花综合| 高清av无码| 青青草手机视频| 日韩不卡| 东京热六区| 麻豆911精一区二区| 国产日韩欧美91| 国产jizz| 99热5| 国产高清自拍视频| 亚洲无码视频播放| 日韩成人片| 免费AV观看| 91精品少妇| 亚洲另类图片小说| 少妇bbb搡bbbb搡bbbb| 国产精品乱子伦视频一区二区 | 日本在线网站| 国产视频在线免费观看| 亚洲精品999| 乌克兰毛片| 人妻人人操| 亚洲成人69| 国产乱子伦一区二区三区视频| 欧美日韩国产成人综合| 西西444WWW无码大胆知乎| 国产亚洲一区二区三区| 国产成人av在线播放| 国产精品大香蕉| 一级做a视频| 精品国产精品三级精品AV网址| 蜜桃传媒一区二区亚洲A| 国产伊人影院| 日本A在线| 天天综合久久| 人妻超碰在线| 欧一美一婬一伦一区二区三区| 国产精品精品精品| 国产丝袜无码| 国产精品网站在线观看| 麻豆成人91精品二区三区| 大香焦草久| 久久秘成人久久无码| 暖暖日本在线| caopro| 91人妻中文字幕在线精品| 91亚洲精品久久久久蜜桃| 亚洲视频入口| 一区二区三区www污污污网站| 黄色视频在线观看免费网站| 依人成人| 在线观看国产| 视频一区二区免费| 操BBB操BBB| 99热在线观看免费精品| 无码人妻一区二区三区免费n狂飙 性猛交AAAA片免费看蜜桃视频 | 蜜桃视频无码区在线观看| 亚洲激情五月| 乱子伦】国产精品| 欧美一级二级三级| 夜夜骑免费视频| 国产免费av在线| 蜜臀久久99精品久久久兰草影视 | 天天躁狠狠躁av| 日产精品久久久| 人人看人人摸人人草| 内射久久| 日本不卡三区| 久久久精品久久| 三级毛片视频| 激情综合婷婷久久| 国产成人精品一区二区三区在线| 国产美女精品久久AV爽| 亚洲色一| 北京熟妇搡BBBB搡BBBB| 中文无码日本一级A片久久影视| 国产免费一区二区三区| 国产尤物在线| 激情爱爱网站| 张柏芝BBw搡BBBB槡BBBBHDfree| 婷婷五月天中文字幕| 国产精品三级在线| 久久国产精品精品国产色婷婷 | 日韩bbbb| 国产精品码一本A片| 国产剧情在线| a在线观看| 少妇AAA级久久久无码精品片 | 日本精品在线视频| 日逼黄片| 第四色色综合| 一本道综合网| 日本A在线| 一区二区三区免费| av天天操| 亚洲精品一二三| 人人妻人人澡人人爽人人DVD | 99久久亚洲精品日本无码| 日本久久视频| 婷婷五月综合网| 色婷婷视频一区二区| 操逼短视频| 日本天堂在线| 日韩欧美不卡| 中国极品少妇XXX| 久久这里只有精品9| 国产色情在线| 一级黄色AV片| 亚洲一线视频| 亚洲1区2区| 欧美成人黄色电影| 久久精品视频在线免费观看| 日本视频精品| 一区二区三区成人电影| 翔田千里被操120分钟| 91精品午夜少妇| 色呦呦在线| 嫩BBB槡BBBB槡BBB| 久久你懂的| 内射婷婷| 亚洲综合电影| 国产在线观看97| 熟女人妻在线| 国产成人小视频| 翔田千里无码流出两部| 91热爆TS人妖系列| 日逼电影网| 网站色色免费看| 午夜专区| 青草无码视频| 亚洲一区中文字幕成人在线| 高清无码一级片| 国产成人精品二三区麻豆| 婷婷激情综合| 亚洲一区高清无码| 久久99久久99久久99| 欧美口爆| 俺也去网av| 黄色A片一级| 亚洲狼人| 日韩亚洲在线视频| 精品一区二区久久久久久久网站| 国产美女裸体网站| 国产人成视频| 亚洲精品无码中文字幕| 国产熟妇码视频户外直播| 狠狠色噜噜狠狠狠888| 青娱乐伊人| 日韩三级| 免费电影日本黄色| 人人妻人人爱人人操| 青青操成人| 亚洲AV无码秘翔田| 久久久久久AV| 俺也去com| 亚州视频在线| 超碰免费在线观看| 午夜成人精品一区二区三区| www.婷婷六月天| 国产精品自拍视频| 无码AA| 日本精品无码a62v在线| 国产AV自拍-久| av久操| 狠狠干狠狠撸| 淫色网址| 天天肏天天肏| 成人三级片在线观看| 无码一区二区区| 东方AV在线播放| 精品國產一區二區三區久久蜜月| 日本免费精品|