日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

又一个基于 Esbuild 的神器!esno

發布時間:2023/12/9 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 又一个基于 Esbuild 的神器!esno 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是若川。持續組織了6個月源碼共讀活動,感興趣的可以點此加我微信 ruochuan02?參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》?包含20余篇源碼文章。歷史面試系列

esno我在我的很多源碼文章中提到過,但沒有寫文章,分享這篇好文章。


Node.js 并不支持直接執行 TS 文件,如果要執行 TS 文件的話,我們就可以借助 ts-node 這個庫。相信有些小伙伴在工作中也用過這個庫,關于 ts-node 這個庫的相關內容我就不展開介紹了,因為本文的主角是由 antfu 大佬開源的 esno 項目,接下來我將帶大家一起來揭開這個項目背后的秘密。

閱讀完本文后,你將了解 esno 項目是如何執行 TS 文件。此外,你還會了解如何劫持 Node.js 的 require 函數、如何為 ES Module 的 import 語句添加鉤子及如何自定義 https 加載器,以支持 import React from "https://esm.sh/react" 導入方式。

esno 是什么

esno 是基于 esbuild 的 TS/ESNext node 運行時。該庫會針對不同的模塊化標準,采用不同的方案:

  • esno - Node in CJS mode - by esbuild-register

  • esmo - Node in ESM mode - by esbuild-node-loader

使用 esno 的方式很簡單,你可以以全局或局部的方式來安裝它:

全局安裝

$?npm?i?-g?esno

在安裝成功后,你就可以通過以下方式來直接執行 TS 文件:

$?esno?index.ts $?esmo?index.ts

局部安裝

$?npm?i?esno

而對于局部安裝的方式來說,一般情況下,我們會以 npm scripts 的方式來使用它:

{"scripts":?{"start":?"esno?index.ts"},"dependencies":?{"esno":?"0.14.0"} }

esno 是如何工作的

在開始分析 esno 的工作原理之前,我們先來熟悉一下該項目:

├──?LICENSE ├──?README.md ├──?esmo.mjs ├──?esno.js ├──?package.json ├──?pnpm-lock.yaml ├──?publish.ts └──?tsconfig.json

觀察以上的項目結構可知,該項目并不會復雜。在項目根目錄下的 package.json 文件中,我們看到了前面介紹的 esnoesmo 命令。

{"bin":?{"esno":?"esno.js","esmo":?"esmo.mjs"}, }

此外,在 package.jsonscripts 字段中,我們發現了 release 命令。顧名思義,該命令用來發布版本。

{"scripts":?{"release":?"npx?bumpp?--tag?--commit?--push?&&?node?esmo.mjs?publish.ts"}, }

需要注意的是,在 publish.ts 文件中,使用到了 2021 年度 Github 上最耀眼的項目 zx,利用該項目我們可以輕松地編寫命令行腳本。寫作本文時,它的 Star 數已經高達 27.5K,強烈推薦感興趣的小伙伴關注一下該項目。

簡單介紹了 esno 項目之后,接下來我們來分析 esno.js 文件:

#!/usr/bin/env?nodeconst?spawn?=?require('cross-spawn') const?spawnSync?=?spawn.syncconst?register?=?require.resolve('esbuild-register')const?argv?=?process.argv.slice(2)process.exit(spawnSync('node',?['-r',?register,?...argv],?{?stdio:?'inherit'?}).status)

由以上代碼可知,當執行 esno index.ts 命令后,會通過 spawnSync 來啟動 Node.js 程序執行腳本。需要注意的是,在執行時使用了 -r 選項,該選項的作用是預加載模塊:

-r,?--require?=?...?module?to?preload?(option?can?be?repeated)

這里預加載的模塊是 esbuild-register,該模塊就是 esno 命令執行 TS 文件的幕后英雄。

esbuild-register 是什么

esbuild-register 是一個基于 esbuild 來轉換 JSX、TS 和 esnext 特性的工具。你可以通過以下多種方式來安裝它:

$?npm?i?esbuild?esbuild-register?-D #?Or?Yarn $?yarn?add?esbuild?esbuild-register?--dev #?Or?pnpm $?pnpm?add?esbuild?esbuild-register?-D

在成功安裝該模塊之后,就可以在命令行中,直接通過 node 應用程序來執行 ts 文件:

$?node?-r?esbuild-register?file.ts

?-r, --require ?= ?... module to preload (option can be repeated)

-r 用于指定預加載的文件,即在執行 file.ts 文件前,提前加載 esbuild-register 模塊

它將會使用 tsconfig.json 中的 jsxFactory, jsxFragmentFactory 和 target 配置項來執行轉換操作。

esbuild-register 不僅可以在命令行中使用,而且還可以通過 API 的方式進行使用:

const?{?register?}?=?require('esbuild-register/dist/node')const?{?unregister?}?=?register({//?...options })//?Unregister?the?require?hook?if?you?don't?need?it?anymore unregister()

了解完 esbuild-register 的基本使用之后,接下來我們來分析它內部是如何工作的。

esbuild-register 是如何工作的

esbuild-register 內部利用了 pirates 這個庫來劫持 Node.js 的 require 函數,從而讓你可以在命令行中,直接執行 ts 文件。下面我們來看一下 esbuild-register 模塊中定義的 register 函數:

//?esbuild-register/src/node.ts import?{?transformSync,?TransformOptions?}?from?'esbuild' import?{?addHook?}?from?'pirates'export?function?register(esbuildOptions:?RegisterOptions?=?{})?{const?{extensions?=?DEFAULT_EXTENSIONS,hookIgnoreNodeModules?=?true,hookMatcher,...overrides}?=?esbuildOptions//?利用?transformSync?const?compile:?COMPILE?=?function?compile(code,?filename,?format)?{const?dir?=?dirname(filename)const?options?=?getOptions(dir)format?=?format????inferPackageFormat(dir,?filename)const?{code:?js,warnings,map:?jsSourceMap,}?=?transformSync(code,?{sourcefile:?filename,sourcemap:?'both',loader:?getLoader(filename),target:?options.target,jsxFactory:?options.jsxFactory,jsxFragment:?options.jsxFragment,format,...overrides,})//?省略部分代碼}const?revert?=?addHook(compile,?{exts:?extensions,ignoreNodeModules:?hookIgnoreNodeModules,matcher:?hookMatcher,})return?{unregister()?{revert()},} }

觀察以上的代碼可知,在 register 函數內部是利用 esbuild 模塊提供的 transformSync API 來實現 ts -> js 代碼的轉換。其實最關鍵的環節,還是通過調用 pirates 這個庫提供的 addHook 函數來注冊編譯 ts 文件的鉤子。那么 addHook 函數內部到底做了哪些處理呢?下面我們來看一下它的實現:

//?pirates-4.0.5/src/index.js export?function?addHook(hook,?opts?=?{})?{let?reverted?=?false;const?loaders?=?[];?//?存放新的loaderconst?oldLoaders?=?[];?//?存放舊的loaderlet?exts;const?originalJSLoader?=?Module._extensions['.js'];?//?原始的JS?Loader?//?省略部分代碼exts.forEach((ext)?=>?{//?獲取已注冊的loader,若未找到,則默認使用JS?Loaderconst?oldLoader?=?Module._extensions[ext]?||?originalJSLoader;oldLoaders[ext]?=?Module._extensions[ext];loaders[ext]?=?Module._extensions[ext]?=?function?newLoader(mod,?filename)?{let?compile;if?(!reverted)?{if?(shouldCompile(filename,?exts,?matcher,?ignoreNodeModules))?{compile?=?mod._compile;mod._compile?=?function?_compile(code)?{//?這里需要恢復成原來的_compile函數,否則會出現死循環mod._compile?=?compile;//?在編譯前先執行用戶自定義的hook函數const?newCode?=?hook(code,?filename);if?(typeof?newCode?!==?'string')?{throw?new?Error(HOOK_RETURNED_NOTHING_ERROR_MESSAGE);}return?mod._compile(newCode,?filename);};}}oldLoader(mod,?filename);};}); }

其實 addHook 函數的實現并不會復雜,該函數內部就是通過替換 mod._compile 方法來實現鉤子的功能。即在調用原始的 mod._compile 方法進行編譯前,會先調用 hook(code, filename) 函數來執行用戶自定義的 hook 函數,從而對代碼進行預處理。

而對于 esbuild-register 庫中的 register 函數來說,當 hook 函數執行時,就會調用該函數內部定義的 compile 函數來編譯 ts 代碼,然后再調用mod._compile 方法編譯生成的 js 代碼。

關于 esbuild-register 和 pirates 這兩個庫的內容就先介紹到這里,如果你想詳細了解 pirates 這個庫是如何工作的,可以閱讀 如何為 Node.js 的 require 函數添加鉤子? 這篇文章。

現在我們已經分析完 esno.js 文件,接下來我們來分析 esmo.mjs 文件。

esmo 是如何工作的

esmo 命令對應的是 esmo.mjs 文件:

#!/usr/bin/env?nodeimport?spawn?from?'cross-spawn' import?{?resolve?}?from?'import-meta-resolve' const?spawnSync?=?spawn.syncconst?argv?=?process.argv.slice(2) resolve('esbuild-node-loader',?import.meta.url).then((path)?=>?{process.exit(spawnSync('node',?['--loader',?path,?...argv],?{?stdio:?'inherit'?}).status) })

由以上代碼可知,當使用 node 應用程序執行 ES Module 文件時,會通過 --loader 選項來指定自定義的 ES Module 加載器。

--loader,?--experimental-loader?=?...?use?the?specified?module?as?a?custom?loader

需要注意的是,通過 --loader 選項指定的自定義加載器只適用于 ES Module 的 import 調用,并不適用于 CommonJS 的 require 調用。

那么自定義加載器有什么作用呢?在當前最新的 Node.js v17.4.0 版本中,還不支持以 https:// 開頭的說明符。我們可以在自定義加載器中,利用 Node.js 提供的鉤子機制,讓 Node.js 可以使用 import 導入以 https:// 協議開頭的 ES 模塊。

在分析如何自定義 https 資源加載器前,我們需要先介紹一下 import 說明符的概念。

import 說明符

import 語句的說明符是 from 關鍵字之后的字符串,例如 import { sep } from 'path' 中的 'path'。說明符也用于 export from 語句,并作為 import() 表達式的參數。

有三種類型的說明符:

  • 相對說明符,如 './startup.js' 或 '../config.mjs'。它們指的是相對于導入文件位置的路徑。對于這種類型,文件擴展名是必須的。

  • 裸說明符,如 'some-package' 或 'some-package/shuffle'。它們可以通過包名來引用包的主入口點。當包沒有 exports 字段的時候,才需要包含文件擴展名。

  • 絕對說明符,如 file:///opt/nodejs/config.js。它們直接且明確地引用完整路徑。

裸說明符解析由 Node.js 模塊解析算法處理,所有其他說明符解析始終僅使用標準的相對URL 解析語義進行解析。

和 CommonJS 一樣,包內的模塊文件可以通過在包名上添加路徑來訪問,除非包的 package.json 包含一個 "exports " 字段,在這種情況下,包中的文件只能通過 "exports " 中定義的路徑訪問。

介紹完 import 說明符之后,接下來我們來看一下如何自定義 https 加載器。

自定義 https 加載器

resolve 鉤子

resolve 鉤子用于根據模塊的說明符和 parentURL 生成導入目標的絕對路徑,調用該鉤子后會返回一個包含 format(可選) 和 url 屬性的對象。

//?https-loader.mjs import?{?get?}?from?'https';export?function?resolve(specifier,?context,?defaultResolve)?{const?{?parentURL?=?null?}?=?context;if?(specifier.startsWith('https://'))?{return?{url:?specifier};}?else?if?(parentURL?&&?parentURL.startsWith('https://'))?{return?{url:?new?URL(specifier,?parentURL).href};}//?讓?Node.js?處理其它的說明符return?defaultResolve(specifier,?context,?defaultResolve); }

在以上代碼中,會先判斷 specifier 字符串是否以 'https://' 開頭,如果條件滿足的話,該字符串的值直接作為 url 屬性的值,直接返回 { url: specifier } 對象。否則,會判斷 parentURL 是否以 'https://' 開頭,如果條件滿足的話,則會調用 URL 構造函數,創建 URL 對象。

parentURL 是從 context 對象上獲取的,那它什么時候會有值呢?假設在 ES 模塊 A 中,以相對路徑的形式導入 ES 模塊 B。在導入 ES 模塊 B 時,也會調用 resolve 鉤子,此時 context 對象上的 parentURL 就會有值。

load 鉤子

load 鉤子用于定義應該如何解釋、檢索和解析 URL 的方法,調用該方法后,會返回包含 format 和 source 屬性的對象。其中 format 屬性值只能是 'builtin'、'commonjs'、'json'、'module' 和 'wasm' 中的一種。而 source 屬性值的類型可以為 string、ArrayBuffer 或 TypedArray。

import?{?get?}?from?'https';export?function?load(url,?context,?defaultLoad)?{if?(url.startsWith('https://'))?{return?new?Promise((resolve,?reject)?=>?{get(url,?(res)?=>?{let?data?=?'';res.on('data',?(chunk)?=>?data?+=?chunk);res.on('end',?()?=>?resolve({format:?'module',source:?data,}));}).on('error',?(err)?=>?reject(err));});}//?讓?Node.js?加載其它類型的文件return?defaultLoad(url,?context,?defaultLoad); }

在以上代碼中,會通過 https 模塊中的 get 函數來加載 https:// 協議的 ES 模塊。如果不是以 'https://' 開頭,則會使用默認的加載器來加載其它類型的文件。

創建完 https-loader 之后,我們來測試一下該加載器。首先創建一個 main.mjs 文件并輸入以下內容:

//?main.mjs import?React?from?"https://esm.sh/react@17.0.2"console.dir(React);

然后在命令行輸入以下命令:

$?node?--experimental-loader?./https-loader.mjs?./main.mjs

當以上命令成功運行之后,控制臺會輸出以下內容:

{Fragment:?Symbol(react.fragment),StrictMode:?Symbol(react.strict_mode),Profiler:?Symbol(react.profiler),Suspense:?Symbol(react.suspense),... }

了解完以上的內容后,我們回過頭來看一下 esmo.mjs 文件中所使用的 esbuild-node-loader 模塊。下面我們來簡單分析一下 load 鉤子:

//?loader.mjs(esbuild-node-loader?v0.6.4) export?function?load(url,?context,?defaultLoad)?{if?(extensionsRegex.test(new?URL(url).pathname))?{const?{?format?}?=?context;let?filename?=?url;if?(!isWindows)?filename?=?fileURLToPath(url);const?rawSource?=?fs.readFileSync(new?URL(url),?{?encoding:?"utf8"?});const?{?js?}?=?esbuildTransformSync(rawSource,?filename,?url,?format);return?{format:?"module",source:?js,};}//?Let?Node.js?handle?all?other?format?/?sources.return?defaultLoad(url,?context,?defaultLoad); }

通過觀察以上代碼,我們可知 load 鉤子的核心處理流程,可以分為兩個步驟:

  • 步驟一:使用 fs.readFileSync 方法讀取文件資源的內容;

  • 步驟二:使用 esbuildTransformSync 函數對源代碼進行轉換。

而在 esbuildTransformSync 函數中,使用了 esbuild 模塊提供的 transformSync 函數來實現代碼的轉換。該函數的相關代碼如下所示:

//?loader.mjs(esbuild-node-loader?v0.6.4) function?esbuildTransformSync(rawSource,?filename,?url,?format)?{const?{code:?js,warnings,map:?jsSourceMap,}?=?transformSync(rawSource.toString(),?{sourcefile:?filename,sourcemap:?"both",loader:?new?URL(url).pathname.match(extensionsRegex)[1],target:?`node${process.versions.node}`,?format:?format?===?"module"???"esm"?:?"cjs",});//?省略部分代碼return?{?js,?jsSourceMap?}; }

關于 transformSync 函數的使用方式,我就不展開介紹了。感興趣的小伙伴可以自行閱讀一下 esbuild 官網上的相關文檔。

好的,esno 這個項目就介紹到這里。如果你對 Node.js 平臺下的 require 和 import hook 機制感興趣的話,可以詳細閱讀一下 pirates、esbuild-register 和 esbuild-node-loader 這幾個項目的源碼。若有遇到問題的話,可以跟阿寶哥交流喲。

參考資源

  • esbuild 官網

  • Node.js 官網 - ESM

  • 如何為 Node.js 的 require 函數添加鉤子?


·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》20余篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,最近組織了源碼共讀活動,幫助3000+前端人學會看源碼。公眾號愿景:幫助5年內前端人走向前列。

識別方二維碼加我微信、拉你進源碼共讀

今日話題

略。分享、收藏、點贊、在看我的文章就是對我最大的支持~

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的又一个基于 Esbuild 的神器!esno的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

在线观看成人一级片 | 成人免费观看电影 | 视频91在线 | 国产视频精品免费 | 四虎国产精品免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 麻豆视频免费入口 | 午夜国产福利在线观看 | 欧美日韩18 | 超碰人人在线观看 | 91福利影院在线观看 | 成人av免费在线播放 | 亚洲爽爽网| 91黄色视屏| 国产成人精品久久久久蜜臀 | 成人免费观看完整版电影 | 国产丝袜制服在线 | 国内精品视频一区二区三区八戒 | 久久视频免费在线观看 | 黄色片免费电影 | 91精品啪在线观看国产线免费 | 亚洲涩涩涩 | 精品国产黄色片 | 日本二区三区在线 | 丁香六月网 | 一区二区三区日韩在线观看 | 五月婷婷综合在线视频 | 婷婷丁香激情网 | 天天射天天| 欧美精品在线免费 | 伊人狠狠色丁香婷婷综合 | 中文字幕日韩无 | 在线视频在线观看 | 欧美做受高潮1 | 97视频在线免费播放 | 97精品在线视频 | 国产视频不卡一区 | 国产成人精品亚洲日本在线观看 | 91插插视频 | 免费成人在线视频网站 | 亚洲精品福利在线观看 | 国产视频999 | 亚洲理论电影网 | 婷婷丁香花五月天 | 天天夜夜操 | 伊人婷婷综合 | 日日爱网站| 亚洲黄色成人网 | 久草视频在| av网站在线观看播放 | 天天激情综合 | 粉嫩一二三区 | 国产一区二区手机在线观看 | 亚洲永久精品在线 | 国产精品自在欧美一区 | 亚洲年轻女教师毛茸茸 | 天天草天天色 | av在线进入 | 美女久久视频 | 天天操天天爱天天干 | 91最新网址在线观看 | 精品女同一区二区三区在线观看 | avwww在线 | 日韩久久久久久久久久久久 | x99av成人免费 | 日韩小视频网站 | 天天操天天色综合 | 欧美小视频在线 | 国产一区二区播放 | 久久国产亚洲 | 国产丝袜在线 | 亚洲视频网站在线观看 | 伊人久操| 91天天操 | 久久精品日产第一区二区三区乱码 | 中文字幕丝袜制服 | 亚洲国产网站 | 特级毛片爽www免费版 | 午夜av在线电影 | 久久这里只有精品视频首页 | www.色午夜.com| 亚洲无毛专区 | 在线观看视频一区二区 | 久久成年视频 | 亚洲国产精品人久久电影 | 午夜视频久久久 | 我爱av激情网 | 日韩高清免费电影 | 91女子私密保健养生少妇 | 国产亚洲精品久 | 久久艹欧美 | 中文字幕在线看视频国产中文版 | 瑞典xxxx性hd极品 | 999久久久 | 91麻豆精品国产自产 | 国产日韩精品一区二区 | 不卡电影免费在线播放一区 | av一区二区三区在线观看 | 91麻豆精品91久久久久同性 | 香蕉视频网站在线观看 | 欧美成人亚洲成人 | 精品国产伦一区二区三区观看说明 | 探花视频免费观看高清视频 | 欧美久久久久久久久久久久久 | 日韩欧美一区二区在线观看 | 97人人模人人爽人人喊中文字 | 久久久黄视频 | 美女视频黄,久久 | 成人av免费在线观看 | 久久99精品国产麻豆宅宅 | 视频91在线 | 免费av看片| 日韩免费三区 | 亚洲女欲精品久久久久久久18 | 久久人人爽爽 | 天天躁日日躁狠狠躁 | 国产日本在线观看 | 韩日精品中文字幕 | 欧美一区中文字幕 | 久久精品中文字幕一区二区三区 | av片免费播放 | 色噜噜日韩精品一区二区三区视频 | 国产精品伦一区二区三区视频 | 夜夜骑日日操 | av大片网站| 国产又粗又猛又黄又爽视频 | 韩国av在线播放 | 国产日韩欧美在线观看 | 成年人免费在线观看 | 深夜免费网站 | 在线视频欧美日韩 | 免费观看的黄色 | 国产色影院| 国产粉嫩在线 | 国产精品毛片完整版 | 久久人人爽人人爽人人片av软件 | aaa日本高清在线播放免费观看 | 久久精品国产精品亚洲精品 | 成人av电影免费观看 | 日韩在线免费不卡 | 午夜精品久久久久久久99无限制 | 亚洲欧美精品一区二区 | av电影中文 | 日韩av在线看 | 97国产超碰 | 久久精品视频在线 | 91九色精品国产 | 五月婷婷色丁香 | 人人干人人干人人干 | 国产五月婷 | 免费日韩一区二区三区 | 日韩欧美在线不卡 | 成人免费看黄 | 美女网站色免费 | 天堂激情网 | 日韩三级免费 | 中文字幕在线播放日韩 | 天天视频亚洲 | 日韩女同一区二区三区在线观看 | 欧美一级片在线免费观看 | 欧美一级久久久久 | 国产精品第一页在线 | 欧美一级黄大片 | 日韩婷婷 | 91免费版在线观看 | 狠狠色丁香婷婷综合最新地址 | 中文字幕在线不卡国产视频 | 亚洲精品字幕在线 | 不卡的一区二区三区 | 国产精品ssss在线亚洲 | 久久免费高清 | 中文一区二区三区在线观看 | 337p日本大胆噜噜噜噜 | 波多野结衣最新 | 在线亚洲人成电影网站色www | 亚洲国产精品女人久久久 | 久久成人国产精品 | 日韩另类在线 | 久久久久综合精品福利啪啪 | 中文字幕在线视频第一页 | 亚洲男人天堂2018 | 狠狠狠色丁香婷婷综合久久88 | 亚洲 欧美日韩 国产 中文 | 久久久久久久久久久久久国产精品 | 中文字幕丝袜美腿 | 免费又黄又爽 | 久久久资源 | 国产香蕉av | 91精品在线免费 | 天天操天天舔天天干 | 狠狠干电影| 欧美视频网址 | 亚洲综合在 | 色综合天 | 1024手机在线看 | 日本色小说视频 | 蜜桃视频在线观看一区 | 在线国产视频一区 | 日韩在线播放欧美字幕 | 日本公妇色中文字幕 | 色午夜影院 | 亚洲精品一区二区在线观看 | av在线超碰 | 久久久国产精品一区二区三区 | 丁香六月中文字幕 | 久久久国产精品亚洲一区 | 欧美成人猛片 | 视频三区 | 亚洲精品久久久久久国 | 国产一区在线视频播放 | 欧美91av| 国产精品久久久久久一区二区三区 | 日b视频在线观看网址 | 国产69精品久久久久99尤 | 久久精品美女 | 亚洲涩涩网 | 日韩二区三区在线观看 | 二区三区在线观看 | 在线岛国av | 日韩精品在线一区 | 亚洲日本欧美在线 | 中文字幕丝袜一区二区 | 六月激情婷婷 | 国产原创中文在线 | 99精品热视频只有精品10 | 日韩精品一二三 | 免费在线日韩 | 免费在线观看污网站 | 成人毛片a| 国产区第一页 | 麻豆影视在线播放 | 亚洲第一av在线播放 | 久草电影在线观看 | 免费日韩一区 | 天天操天天操天天操天天操 | 黄网站色视频 | 在线影院av| 一区二区精品在线观看 | 97精品视频在线 | 中文久久精品 | 激情av网| 国模一二三区 | 久久视频免费观看 | 在线不卡a | 久久国产精品99久久久久久丝袜 | 日韩精品久久久 | 日韩在线视 | 国产不卡视频在线播放 | www免费| 国产精品麻豆99久久久久久 | a色视频| 香蕉视频免费在线播放 | 久久人人精品 | 国产综合精品一区二区三区 | 久热爱 | 中文字幕在线观看视频一区二区三区 | 中文资源在线播放 | 51久久成人国产精品麻豆 | 欧美精品久久人人躁人人爽 | 色在线最新 | 国产精品女同一区二区三区久久夜 | 五月婷婷色综合 | 日本成人中文字幕在线观看 | 国产精品久久久久久久久久免费 | 日韩欧美精品一区二区 | 亚洲精品在线一区二区三区 | 免费一级片观看 | 一区二区毛片 | 欧美日韩不卡一区二区三区 | 国产日韩精品一区二区三区 | 国产日本高清 | 亚洲一区美女视频在线观看免费 | 天天干夜夜干 | 97超碰在 | 黄色大全免费观看 | 国产精品毛片完整版 | 综合网伊人 | 日韩欧美aaa | 中文字幕一区2区3区 | 91激情 | 在线导航福利 | 久久夜色精品国产欧美一区麻豆 | 又黄又爽的免费高潮视频 | 97理论片 | 成人三级av | 成人av电影在线 | 美女一级毛片视频 | 欧美激情精品久久久久久免费印度 | 在线免费观看一区二区三区 | 黄污视频网站 | 欧美成人一区二区 | 国产精品色在线 | 日日夜夜婷婷 | 久久国产精品99久久人人澡 | 国产精品午夜免费福利视频 | 伊人亚洲综合网 | 五月天com| 久久一本综合 | 精品久久久久亚洲 | 91成人看片| 综合网色 | 欧美日韩精品在线观看视频 | 天天色天天射天天操 | 国产在线久草 | 91中文在线视频 | 成人小电影在线看 | 欧美亚洲精品一区 | 色网免费观看 | 久久精品国产一区二区三区 | 国产手机在线 | 在线日韩亚洲 | 免费视频一区 | 色婷婷视频在线观看 | 国产成人精品亚洲精品 | 欧美极品少妇xbxb性爽爽视频 | 欧美日韩在线免费观看视频 | 永久免费观看视频 | 99爱视频 | 久久综合影院 | 精品日韩在线一区 | 国产一区 在线播放 | 麻豆视频在线 | 中文字幕在线观看完整版 | 日本久久高清视频 | 国产专区精品 | 国产成人精品电影久久久 | 久久婷婷亚洲 | 日韩精品免费在线观看视频 | 天堂网av 在线| 一区二区三区日韩在线 | 五月婷网| 可以免费观看的av片 | 国产在线观看网站 | 最近中文字幕在线中文高清版 | 亚洲精品小区久久久久久 | 中文字幕亚洲精品在线观看 | 国产精品九九九 | 亚洲成人国产 | 久久免费视频网 | 一区 在线 影院 | 精品国产一区二区三区免费 | 黄网站色成年免费观看 | 亚洲黄色免费在线看 | 香蕉免费在线 | 亚洲最大的av网站 | 最近日本mv字幕免费观看 | 狠狠干我| 日本午夜免费福利视频 | 手机av观看 | 中文一区在线观看 | 午夜电影 电影 | 国产原创中文在线 | 精精国产xxxx视频在线播放 | 91久久爱热色涩涩 | 丁香国产视频 | 99精品视频在线观看视频 | 久久久久国产精品www | 91av视频观看| 国产日本在线 | 国产一级在线播放 | 日韩精品中文字幕久久臀 | 色综合天天做天天爱 | 狠狠狠色丁香婷婷综合久久五月 | 欧美日韩免费观看一区二区三区 | 日韩精品一区不卡 | 91视频-88av| 国产精品va在线播放 | 欧美性色网站 | 青青河边草免费观看 | 天天干天天碰 | 国产 在线观看 | 四虎免费av | 欧亚久久 | 久久99久久99精品免观看粉嫩 | 青草视频网| 免费国产在线视频 | 国产精品久久久av久久久 | 51久久成人国产精品麻豆 | 综合亚洲视频 | 99热最新在线 | 又黄又爽又湿又无遮挡的在线视频 | 国产色女人 | 国产精品成人品 | 久久人人爽人人爽人人片av软件 | 99在线观看免费视频精品观看 | 精品国产一区二区三区男人吃奶 | 国产精品久久久久久久久久久杏吧 | 一区二区三区日韩在线 | 看污网站 | 狂野欧美激情性xxxx | 国产小视频你懂的在线 | 九九热精品视频在线观看 | 亚洲五月六月 | 亚洲精品美女久久 | 亚洲欧美乱综合图片区小说区 | 日日爽天天操 | 欧美极品xxx | 日本久久久精品视频 | 日日夜夜综合 | 亚洲a资源 | 国产一区二区影院 | 久久精品视频观看 | 国产精品第十页 | 伊人天天操| 92国产精品久久久久首页 | 91精品国产综合久久久久久久 | 国产流白浆高潮在线观看 | 17婷婷久久www | 国产高清绿奴videos | 国产一区二区三区高清播放 | 婷婷www | 国产剧在线观看片 | 国产一区二区在线免费观看 | 国产精品第一视频 | 五月天激情开心 | 国产午夜精品福利视频 | 日本xxxxav | 婷婷伊人五月天 | 久久精品婷婷 | 日韩一区二区免费视频 | 在线观看aa | 成人在线免费小视频 | 最新国产精品亚洲 | 操操操av| 色一级片 | 国产精品久久一区二区三区, | 免费看一级黄色大全 | 中文字幕中文中文字幕 | 综合网婷婷 | 婷婷久久久久 | 久热免费在线 | 91视频一8mav | 午夜视频在线观看一区二区 | 五月天国产 | 久久香蕉国产精品麻豆粉嫩av | 午夜在线看片 | 91精品国产九九九久久久亚洲 | 亚洲黄色成人网 | 成人在线电影观看 | 99免费在线视频 | 久久久精品日本 | 亚洲视频在线观看免费 | 波多野结衣综合网 | 亚洲欧美日韩在线一区二区 | 欧美a√大片 | 国产精品一区二区在线观看 | 精品亚洲一区二区 | 91高清一区 | 国产91精品久久久久久 | 久久久网站 | 精品久久久久久久久久久久久 | 香蕉视频导航 | 日本免费久久高清视频 | 黄色特级片 | 欧美日韩天堂 | 精品久久国产精品 | 综合久久久久久久久 | 国产一区二区免费看 | 久久夜夜夜 | 国产中年夫妇高潮精品视频 | 色午夜影院 | 日日夜夜精品视频 | 国产日女人 | 中文字幕在线观看亚洲 | 超碰97免费观看 | 中文网丁香综合网 | 国产免费高清 | 久久精品爱爱视频 | 天天射天天舔天天干 | 成在线播放 | 日韩乱理 | 九九九九热精品免费视频点播观看 | 久久久久久久毛片 | 中文字幕亚洲在线观看 | 精品久久久久久国产91 | 亚洲国内在线 | 丁香婷婷在线 | 91免费网站在线观看 | 婷婷丁香综合 | 91精品日韩 | 中文字幕丝袜制服 | 激情婷婷av | 久久久天天操 | 精品视频www | 天天操天天舔天天干 | 国产小视频免费观看 | 日韩精品一区二区在线观看 | 亚洲电影成人 | 99r精品视频在线观看 | 免费在线国产精品 | 国产精品99久久久久的智能播放 | 911亚洲精品第一 | 国产精品1区2区在线观看 | 91精品在线免费观看视频 | 色婷婷成人网 | 狠狠狠色丁香综合久久天下网 | 欧美日韩午夜爽爽 | 中文av影院 | 国产手机av | 日韩在线视频看看 | 97视频免费在线看 | 免费视频97 | 天堂va在线高清一区 | av中文字幕在线看 | 手机成人在线 | 在线观看蜜桃视频 | 五月天国产精品 | 久久综合久久久 | 免费观看国产精品视频 | 亚洲女同videos | 黄色在线视频网址 | 国产一区二区播放 | 天天综合人人 | 最近最新最好看中文视频 | 亚洲精品午夜国产va久久成人 | 在线观看理论 | 国产精品手机看片 | 天天射天天 | 天天爱综合 | 久久国际影院 | 国产在线观看免费av | 国产精品婷婷 | 欧美日韩国产在线 | 免费美女久久99 | 国产精品视频免费在线观看 | 国产精品久久久av | 久久网址 | 天天性天天草 | 7777xxxx| 狠狠躁夜夜躁人人爽超碰91 | 亚洲狠狠操 | 丁香婷婷电影 | 午夜国产福利在线 | 伊人电影天堂 | 成人午夜电影在线播放 | 成人91在线| 欧美性猛片, | 99精品国产兔费观看久久99 | 欧美成人h版电影 | 韩国av在线播放 | 色美女在线| 激情综合色播五月 | 国产精品18久久久久久不卡孕妇 | 性色视频在线 | 亚洲激情中文 | 五月婷视频| 国产字幕在线播放 | 免费成人在线观看 | 色播激情五月 | 黄p网站在线观看 | 亚洲精品中文字幕视频 | 五月花丁香婷婷 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 美女网站色 | 国产精品入口麻豆 | 激情网第四色 | 中文字幕久久精品亚洲乱码 | 91免费日韩 | 亚洲国产中文字幕 | av三区在线 | 国产精品免费视频一区二区 | 国产成人61精品免费看片 | 天天色天天干天天色 | 欧美成人中文字幕 | 99久久一区 | 成年人视频在线免费观看 | 亚洲精品视频第一页 | 欧美色图亚洲图片 | 亚洲婷婷免费 | 国产经典av | 久久久久9999亚洲精品 | 91污在线观看 | 西西大胆免费视频 | 欧美aa一级 | 在线影院 国内精品 | 91看片成人 | 91精品婷婷国产综合久久蝌蚪 | 综合亚洲视频 | 九九免费视频 | 激情一区二区三区欧美 | 色综合天天综合在线视频 | 人人要人人澡人人爽人人dvd | 亚洲精品国产综合久久 | 国产日韩高清在线 | 久草在线观看视频免费 | 福利视频在线看 | 午夜精品久久久久久久99 | 国内精品久久久久久久久久久久 | 成人va在线观看 | 国产精品成人国产乱一区 | 免费在线观看成人av | 在线观看黄色的网站 | 91免费观看 | 国产一线二线三线在线观看 | 亚洲成人精品在线观看 | 天天看天天操 | 久草免费在线观看视频 | 久久精品高清视频 | 国产精品久久久久久吹潮天美传媒 | 亚洲精品一区二区三区在线观看 | 色噜噜狠狠狠狠色综合久不 | 午夜电影久久 | 国产在线va | 久久国内视频 | 美女网站视频色 | 天天爽天天爽 | 国产精品久久久久久久av大片 | 日b视频在线观看网址 | 超薄丝袜一二三区 | 五月天,com| 亚洲一区久久久 | 69绿帽绿奴3pvideos | 91精品免费视频 | 国内外激情视频 | 亚洲精品国产日韩 | 91伊人久久大香线蕉蜜芽人口 | 日韩高清观看 | 国产成人一区二区三区电影 | 九九在线精品视频 | 久久久精品网站 | 免费激情在线电影 | 在线观看你懂的网站 | 国产精品久久久久久久毛片 | 麻豆国产视频下载 | 国内外成人在线视频 | 丁香久久激情 | 久久精选视频 | 欧洲色综合 | 中文在线www | 成人一级免费电影 | 91完整视频| 麻豆视传媒官网免费观看 | 亚洲 欧美 国产 va在线影院 | 久久精品超碰 | 精品国产一区二区三区蜜臀 | h久久| 国产精品毛片一区视频播不卡 | 97视频在线观看视频免费视频 | 日韩久久在线 | 国产在线国偷精品产拍免费yy | 视频成人免费 | 午夜国产福利在线 | 国产麻豆精品一区二区 | 亚洲国产影院av久久久久 | 午夜精品久久久久久久99 | 97超碰人人在线 | 日韩av免费一区二区 | 久久久久福利视频 | 玖玖精品在线 | 日韩精品欧美视频 | 国产精品一区二区久久 | 91免费国产在线观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 成人免费色| 91香蕉国产 | 日韩欧美在线综合网 | 欧美人交a欧美精品 | 丁香六月国产 | 国产亚洲视频系列 | 91亚洲精品久久久蜜桃网站 | 中文字幕在线高清 | 国产3p视频 | 日韩在线一二三区 | 国产精品伦一区二区三区视频 | 久久久久免费视频 | 久草在线资源视频 | av一区二区三区在线 | 精品在线播放 | 伊人干综合 | 国产亚洲免费的视频看 | 国产永久免费高清在线观看视频 | 国产成人久久av免费高清密臂 | 亚洲在线a | 九九在线视频免费观看 | 日日操狠狠干 | 久久久91精品国产 | 中文字幕色婷婷在线视频 | 久久理论影院 | 四虎在线观看精品视频 | 久久久久电影网站 | 亚洲午夜精 | 黄色a一级片 | www.狠狠插.com | 国产只有精品 | 不卡的av在线 | 日日夜夜天天射 | 精品国产综合区久久久久久 | 成人sm另类专区 | 精品国产99 | 91免费观看 | 91网址在线看 | 色国产精品一区在线观看 | 国产视频1| 国产精品自产拍在线观看桃花 | 日韩中文免费视频 | 亚洲成人精品在线观看 | 在线免费观看麻豆视频 | 欧美激情视频一区二区三区免费 | 麻豆精品视频在线观看免费 | 国产剧情一区二区 | 国产精品久久久久久久久久久久久久 | 色吧av色av | 91成版人在线观看入口 | 91精品在线观看视频 | 丁香电影小说免费视频观看 | 国产专区在线视频 | 日本久久久精品视频 | 婷婷色九月 | 在线视频日韩欧美 | 久久综合久久鬼 | 久久五月情影视 | 成人在线超碰 | 四季av综合网站 | 99精品国产aⅴ | 国产老妇av | 四虎5151久久欧美毛片 | 黄影院| 亚洲 中文 在线 精品 | 91亚色视频在线观看 | 亚洲国产网址 | 五月天狠狠操 | 日本公乱妇视频 | 人人讲下载 | 在线观看亚洲电影 | 久久国产精品久久精品国产演员表 | 中文字幕有码在线播放 | 精品国产免费人成在线观看 | 国产视频二区三区 | 五月婷婷六月丁香在线观看 | 国产一区成人 | 亚洲一区二区三区四区在线视频 | 九九激情视频 | 国产高清网站 | 中文字幕日本特黄aa毛片 | 日韩黄色影院 | 久久五月天色综合 | 久久99这里只有精品 | 欧洲不卡av | 日本中文字幕电影在线免费观看 | 亚洲五月综合 | 欧美一级性生活视频 | 超碰在线94 | 在线综合 亚洲 欧美在线视频 | 国产精品久久久久久爽爽爽 | 国产精品永久免费 | 夜夜骑日日操 | 国产真实精品久久二三区 | 亚洲高清不卡av | 色中射| www.夜夜爽 | 日韩中出在线 | 日韩中文字幕亚洲一区二区va在线 | 五月婷婷综合网 | 黄色毛片视频免费观看中文 | 日韩免费网站 | 黄色一区二区在线观看 | 97精产国品一二三产区在线 | 国产一卡二卡在线 | 在线一二区 | 国产午夜一级毛片 | 国产精品女同一区二区三区久久夜 | 日本黄色大片免费 | 在线综合 亚洲 欧美在线视频 | 激情文学丁香 | 日韩精品一区二区三区水蜜桃 | 中文字幕视频一区 | 97视频在线观看成人 | 丁香在线观看完整电影视频 | 欧美性黑人 | 成人在线视频免费 | av 一区二区三区 | 字幕网在线观看 | 一区二区三区播放 | www.色国产| 欧美日韩国产精品爽爽 | 又黄又刺激的视频 | 欧美老女人xx | 亚洲天天做 | 国产小视频在线看 | 亚洲精品欧美视频 | 五月激情丁香图片 | 久久久久久久久久电影 | 国产人成看黄久久久久久久久 | 久久久午夜精品理论片中文字幕 | 国产综合精品久久 | 国产91国语对白在线 | 亚洲精品久久久蜜桃 | 国产精品9999 | av一本久道久久波多野结衣 | 日韩视频中文字幕 | 国产一级一片免费播放放 | 国产成人精品久 | 国产高清久久久 | 精品亚洲成a人在线观看 | 精品视频免费在线 | 操操操人人| 日韩免费一区二区 | 日本夜夜草视频网站 | 一本到视频在线观看 | 婷婷在线资源 | 99热九九这里只有精品10 | 久久97久久| 福利av影院| 91麻豆精品国产自产 | 麻豆小视频在线观看 | 精品主播网红福利资源观看 | 九草视频在线 | 婷婷5月激情5月 | 国产在线 一区二区三区 | 在线观看视频一区二区三区 | 在线а√天堂中文官网 | www.久久com | 一本一本久久a久久精品牛牛影视 | 亚洲午夜久久久综合37日本 | 日韩女同av | 中文字幕精品一区 | 91精品啪| 免费在线播放av电影 | 五月婷婷综合色拍 | 亚洲日本中文字幕在线观看 | 久久精品网| 欧美激情精品久久久久久免费印度 | www日韩高清| 成人黄色片免费 | 亚洲国产成人久久 | 成人a视频在线观看 | 日韩激情视频在线观看 | 精品国产免费一区二区三区五区 | 亚洲永久精品在线观看 | 国产一级视频在线观看 | 国产原创中文在线 | 中文字幕中文中文字幕 | 狠狠色丁香久久婷婷综 | 2024国产精品视频 | 亚洲国内精品视频 | 色综合久久五月天 | 中文字幕高清免费日韩视频在线 | 日本午夜在线亚洲.国产 | 日韩精品一区二区三区免费视频观看 | 亚洲 欧洲 国产 日本 综合 | 伊人精品在线 | 日本视频精品 | 99精品国产高清在线观看 | 日韩视频免费观看高清完整版在线 | 亚洲成av人电影 | 在线观看一二三区 | 久久久精品视频网站 | 色噜噜噜噜| 91成人精品一区在线播放69 | 91九色在线视频观看 | 欧美日韩在线播放一区 | 亚州av免费 | 中文字幕一区二区三区在线观看 | 午夜神马福利 | 欧美日韩国内在线 | 日韩在线观看视频网站 | 黄色小说免费在线观看 | 久久久久免费网站 | 日韩色区 | 欧美国产精品一区二区 | 黄色免费视频在线观看 | 人人干干人人 | 青青网视频 | 精品国产伦一区二区三区观看体验 | 日韩成人高清在线 | 中文字幕国产亚洲 | 国产成人精品999 | 狠狠躁日日躁狂躁夜夜躁 | 人人草在线视频 | 精品视频久久久久久 | 日韩欧美区 | 黄污网站在线观看 | 久草在线观看视频免费 | 亚洲精品久久久久中文字幕m男 | 亚洲成a人片在线观看网站口工 | 日本中文不卡 | 深爱婷婷激情 | 就要干b | 99r在线观看 | 色亚洲网| 久久福利综合 | 国产精品美乳一区二区免费 | 91伊人久久大香线蕉蜜芽人口 | 99久久成人 | 草久热| 国产伦精品一区二区三区在线 | 人人爽人人爽人人片av免 | 五月婷婷综合在线 | 一区二区在线电影 | 黄色电影网站在线观看 | 日韩精品视频一二三 | 国产成人在线综合 | 91精品国产入口 | 一区二区三区国产欧美 | 中文字幕欧美日韩va免费视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 91精品国产自产在线观看永久 | 色av婷婷 | 国产91精品高清一区二区三区 | 香蕉影视 | 精品主播网红福利资源观看 | 精品极品在线 | 国产精品高潮呻吟久久av无 | 中文字幕精品www乱入免费视频 | 伊人激情综合 | 91女人18片女毛片60分钟 | 成人久久18免费 | 欧美一级高清片 | 91爱爱电影| 69av视频在线观看 | 激情五月婷婷 | 久久99精品久久久久久三级 | 美女视频黄网站 | 亚洲午夜精 | 亚洲自拍偷拍色图 | 亚洲女同videos | 国产在线精品一区二区不卡了 | 久久刺激视频 | 在线观看国产www | 久久综合狠狠综合 | 九九九热精品免费视频观看网站 | 在线国产专区 | 久久香蕉国产 | 欧美日韩3p | 97在线观视频免费观看 | 久久精品中文字幕免费mv | 久久电影国产免费久久电影 | 色网站黄 | 亚洲乱亚洲乱妇 | 丁香激情综合久久伊人久久 | 久久久久久中文字幕 | 9在线观看免费高清完整 | 国产成人久久77777精品 | 亚洲精品福利在线观看 | 超碰在线人人艹 | 中文在线字幕免 | 国产一级大片免费看 | 成人黄色电影免费观看 | 日日干av | 日韩在线国产精品 | 六月色丁香| 国产亚洲成av片在线观看 | 中文字幕免费 | 91欧美日韩国产 | 日韩免费一级电影 | 成人福利av | 激情视频免费在线观看 | 91污视频在线 | 一区中文字幕 | 亚洲va韩国va欧美va精四季 | 久久免费精彩视频 | 三级黄在线 | 一区二区视频免费在线观看 | 久久国语露脸国产精品电影 | 狠狠色丁香婷婷综合欧美 | 一区二区电影网 | 亚洲精品国产高清 | 天天艹天天干天天 | 午夜av免费 | 久久精品一级片 | 992tv人人网tv亚洲精品 | 91麻豆精品国产91久久久久久 | 久久精品免费电影 | 国产高清不卡在线 | 国产精品午夜av | 综合伊人av | 精品久久久亚洲 | 狠狠干狠狠久久 | 又紧又大又爽精品一区二区 | 最近最新最好看中文视频 | 亚洲激情在线观看 | 国产精品久久久久久久久久免费看 | 欧美日韩午夜 | 久久精品国产99国产 | 成年人国产在线观看 | 国产精品久久久久久久午夜片 | 日韩精品资源 | 99re国产| 国产福利中文字幕 | 在线视频一区二区 | 成人97人人超碰人人99 | 久久呀| 91麻豆精品国产自产在线游戏 | 色网站中文字幕 | 狠狠色狠狠色合久久伊人 | 国产免费视频在线 | 色婷婷www | 国产一区二区久久精品 | 97精产国品一二三产区在线 | 国产精品福利午夜在线观看 | 91视视频在线直接观看在线看网页在线看 | 国产麻豆精品95视频 | 免费在线激情电影 | 日韩超碰在线 | 香蕉视频在线网站 | 久久精品一区二区三区中文字幕 | 精品久久久久久久久久久久久 | 在线视频 区 |