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

一篇帶你了解npm的原理

開發(fā) 開發(fā)工具
npm 是 JavaScript世界的包管理工具,并且是 Node.js平臺(tái)的默認(rèn)包管理工具。通過(guò) npm可以安裝、共享、分發(fā)代碼,管理項(xiàng)目依賴關(guān)系。

[[416736]]

npm的原理

npm據(jù)稱成為世界最大的包管理器?原因真的只是用戶友好?

一、npm init

用來(lái)初始化一個(gè)簡(jiǎn)單的package.json文件。package.json文件用來(lái)定義一個(gè)package的描述文件。

1、npm init的執(zhí)行的默認(rèn)行為

執(zhí)行npm init --yes,全部使用默認(rèn)的值。

2、 自定義npm init行為

npm init命令的原理是:調(diào)用腳本,輸出一個(gè)初始化的package.json文件。

獲取用戶輸入使用prompt()方法。

二、依賴包安裝

npm的核心功能:依賴管理。執(zhí)行npm i從package.json中dependencies和devDependencies將依賴包安裝到當(dāng)前目錄的node_modules文件夾中。

1、package定義

npm i 就可以安裝一個(gè)包。通常package就是我們需要安裝的包名,默認(rèn)配置下npm會(huì)從默認(rèn)的源(Registry)中查找該包名的對(duì)應(yīng)的包地址,并且下載安裝。 還可以是一個(gè)指向有效包名的http url/git url/文件夾路徑。

package的準(zhǔn)確定義,符合以下a)到g)其中一個(gè)條件,他就是一個(gè)package:

package的準(zhǔn)確定義

2、安裝本地包/遠(yuǎn)程git倉(cāng)庫(kù)包

共享依賴包,并非非要把包發(fā)布到npm源上才能使用。

(1)場(chǎng)景1:本地模塊引用

開發(fā)中避免不了模塊之間調(diào)用,開發(fā)中,我們把頻繁調(diào)用的配置模塊放在根目錄,然后如果有很多層級(jí)目錄,后來(lái)引用

  1. const config = require(''../../../../..config) 

這樣的路徑引用不利于代碼重構(gòu)。這時(shí)候我們需要考慮把這個(gè)模塊分離出來(lái)供其他模塊共享。比如config.js可以封裝成一個(gè)package放到node_modules目錄下。

不需要手動(dòng)拷貝或者創(chuàng)建軟連接到node_modules目錄,npm 有自己的解決方案:

方案:

1、新增config文件夾,將config.js移入文件夾,名字修改為index.js,創(chuàng)建package.json定義config包

  1.     "name""config"
  2.     "main""index.js"
  3.     "version""0.1.0" 

2、在項(xiàng)目的package.json新增依賴項(xiàng),然后執(zhí)行npm i。

  1.   "dependencies": { 
  2.     "config":"file: ./config" 
  3.   } 

查看 node_modules 目錄我們會(huì)發(fā)現(xiàn)多出來(lái)一個(gè)名為 config,指向上層 config/ 文件夾的軟鏈接。這是因?yàn)?npm 識(shí)別 file: 協(xié)議的url,得知這個(gè)包需要直接從文件系統(tǒng)中獲取,會(huì)自動(dòng)創(chuàng)建軟鏈接到 node_modules 中,完成“安裝”過(guò)程。

(2)場(chǎng)景2:私有g(shù)it共享package

團(tuán)隊(duì)內(nèi)會(huì)有一些代碼/公用庫(kù)需要在團(tuán)隊(duì)內(nèi)不同項(xiàng)目間共享,但可能由于包含了敏感內(nèi)容。

我們可以簡(jiǎn)單的將被依賴的包托管到私有的git倉(cāng)庫(kù)中,然后將git url保存到dependencies中。npm會(huì)直接調(diào)用系統(tǒng)的git命令從git倉(cāng)庫(kù)拉取包的內(nèi)容到node_modules中。

npm支持的git url格式:

  1. <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>] 

git 路徑后可以使用 # 指定特定的 git branch/commit/tag, 也可以 #semver: 指定特定的 semver range.

比如:

  1. git+ssh://git@github.com:npm/npm.git#v1.0.27 
  2. git+ssh://git@github.com:npm/npm#semver:^5.0 
  3. git+https://isaacs@github.com/npm/npm.git 
  4. git://github.com/npm/npm.git#v1.0.27 

(3)場(chǎng)景3:開源package問(wèn)題修復(fù)

此時(shí)我們可以手動(dòng)進(jìn)入 node_modules 目錄下修改相應(yīng)的包內(nèi)容,也許修改了一行代碼就修復(fù)了問(wèn)題。但是這種做法非常不明智!

方案:

fork原作者的git庫(kù),在自己的repo修復(fù)問(wèn)題,然后將dependencies中的相應(yīng)依賴改為自己修復(fù)后版本的git url就可以解決問(wèn)題。

三、npm install如何工作

npm i執(zhí)行完畢,node_modules中看到所有的依賴包。開發(fā)人員無(wú)關(guān)注node_modules文件夾的結(jié)構(gòu)細(xì)節(jié),關(guān)注業(yè)務(wù)代碼中引用依賴包。

理解node_modules結(jié)構(gòu)幫助我們更好理解npm如何工作。npm2到npm5變化和改進(jìn)。

3.1 npm2

npm2在安裝依賴包,采用的是簡(jiǎn)單的遞歸安裝方法。每一個(gè)包都有自己的依賴包,每一個(gè)包的依賴都安裝在自己的node_modules中,依賴關(guān)系層層遞進(jìn),構(gòu)成整個(gè)依賴樹,這個(gè)依賴樹與文件系統(tǒng)中的文件結(jié)構(gòu)樹一一對(duì)應(yīng)。

最方便的依賴樹的方式在根目錄下執(zhí)行npm ls。

優(yōu)點(diǎn):

層級(jí)結(jié)構(gòu)明顯,便于傻瓜式管理。

缺點(diǎn):

復(fù)雜工程,目錄結(jié)構(gòu)可能太深,深層的文件路徑過(guò)長(zhǎng)觸發(fā)window文件系統(tǒng)中文件路徑不能超過(guò)260個(gè)字符長(zhǎng)。

部分被多個(gè)包依賴的包在很多地方重復(fù)安裝,造成大量的冗余。

3.2 npm3

npm3的node_modules目錄改成更加扁平狀層級(jí)結(jié)構(gòu)。npm3在安裝的時(shí)候遍歷整個(gè)依賴樹,計(jì)算最合理的文件夾安裝方式,所有被重復(fù)依賴的包都可以去重安裝。

npm來(lái)說(shuō),同名不同版本的包是兩個(gè)獨(dú)立的包。

npm3的依賴樹結(jié)構(gòu)不再與文件夾層級(jí)一一對(duì)應(yīng)。

3.3 npm5

沿用npm3的扁平化依賴包安裝方式。最大的變化時(shí)增加package-lock.json文件。

package-lock.json作用:鎖定依賴安裝結(jié)構(gòu),發(fā)現(xiàn)node_modules目錄文件層級(jí)結(jié)構(gòu)是與json的結(jié)構(gòu)一一對(duì)應(yīng)。

npm5默認(rèn)會(huì)在執(zhí)行npm i后生成package-lock.json文件,提交到git/svn代碼庫(kù)。

要升級(jí),不要使用 5.0版本。

注意:在 npm 5.0 中,如果已有 package-lock 文件存在,若手動(dòng)在 package.json 文件新增一條依賴,再執(zhí)行 npm install, 新增的依賴并不會(huì)被安裝到 node_modules 中, package-lock.json 也不會(huì)做相應(yīng)的更新。

四、依賴包版本管理

介紹依賴包升級(jí)管理相關(guān)知識(shí)。

4.1 語(yǔ)義化版本semver

npm依賴管理的一個(gè)重要特性采用語(yǔ)義化版本(semver)規(guī)范,作為版本管理方案。

語(yǔ)義化版本號(hào)必須包含三個(gè)數(shù)字,格式:major.minor.patch。意思是:主版本號(hào).小版本號(hào).修改版本號(hào)。

我們需要在dependencies中使用semver約定的指定所需依賴包的版本號(hào)或者范圍。

常用的規(guī)則如下圖:

semver語(yǔ)義化版本

1、任意兩條規(guī)則,用空格連接起來(lái),表示“與”邏輯,即為兩個(gè)規(guī)則的交集。

如 >=2.3.1 <=2.8.0 可以解讀為: >=2.3.1 且 <=2.8.0

  • 可以匹配 2.3.1, 2.4.5, 2.8.0
  • 但不匹配 1.0.0, 2.3.0, 2.8.1, 3.0.0

2、任意兩條規(guī)則,用||連接起來(lái),表示“或”邏輯,即為兩條規(guī)則的并集。

如 ^2 >=2.3.1 || ^3 >3.2

  • 可以匹配 2.3.1, 2,8.1, 3.3.1
  • 但不匹配 1.0.0, 2.2.0, 3.1.0, 4.0.0

3、更直觀的表示版本號(hào)范圍的寫法

  • 或 x 匹配所有主版本
  • 1 或 1.x 匹配 主版本號(hào)為 1 的所有版本
  • 1.2 或 1.2.x 匹配 版本號(hào)為 1.2 開頭的所有版本

4、在 MAJOR.MINOR.PATCH 后追加 - 后跟點(diǎn)號(hào)分隔的標(biāo)簽,作為預(yù)發(fā)布版本標(biāo)簽 通常被視為不穩(wěn)定、不建議生產(chǎn)使用的版本。

  • 1.0.0-alpha
  • 1.0.0-beta.1
  • 1.0.0-rc.3

4.2 依賴版本升級(jí)

在安裝完一個(gè)依賴包之后有新的版本發(fā)布了,如何使用npm進(jìn)行版本升級(jí)呢?

  • npm i或者npm update,但是不同的npm版本,不同的package.json和package-lock.json文件,安裝和升級(jí)表現(xiàn)是不同的。

使用npm3的結(jié)論:

  • 如果本地 node_modules 已安裝,再次執(zhí)行 install 不會(huì)更新包版本, 執(zhí)行 update 才會(huì)更新; 而如果本地 node_modules 為空時(shí),執(zhí)行 install/update 都會(huì)直接安裝更新包。
  • npm update 總是會(huì)把包更新到符合 package.json 中指定的 semver 的最新版本號(hào)——本例中符合 ^1.8.0 的最新版本為 1.15.0
  • 一旦給定 package.json, 無(wú)論后面執(zhí)行 npm install 還是 update, package.json 中的 webpack 版本一直頑固地保持 一開始的 ^1.8.0 巋然不動(dòng)

使用npm5的結(jié)論:

  • 無(wú)論何時(shí)執(zhí)行 install, npm 都會(huì)優(yōu)先按照 package-lock 中指定的版本來(lái)安裝 webpack; 避免了 npm 3 表中情形 b) 的狀況;
  • 無(wú)論何時(shí)完成安裝/更新, package-lock 文件總會(huì)跟著 node_modules 更新 —— (因此可以視 package-lock 文件為 node_modules 的 JSON 表述)
  • 已安裝 node_modules 后若執(zhí)行 npm update,package.json 中的版本號(hào)也會(huì)隨之更改為 ^1.15.0

4.3 最佳實(shí)踐

我常用的node是8.11.x,npm是5.6.0。

  • 使用npm >= 5.1 版本,保持package-lock.json文件默認(rèn)開啟配置。
  • 初始化,npm i 安裝依賴包,默認(rèn)保存^X.Y.Z,項(xiàng)目提交package.json和package-lock.json。
  • 不要手動(dòng)修改package-lock.json

升級(jí)依賴包:

  • 升級(jí)小版本,執(zhí)行npm update升級(jí)到新的小版本。
  • 升級(jí)大版本,執(zhí)行npm install @ 升級(jí)到新的大版本。
  • 手動(dòng)修改package.json中的版本號(hào),然后npm i。
  • 本地驗(yàn)證升級(jí)新版本后沒(méi)有問(wèn)題,提交新的package.json和package-lock.json文件。

降級(jí)依賴包:

  • 正確:npm i @驗(yàn)證沒(méi)有問(wèn)題后,提交package.json和package-lock.json文件。
  • 錯(cuò)誤:修改package.json中的版本號(hào),執(zhí)行npm i不會(huì)生效。因?yàn)閜ackage-lock.json鎖定了版本。

刪除依賴包:

  • A計(jì)劃:npm uninstall 。提交package.json和package-lock.json。
  • B計(jì)劃:在package.json中刪除對(duì)應(yīng)的包,然后執(zhí)行npm i,提交package.json和package-lock.json。

五、npm的sctipts

5.1 基本使用

npm scripts是npm的一個(gè)重要的特性。在package.json中scripts字段定義一個(gè)腳本。

比如:

  1.     "scripts": { 
  2.         "echo""echo HELLO WORLD" 
  3.     } 

我們可以通過(guò)npm run echo 命令執(zhí)行這段腳本,就像shell中執(zhí)行echo HELLO WOLRD,終端是可以看到輸出的。

總結(jié)如下:

  • npm run 命令執(zhí)行時(shí),會(huì)把./node_modules/.bin目錄添加到執(zhí)行環(huán)境的PATH變量中。全局的沒(méi)有安裝的包,在node_modules中安裝了,通過(guò)npm run 可以調(diào)用該命令。
  • 執(zhí)行npm 腳本時(shí)要傳入?yún)?shù),需要在命令后加 -- 表明,比如 npm run test -- --grep="pattern" 可以將--grep="pattern"參數(shù)傳給test命令。
  • npm 還提供了pre和post兩種鉤子的機(jī)制,可以定義某個(gè)腳本前后的執(zhí)行腳本。
  • 運(yùn)行時(shí)變量:npm run 的腳本執(zhí)行環(huán)境內(nèi),可以通過(guò)環(huán)境變量的方式獲取更多的運(yùn)行相關(guān)的信息。可以通過(guò)process.env對(duì)象訪問(wèn)獲得:
  • npm_lifecycle_event:正在運(yùn)行的腳本名稱
  • npm_package_:獲取當(dāng)前package.json中某一個(gè)字段的匹配值:如包名npm_package_name
  • npm_package__:package中的嵌套字段。

5.2 node_modules/.bin目錄

保存了依賴目錄中所安裝的可供調(diào)用的命令行包。本質(zhì)是一個(gè)可執(zhí)行文件到指定文件源的映射。

例如 webpack 就屬于一個(gè)命令行包。如果我們?cè)诎惭b webpack 時(shí)添加 --global 參數(shù),就可以在終端直接輸入 webpack 進(jìn)行調(diào)用。

上一節(jié)所說(shuō),npm run 命令在執(zhí)行時(shí)會(huì)把 ./node_modules/.bin 加入到 PATH 中,使我們可直接調(diào)用所有提供了命令行調(diào)用接口的依賴包。所以這里就引出了一個(gè)最佳實(shí)踐:

•將項(xiàng)目依賴的命令行工具安裝到項(xiàng)目依賴文件夾中,然后通過(guò) npm scripts 調(diào)用;而非全局安裝

于是 npm 從5.2 開始自帶了一個(gè)新的工具 npx.

5.3 npx

npx 的使用很簡(jiǎn)單,就是執(zhí)行 npx 即可,這里的 默認(rèn)就是 ./node_modules 目錄中安裝的可執(zhí)行腳本名。例如上面本地安裝好的 webpack 包,我們可以直接使用 npx webpack 執(zhí)行即可。

5.4 用法

1、傳入?yún)?shù)

  1. "scripts": { 
  2.   "serve""vue-cli-service serve"
  3.   "serve1""vue-cli-service --serve1"
  4.   "serve2""vue-cli-service -serve2"
  5.   "serve3""vue-cli-service serve --mode=dev --mobile -config build/example.js" 

除了第一個(gè)可執(zhí)行的命令,以空格分割的任何字符串都是參數(shù),并且都能通過(guò)process.argv屬性訪問(wèn)。

比如執(zhí)行npm run serve3命令,process.argv的具體內(nèi)容為:

  1. '/usr/local/Cellar/node/7.7.1_1/bin/node'
  2.   '/Users/mac/Vue-projects/hao-cli/node_modules/.bin/vue-cli-service'
  3.   'serve'
  4.   '--mode=dev'
  5.   '--mobile'
  6.   '-config'
  7.   'build/example.js' 

2、多命令運(yùn)行 在啟動(dòng)時(shí)可能需要同時(shí)執(zhí)行多個(gè)任務(wù),多個(gè)任務(wù)的執(zhí)行順序決定了項(xiàng)目的表現(xiàn)。

(1)串行執(zhí)行

串行執(zhí)行,要求前一個(gè)任務(wù)執(zhí)行成功之后才能執(zhí)行下一個(gè)任務(wù)。使用 && 服務(wù)來(lái)連接。

  1. npm run scipt1 && npm run script2 

串行執(zhí)行命令,只要一個(gè)命令執(zhí)行失敗,整個(gè)腳本會(huì)中止的。

(2)并行執(zhí)行

并行執(zhí)行,就是多個(gè)命令同時(shí)平行執(zhí)行,使用 & 符號(hào)來(lái)連接。

  1. npm run script1 & npm run script2 

3、env 環(huán)境變量 在執(zhí)行npm run腳本時(shí),npm會(huì)設(shè)置一些特殊的env環(huán)境變量。其中package.json中的所有字段,都會(huì)被設(shè)置為以npm_package_ 開頭的環(huán)境變量。

4、指令鉤子 在執(zhí)行npm scripts命令(無(wú)論是自定義還是內(nèi)置)時(shí),都經(jīng)歷了pre和post兩個(gè)鉤子,在這兩個(gè)鉤子中可以定義某個(gè)命令執(zhí)行前后的命令。比如在執(zhí)行npm run serve命令時(shí),會(huì)依次執(zhí)行npm run preserve、npm run serve、npm run postserve,所以可以在這兩個(gè)鉤子中自定義一些動(dòng)作:

  1. "scripts": { 
  2.   "preserve""xxxxx"
  3.   "serve""cross-env NODE_ENV=production webpack"
  4.   "postserve""xxxxxx" 

5、常用腳本示例

  1. // 刪除目錄 
  2. "clean""rimraf dist/*"
  3. // 本地搭建一個(gè)http服務(wù) 
  4. "server""http-server -p 9090 dist/"
  5. // 打開瀏覽器 
  6. "open:dev""opener http://localhost:9090"
  7. // 實(shí)時(shí)刷新 
  8. "livereload""live-reload --port 9091 dist/"
  9. // 構(gòu)建 HTML 文件 
  10. "build:html""jade index.jade > dist/index.html"
  11. // 只要 CSS 文件有變動(dòng),就重新執(zhí)行構(gòu)建 
  12. "watch:css""watch 'npm run build:css' assets/styles/"
  13. // 只要 HTML 文件有變動(dòng),就重新執(zhí)行構(gòu)建 
  14. "watch:html""watch 'npm run build:html' assets/html"
  15. // 部署到 Amazon S3 
  16. "deploy:prod""s3-cli sync ./dist/ s3://example-com/prod-site/"
  17. // 構(gòu)建 favicon 
  18. "build:favicon""node scripts/favicon.js"

六.npm配置

6.1 npm config

  • 通過(guò)npm config ls -l 可查看npm 的所有配置,包括默認(rèn)配置。
  • 通過(guò)npm config set ,常見配置:
  • proxy,https-proxy:指定npm使用的代理
  • registry:指定npm下載安裝包時(shí)的源,默認(rèn)是https://registry.npmjs.org。可以指定私有的registry源。
  • package-lock.json:指定是否默認(rèn)生成package-lock.json,建議保持默認(rèn)true。
  • save :true/false指定是否在npm i之后保存包為dependencies,npm5開始默認(rèn)為true。
  • 通過(guò)npm config delete 刪除指定的配置項(xiàng)。

6.2 npmrc文件

可以通過(guò)刪除npm config命令修改配置,還可以通過(guò)npmrc文件直接修改配置。

npmrc文件優(yōu)先級(jí)由高到低,包括:

  • 工程內(nèi)配置文件:項(xiàng)目根目錄下的.npmrc文件
  • 用戶級(jí)配置文件:用戶配置里
  • 全局配置文件
  • npm內(nèi)置配置文件 我們可以在自己的團(tuán)隊(duì)中在根目錄下創(chuàng)建一個(gè).npmrc文件來(lái)共享需要在團(tuán)隊(duì)中共享的npm運(yùn)行相關(guān)配置。

比如:我們?cè)诠緝?nèi)網(wǎng)下需要代理才能訪問(wèn)默認(rèn)源:https://registry.npmjs.org源;或者訪問(wèn)內(nèi)網(wǎng)的registry,就可以在工作項(xiàng)目下新增.npmrc文件并提交代碼庫(kù)。

示例配置:

  1. proxy = http://proxy.example.com/ 
  2. https-proxy = http://proxy.example.com/ 
  3. registry = http://registry.example.com/ 

這種在工程內(nèi)配置文件的優(yōu)先級(jí)最高,作用域在這個(gè)項(xiàng)目下,可以很好的隔離公司項(xiàng)目和學(xué)習(xí)研究的項(xiàng)目?jī)煞N不同環(huán)境。

將這個(gè)功能與 ~/.npm-init.js 配置相結(jié)合,可以將特定配置的 .npmrc 跟 .gitignore, README 之類文件一起做到 npm init 腳手架中,進(jìn)一步減少手動(dòng)配置。

6.3 node版本約束

一個(gè)團(tuán)隊(duì)中共享了相同的代碼,但是每個(gè)人開發(fā)機(jī)器不一致,使用的node版本也不一致,服務(wù)端可能與開發(fā)環(huán)境不一致。

  • 這就帶來(lái)了不一致的因素----方案:聲明式約束+腳本限制。
  • 聲明:通過(guò)package.json的engines屬性聲明應(yīng)用運(yùn)行所需的版本要求。例如我呢項(xiàng)目中使用了async,await特性,得知node查閱兼容表格[1]得知最低支持版本是7.6.0.因此指定engines配置為:
  1.   "engines": {"node"">=7.6.0"
  • 強(qiáng)約束(可選):需要添加強(qiáng)約束,需要自己寫腳本鉤子,讀取并解析engines字段的semver range并與運(yùn)行環(huán)境做比對(duì)校驗(yàn)并適當(dāng)提醒。

總結(jié)

  • npm init初始化新項(xiàng)目
  • 統(tǒng)一項(xiàng)目配置:需要團(tuán)隊(duì)共享npm config配置項(xiàng),固化到.npmrc文件中
  • 統(tǒng)一運(yùn)行環(huán)境:統(tǒng)一package.json,統(tǒng)一package-lock.json文件。
  • 合理使用多樣化的源安裝依賴包
  • 使用npm版本:>= 5.2版本
  • 使用npm scripts和npx管理相應(yīng)腳本
  • 安全漏洞檢查:npm audit fix修復(fù)安全漏洞的依賴包(本質(zhì):自動(dòng)更新到兼容的安全版本)

引用鏈接

[1] node查閱兼容表格: https://node.green/

 

責(zé)任編輯:姜華 來(lái)源: 松寶寫代碼
相關(guān)推薦

2022-02-18 08:54:21

docker操作系統(tǒng)Linux

2021-08-26 05:27:08

Base64 字節(jié)流算法

2021-05-20 06:57:16

RabbitMQ開源消息

2022-05-05 07:40:07

maskCSS

2023-05-12 08:19:12

Netty程序框架

2021-07-14 08:24:23

TCPIP 通信協(xié)議

2021-07-28 10:02:54

建造者模式代碼

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2021-11-08 08:42:44

CentOS Supervisor運(yùn)維

2021-11-24 08:51:32

Node.js監(jiān)聽函數(shù)

2021-08-02 06:34:55

Redis刪除策略開源

2021-12-15 11:52:34

GPLLinuxGNU

2021-06-24 10:24:57

Linux輸入輸出設(shè)備Interface

2022-04-13 21:19:56

Prometheusruler 組件

2021-02-02 18:39:05

JavaScript

2021-01-29 18:41:16

JavaScript函數(shù)語(yǔ)法

2022-02-23 09:36:11

GoRuby編程語(yǔ)言

2021-07-08 06:30:03

Linux CPULinux 系統(tǒng)

2021-06-04 09:56:01

JavaScript 前端switch

2020-11-10 10:48:10

JavaScript屬性對(duì)象
點(diǎn)贊
收藏

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

精品日韩欧美一区| 欧产日产国产精品视频| 精品写真视频在线观看| 欧美日本高清一区| 国产ts丝袜人妖系列视频| 欧美性猛交xxx高清大费中文| 亚洲国产成人一区二区三区| 亚洲最大的免费| 国产做受高潮漫动| 国产精品成人一区二区不卡| 亚洲国产精品小视频| 四季av一区二区| 黄色网页在线免费看| proumb性欧美在线观看| 国产在线观看精品| 国产欧美日韩另类| 91精品国产自产拍在线观看蜜| 精品国产在天天线2019| 国产理论在线播放| av资源新版天堂在线| 国产精品午夜免费| 国产一区在线观| 一区二区三区午夜| 先锋亚洲精品| 色综合久久88色综合天天看泰| 五月开心播播网| 亚洲国产一区二区久久| 91精品久久久久久综合五月天| 亚洲一区二区三区四区在线| 欧美一区二区三区四区夜夜大片| 国产哺乳奶水91在线播放| 免播放器亚洲| 欧美激情国产精品| 成人一级片免费看| 日韩人体视频| 日韩欧美一级片| gai在线观看免费高清| 人成在线免费网站| 一区二区高清免费观看影视大全| 亚洲成人午夜在线| 亚洲人视频在线观看| 国产精品77777竹菊影视小说| 国产精品日韩电影| 69视频免费在线观看| 在线精品国产| 色七七影院综合| 亚洲av综合一区二区| 国产一级成人av| 日韩欧美综合一区| 深夜做爰性大片蜜桃| 嫩草伊人久久精品少妇av杨幂| 欧美日韩国产在线| www.日本在线播放| 欧美xxxx少妇| 悠悠色在线精品| 国产高清免费在线| 免费日本一区二区三区视频| 国产欧美日韩精品a在线观看| 精品高清视频| 性xxxfllreexxx少妇| 成人一区二区视频| 99久久久精品免费观看国产| 国产jzjzjz丝袜老师水多| 精品一区二区三区免费| 成人疯狂猛交xxx| 91麻豆成人精品国产| 麻豆国产欧美一区二区三区| 国产成人涩涩涩视频在线观看| 高清乱码免费看污| 久久一区亚洲| 国产精品久久久久久久久久小说| 国产精品久久久久久久久夜色| 久久婷婷麻豆| 国产97在线亚洲| 久久精品视频2| 日本不卡一区二区三区高清视频| 国产精品日韩在线观看| 在线观看毛片av| 国内精品第一页| 亚洲综合一区二区不卡| 欧美 日韩 国产 精品| 成人高清视频在线| 欧美日韩大片一区二区三区| 九色视频在线播放| 国产精品九色蝌蚪自拍| 在线视频福利一区| 青草影视电视剧免费播放在线观看| 亚洲午夜精品一区二区三区他趣| av之家在线观看| 欧美色999| 欧美区视频在线观看| 香蕉网在线视频| 日韩精品一区二区三区中文在线 | 亚洲精品98久久久久久中文字幕| 波多野结衣办公室双飞| 首页亚洲中字| 日韩中文字幕国产| 日本一区二区三区免费视频| 日韩高清欧美激情| 亚洲自拍小视频| 欧美日韩国产综合视频| 亚洲欧洲韩国日本视频| 国产中文字幕乱人伦在线观看| 亚洲色图官网| 91精品国产综合久久久蜜臀粉嫩| 日韩精品一区二区三区高清免费| 欧美限制电影| 久久97久久97精品免视看| 中文字幕第15页| 激情综合色丁香一区二区| 狠狠干一区二区| av在线首页| 香港成人在线视频| 成人亚洲免费视频| 欧美深夜视频| 久久久精品久久久| 日日夜夜狠狠操| 国产经典欧美精品| 色综合久久av| 密臀av在线播放| 91精品国产丝袜白色高跟鞋| 人妻少妇无码精品视频区| 黄色工厂这里只有精品| 国产精品女主播视频| 天天操天天干天天插| 最新日韩av在线| 久久精品网站视频| 国产精品巨作av| 久久精品国产成人精品| 波多野结衣网站| 99久久婷婷国产综合精品电影| av电影一区二区三区| 亚洲成av在线| 日韩电影中文字幕一区| 国产成人精品av久久| 久久99国产精品麻豆| 日本一区高清在线视频| a毛片不卡免费看片| 日韩一区二区三区免费观看| 战狼4完整免费观看在线播放版| 国产视频一区欧美| 国产乱码一区| 美女网站视频在线| 欧美一区二区日韩| 999精品视频在线观看播放| 日日夜夜一区二区| 欧美日韩另类综合| 午夜激情在线播放| 日韩精品视频在线| 你懂的国产视频| 成人黄色a**站在线观看| 国产91在线亚洲| 欧美电影在线观看一区| 久久精品电影网| 一级黄色片在线| 国产精品美女久久久久久久久 | 日本网站在线观看一区二区三区| 免费看污久久久| 周于希免费高清在线观看| 亚洲精品720p| 天天干天天干天天操| 99re这里都是精品| 国产免费成人在线| 免费成人av| 国产精品久久久亚洲| 国产视频网站在线| 欧美日韩一区二区三区四区| 国产一二三四视频| 国内成人免费视频| 337p亚洲精品色噜噜狠狠p| 日韩在线成人| 久久久欧美精品| 色欲av永久无码精品无码蜜桃 | 极品久久久久久| 国产高清不卡一区| 久久久久久www| 日韩有码中文字幕在线| 国产97免费视| 日本在线视频站| 欧美一级在线免费| 国产一级一片免费播放放a| av电影在线观看完整版一区二区| 尤物av无码色av无码| 国产精选一区| 国产日韩在线看片| 色www永久免费视频首页在线 | 欧洲一级在线观看| 欧美日韩另类一区| 免费无码毛片一区二区app| 99麻豆久久久国产精品免费优播| 中文字幕无码不卡免费视频| 久久精品不卡| 痴汉一区二区三区| 日日夜夜天天综合| 欧美老少配视频| 日本大片在线观看| 欧美日韩久久不卡| 国产亚洲精品码| 国产喂奶挤奶一区二区三区| 亚洲天堂av一区二区| 99精品免费| 亚洲一区二区四区| 欧美成人午夜77777| 国产精品一区久久久| av毛片午夜不卡高**水| 色婷婷久久一区二区| 天堂v在线观看| 欧美日韩高清在线| 日本三级午夜理伦三级三| 中文字幕不卡三区| 亚洲第九十七页| 国产综合色在线视频区| 男人靠女人免费视频网站 | 丁香色欲久久久久久综合网| 国产91精品对白在线播放| 91九色在线观看| 成人免费一区| 91精品国产高清久久久久久91| 日p在线观看| 国产午夜精品麻豆| 亚洲成人一级片| 欧美日韩卡一卡二| 成人午夜淫片100集| 亚洲一区自拍偷拍| 女同久久另类69精品国产| 91日韩一区二区三区| 亚洲成人精品在线播放| 久久激情五月激情| 国产xxxxx视频| 亚洲欧洲视频| 国产1区2区3区中文字幕| 欧美激情黄色片| 日本在线成人一区二区| 免费福利视频一区| 粉嫩高清一区二区三区精品视频 | 日韩精品xxx| 久久国产福利国产秒拍| 日韩无套无码精品| 中文日韩在线| 婷婷无套内射影院| 欧美高清日韩| 黄色小视频大全| 91精品久久久久久久久久不卡| 亚洲电影免费| 欧美久久精品一级c片| 日本不卡二区高清三区| 亚洲va久久| 久久久久久久有限公司| 看全色黄大色大片免费久久久| 国产精品v欧美精品v日韩精品 | 精品乱码一区| 韩国女主播一区二区三区| www久久99| 视频精品一区二区三区| 97在线电影| 深夜激情久久| 成人9ⅰ免费影视网站| 日韩精品视频中文字幕| 成人h视频在线观看| 亚洲精品影片| 高清不卡一区二区三区| 国产精品香蕉| 久久久亚洲综合网站| 免费成人高清在线视频theav| 欧美日韩三区四区| 国产一区二区三区91| 日韩欧美亚洲日产国| 日本欧美视频| 在线观看日韩片| 中文字幕日韩欧美精品高清在线| 久久久无码中文字幕久...| 国产精品99一区二区| 亚洲精品蜜桃久久久久久| 中文精品视频| 爱情岛论坛成人| 韩国av一区二区三区四区| 亚洲av无码久久精品色欲| 成人毛片老司机大片| 国产精品无码毛片| 国产精品网站在线观看| 91日韩中文字幕| 亚洲一区二区三区小说| 日韩人妻精品中文字幕| 欧美视频你懂的| 精品久久久久成人码免费动漫| 精品电影一区二区| 日本福利片在线| 久久天天躁狠狠躁夜夜躁| 岛国毛片av在线| 庆余年2免费日韩剧观看大牛| 成人国产在线| 国产精品.com| 菠萝蜜一区二区| 色一情一乱一乱一区91| 国产视频久久| 国产精品嫩草影院8vv8| av激情综合网| 日韩免费av一区| 亚洲成人一区在线| 中文字幕第一页在线播放| 日韩欧美激情在线| 九色视频网站在线观看| 美女视频久久黄| 欧美成人资源| 国产传媒一区二区三区| 超碰成人久久| 黄色国产一级视频| 韩国精品久久久| 成年人免费观看视频网站| 亚洲伦在线观看| 高潮毛片又色又爽免费| 日韩亚洲欧美一区| 午夜免费视频在线国产| 91精品国产精品| 精品久久久久久久久久岛国gif| 免费在线国产精品| 午夜亚洲福利| 午夜宅男在线视频| 久久女同精品一区二区| 妺妺窝人体色www婷婷| 欧美日韩国产片| 色视频在线观看| 久久久久久网站| 99久久999| 先锋影音亚洲资源| 久久久久久亚洲精品杨幂换脸| 中文字幕avav| 国产精品久久毛片| 欧美brazzers| 亚洲国产成人91精品| 99福利在线| 国产日韩av在线| 国产一区二区观看| 欧美色图另类小说| 成人av片在线观看| 日本天堂中文字幕| 555www色欧美视频| 尤物视频在线免费观看| 国产成人精品视频| 欧美a一欧美| 久久黄色片视频| 成人免费视频caoporn| 全程偷拍露脸中年夫妇| 91精品午夜视频| 色网站免费在线观看| 国产精品视频不卡| 国精一区二区| 青青青国产在线视频| 久久久www免费人成精品| 青青草av在线播放| 日韩精品视频在线播放| 国产h片在线观看| 国产欧美丝袜| 在线午夜精品| 国产精品亚洲无码| 91国偷自产一区二区三区成为亚洲经典| 天堂中文在线看| 69久久夜色精品国产7777| 欧美a级网站| 91免费视频网站在线观看| 99久精品国产| 日本视频在线观看免费| 亚洲人成电影网站| 亚洲精品国产嫩草在线观看| 日韩国产在线一区| 久久成人免费日本黄色| 永久免费看mv网站入口| 日韩色视频在线观看| 日本在线观看高清完整版| 国产精品免费一区二区| 一区二区三区福利| 亚洲a v网站| 欧美日韩精品免费| av网站大全在线| 成人国产一区二区| 国产精品日本欧美一区二区三区| 3d动漫精品啪啪一区二区下载 | 欧美a在线视频| 久久综合九色欧美综合狠狠| 亚洲性猛交富婆| 欧美精品一二区| 色爱综合av| 亚洲天堂网一区| 一区二区在线观看视频| 色屁屁草草影院ccyycom| 日本欧美在线视频| 99久久影视| 亚洲精品鲁一鲁一区二区三区| 都市激情亚洲色图| 五月天婷婷在线视频| 国产精品久久久久久免费观看 | 日韩三区视频| 欧美第一页浮力影院| 一区二区三区国产| 青春草在线观看| 亚洲999一在线观看www| 亚洲综合不卡| 永久免费看片直接| 亚洲欧美国产另类| 国产一区精品二区|