久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

webpack高級配置與優化詳解

瀏覽:287日期:2022-06-02 17:22:09

所謂打包多頁面,就是同時打包出多個 html 頁面,打包多頁面也是使用 html-webpack-plugin,只不過,在引入插件的時候是創建多個插件對象,因為一個html-webpack-plugin 插件對象只能打包出一個 html 頁面。如:

module.exports = {
 entry: {
  index: "./src/index.js", // 指定打包輸出的chunk名為index
  foo: "./src/foo.js" // 指定打包輸出的chunk名為foo
 },
 plugins: [
  new HtmlWebpackPlugin({
   template: "./src/index.html", // 要打包輸出哪個文件,可以使用相對路徑
   filename: "index.html", // 打包輸出后該html文件的名稱
   chunks: ["index"] // 數組元素為chunk名稱,即entry屬性值為對象的時候指定的名稱,index頁面只引入index.js
  }),
  new HtmlWebpackPlugin({
   template: "./src/index.html", // 要打包輸出哪個文件,可以使用相對路徑
   filename: "foo.html", // 打包輸出后該html文件的名稱
   chunks: ["foo"] // 數組元素為chunk名稱,即entry屬性值為對象的時候指定的名稱,foo頁面只引入foo.js
  }),
 ]
}

打包多頁面時,關鍵在于 chunks 屬性的配置,因為在沒有配置 chunks 屬性的情況下,打包輸出的 index.html 和 foo.html 都會同時引入 index.js 和 foo.js。

所以必須配置 chunks 屬性,來指定打包輸出后的 html 文件中要引入的輸出模塊,數組的元素為 entry 屬性值為對象的時候指定的 chunk 名,如上配置,才能實現,index.html 只引入 index.js,foo.html 只引入 foo.js 文件

二、配置 source-map

source-map 就是源碼映射,主要是為了方便代碼調試,因為我們打包上線后的代碼會被壓縮等處理,導致所有代碼都被壓縮成了一行,如果代碼中出現錯誤,那么瀏覽器只會提示出錯位置在第一行,這樣我們無法真正知道出錯地方在源碼中的具體位置。webpack 提供了一個 devtool 屬性來配置源碼映射。

let foo = 1;
console.lg(`console對象的方法名log寫成了lg`); // 源文件第二行出錯
index.js:1 Uncaught TypeError: console.lg is not a function
 at Object.<anonymous> (index.js:1)
 at o (index.js:1)
 at Object.<anonymous> (index.js:1)
 at o (index.js:1)
 at index.js:1
 at index.js:1

源碼中出錯的位置明明是第二行代碼,而瀏覽器中提示的錯誤確實在第一行,所以如果代碼很復雜的情況下,我們就無法找到出錯的具體位置

devtool 常見的有 6 種配置:

1、source-map: 這種模式會產生一個.map文件,出錯了會提示具體的行和列,文件里面保留了打包后的文件與原始文件之間的映射關系,打包輸出文件中會指向生成的.map文件,告訴js引擎源碼在哪里,由于源碼與.map文件分離,所以需要瀏覽器發送請求去獲取.map文件,常用于生產環境,如:

//# sourceMappingURL=index.js.map

2、eval: 這種模式打包速度最快,不會生成.map文件,會使用eval將模塊包裹,在末尾加入sourceURL,常用于開發環境,如:

//# sourceURL=webpack:///./src/index.js

3、eval-source-map: 每個 module 會通過 eval() 來執行,并且生成一個 DataUrl 形式的 SourceMap (即 base64 編碼形式內嵌到 eval 語句末尾), 但是不會生成 .map 文件,可以減少網絡請求*,但是打包文件會非常大*。

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanM/YjYzNSJdLCJuYW1lcyI6WyJmb28iLCJjb25zb2xlIiwibGciXSwibWFwcGluZ3MiOiJBQUFBLElBQUlBLEdBQUcsR0FBRyxDQUFWO0FBQ0FDLE9BQU8sQ0FBQ0MsRUFBUix1RSxDQUFxQyIsImZpbGUiOiIuL3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImxldCBmb28gPSAxO1xuY29uc29sZS5sZyhgY29uc29sZeWvueixoeeahOaWueazleWQjWxvZ+WGmeaIkOS6hmxnYCk7IC8vIOa6kOaWh+S7tuesrOS6jOihjOWHuumUmVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

//# sourceURL=webpack-internal:///./src/index.js

4、cheap-source-map: 加上 cheap,就只會提示到第幾行報錯,少了列信息提示,同時不會對引入的庫做映射,可以提高打包性能,但是會產生 .map 文件。

5、cheap-module-source-map: 和 cheap-source-map 相比,加上了 module,就會對引入的庫做映射,并且也會產生 .map 文件,用于生產環境。

6、cheap-module-eval-source-map: 常用于開發環境,使用 cheap 模式可以大幅提高 souremap 生成的效率,加上 module 同時會對引入的庫做映射,eval 提高打包構建速度,并且不會產生 .map 文件減少網絡請求。

凡是帶 eval 的模式都不能用于生產環境,因為其不會產生 .map 文件,會導致打包后的文件變得非常大。通常我們并不關心列信息,所以都會使用 cheap 模式,但是我們也還是需要對第三方庫做映射,以便精準找到錯誤的位置。

三、watch 和 watchOptions 配置

webpack 可以監聽文件變化,當它們修改后會重新編譯,如果需要開啟該功能,那么需要將 watch 設置為 true,具體監聽配置通過 watchOptions 進行相應的設置。

module.exports = {
 watch: true,
 watchOptions: {
  poll: 1000, // 每隔一秒輪詢一次文件是否發生變化
  aggregateTimeout: 1000, // 當第一個文件更改,會在重新構建前增加延遲。這個選項允許 webpack 將這段時間內進行的任何其他更改都聚合到一次重新構建里
  ignored: /node_modules/ // 排除一些文件的監聽
 }
}

四、三個常見小插件的使用

1、clean-webpack-plugin: 其作用就是每次打包前先先將輸出目錄中的內容進行清空,然后再將打包輸出的文件輸出到輸出目錄中。

const {CleanWebpackPlugin} = require("clean-webpack-plugin");
module.exports = {
 plugins: [
  new CleanWebpackPlugin() // 打包前清空輸出目錄
 ]
}

需要注意的是,require("clean-webpack-plugin)的結果是一個對象而不是類,這個對象中的 CleanWebpackPlugin 屬性才是一個類,我們就是用這個類去創建插件對象。

2、copy-webpack-plugin: 其作用就是打包的時候帶上一些 readMe.md、history.md 等等一起輸出到輸出目錄中。

module.exports = {
 plugins: [
  new CopyWebpackPlugin([
   {
    from: "./readMe.md", // 將項目根目錄下的readMe.md文件一起拷貝到輸出目錄中
    to: "" // 屬性值為空字符串則表示是輸出目錄
   }
  ])
 ]
}

3、BannerPlugin: 其作用就是在打包輸出的 js 文件的頭部添加一些文字注釋,比如版權說明等等,BannerPlugin 是 webpack 內置的插件,如:

module.exports = {
 plugins: [
  new webpack.BannerPlugin("Copyright © 2019") // 在js文件頭部添加版權說明
 ]
}

五、webpack 跨域問題

為什么 webpack 會存在跨域問題?因為 webpack 打包的是前端代碼,其最終會被部署到前端服務器上,而前后端代碼通常部署在不同的服務器上,即使是部署在同一個服務器上,所使用的端口也是不一樣的,當前端代碼通過 ajax 等手段向后端服務器獲取數據的時候,由于前后端代碼不在同一個域中,故存在跨域問題。

比如,我們通過 webpack 的 devServer 來運行部署我們的前端應用代碼,devServer 啟動在 8080 端口上,而前端應用代碼中會通過 ajax 請求后端數據,后端服務器啟動在 3000 端口上。

// index.js
const xhr = new XMLHttpRequest();
// xhr.open("get", "http://localhost:3000/api/test"); // 由于跨域問題無法直接訪問到http://localhost:3000下的資源
xhr.open("get", "/api/test"); // 本來是要訪問http://localhost:3000/api/test
xhr.onreadystatechange = () => {
 if (xhr.readyState === 4) {
  console.log(xhr.responseText);
 }
}
xhr.send();

由于前端代碼是運行在瀏覽器中的,如果在前端代碼中直接通過 ajax 向http://localhost:3000/api/test 發起請求獲取數據,那么由于瀏覽器同源策略的影響,會存在跨域的問題,所以必須訪問 /api/test。但是這樣訪問又會出現 404 問題,因為其實訪問的是 http://localhost:8080/api/test,8080 服務器上是沒有該資源的,解決辦法就是通過 devServer 配置一個代理服務器

module.exports = {
 devServer: {
  proxy: {
   "/api": "http://localhost:3000" // 路徑以/api開頭則代理到localhost:3000上
  }
 }
}

訪問 http://localhost:8080/api/test 

就會被代理到http://localhost:3000/api/test 上,proxy 還支持路徑的重寫,如果 3000 端口服務器上并沒有 /api/test 路徑,只有 /test 路徑,那么就可以對路徑進行重寫,將 /api 替換掉

module.exports = {
 devServer: {
  proxy: {
   "/api": {
    target: "http://localhost:3000",
    pathRewrite: {"/api": ""} // 將/api替換掉
   }
  }
 }
}

訪問 http://localhost:8080/api/test 

就會被代理到 http://localhost:3000/test 上

如果前端只是想 mock 一些數據,并不需要真正的去訪問后臺服務器,那么我們可以通過 devServer 提供的 before 鉤子函數獲取到內置的服務器對象進行處理請求,這個內置的服務器對象就是 webpack 的 devServer 即 8080 端口的 server,因為是在同一個服務器中請求數據所以也不會出現跨域問題。

before(app) { // 此app即webpack的devServer
   app.get("/api/test", (req, res, next) => {
    res.json({name: "even"});
   })
  }

我們還可以不通過 webpack 提供的 devServer 來啟動 webpack,而是使用自己服務器來啟動 webapck。

const express = require("express");
const app = express();
const webpack = require("webpack"); // 引入webpack
const config = require("./webpack.config.js"); // 引入配置文件
const compiler = webpack(config); // 創建webpack的編譯器
const middleWare = require("webpack-dev-middleware"); //引入webpack的中間件
app.use(middleWare(compiler)); // 將compiler編譯器交給中間件處理
app.get("/api/test", (req, res, next) => {
 res.json({name: "lhb"});
});
app.listen(3000);

通過自定義服務器啟動 webpack,這樣 webpack 中的前端代碼請求數據就和服務器的資源在同一個域中了。

六、resolve 配置

resolve 用于配置模塊的解析相關參數的,其屬性值為一個對象。

1、modules: 告訴 webpack 解析模塊時應該搜索的目錄,即 require 或 import 模塊的時候,只寫模塊名的時候,到哪里去找,其屬性值為數組,因為可配置多個模塊搜索路徑,其搜索路徑必須為絕對路徑,比如,src 目錄下面有一個 foo.js 文件和 index.js 文件:

// index.js
const foo = require("./foo"); // 必須寫全foo.js模塊的路徑
// const foo = require("foo"); // resolve.modules中配置了模塊解析路徑為.src目錄,則可用只寫foo即可搜索到foo.js模塊
console.log(foo);
module.exports = {
 resolve: {
  modules: [path.resolve(__dirname, "./src/"), "node_modules"]
 },
}

由于 resolve.modules 中配置了 ./src 目錄作為模塊的搜索目錄,所以 index.js 中可以只寫模塊名即可搜索到 foo.js 模塊

2、alias: 用于給路徑或者文件取別名,當 import 或者 require 的模塊的路徑非常長時,我們可以給該模塊的路徑或者整個路徑名+文件名都設置成一個別名,然后直接引入別名即可找到該模塊,比如,有一個模塊位置非常深

// const foo = require("./a/b/c/foo"); // foo.js在./src/a/b/c/foo.js
// const foo = require("foo"); // foo被映射成了./src/a/b/c/foo.js文件
const foo = require("bar/foo.js"); // bar被映射成了./src/a/b/c/路徑
console.log(foo);
module.exports = {
 resolve: {
  alias: {
   "foo": path.resolve(__dirname, "./src/a/b/c/foo.js"),
   "bar": path.resolve(__dirname, "./src/a/b/c/")
  }
 },
}

需要注意的就是,alias 可以映射文件也可以映射路徑

3、mainFields: 我們的 package.json 中可以有多個字段,用于決定優先使用哪個字段來導入模塊,比如 bootstrap 模塊中含有 js 也含有 css,其 package.json 文件中 main 字段對應的是"dist/js/bootstrap",style 字段中對應的是"dist/css/bootstrap.css",我們可以通過設置 mainFields 字段來改變默認引入,如:

module.exports = {
 resolve: {
  mainFields: ["style", "main"]
 },
}

4、extensions: 用于設置引入模塊的時候,如果沒有寫模塊后綴名,webpack 會自動添加后綴去查找,extensions 就是用于設置自動添加后綴的順序,如:

module.exports = {
 resolve: {
  extensions: ["js", "vue"]
 },
}

如果項目中引入了 foo 模塊,require("./foo"),其會優先找 ./foo.js,如果沒有找到 ./foo.js 則會去找 ./foo.vue 文件

七、設置環境變量

設置環境變量需要用到 webpack 提供的一個內置插件 DefinePlugin 插件,其作用是將一個字符串值設置為全局變量,如:

module.exports = {
 plugins: [
  new webpack.DefinePlugin({
   DEV_MODE: JSON.stringify("development") // 將"development"設置為全局變量DEV_MODE
  }),
 ]
}

這樣配置之后任何一個模塊中都可以直接使用 DEV_MODE 變量了,并且其值為"development",與 ProvidePlugin 有點相似,ProvidePlugin 是將一個模塊注入到所有模塊中,實現模塊不需要引入即可直接使用。

八、webpack 優化

1、noParse: 該配置是作為 module 的一個屬性值,即不解析某些模塊,所謂不解析,就是不去分析某個模塊中的依賴關系,即不去管某個文件是否 import(依賴)了某個文件,對于一些獨立的庫,比如 jquery,其根本不存在依賴關系,jquery 不會去引入其他的庫(要根據自己對某個模塊的了解去判斷是否要解析該模塊),所以我們可以讓 webpack 不去解析 jquery 的依賴關系,提高打包速度,如:

module.exports = {
 module: {
  noParse:/jquery/,//不去解析jquery中的依賴庫
 }
}

noParse 是 module 配置中的一個屬性,其屬性值為一個正則表達式,填入不被解析的模塊名稱。

為了更清楚的展示 noParse 的作用,假設我們在入口文件 index.js 中引入 bar.js 模塊,同時這個 bar.js 模塊中也引入了 foo.js 模塊,foo.js 不再依賴其他模塊了,那么在不使用 noParse 的情況下,webpack 打包的時候,會先去分析 index.js 模塊,發現其引入了 bar.js 模塊,然后接著分析 bar.js 模塊,發現其引入了 foo.js 模塊,接著分析 foo.js 模塊。

Entrypoint index = index.js

[./src/bar.js] 55 bytes {index} [built]

[./src/foo.js] 21 bytes {index} [built]

[./src/index.js] 81 bytes {index} [built]

而此時如果使用了 noParse: /bar/,那么 webpack 打包的時候,會先去分析 index.js 模塊,發現其引入了 bar.js 模塊,但是由于 noParse 的作用,將不再繼續解析 bar.js 模塊了,即不會去分析 bar.js 中引入的 foo.js 模塊了。

Entrypoint index = index.js
[./src/bar.js] 55 bytes {index} [built]
[./src/index.js] 81 bytes {index} [built]

2、exclude: 在 loader 中使用 exclude 排除對某些目錄中的文件處理,即引入指定目錄下的文件時候,不使用對應的 loader 進行處理,exclude 是 loader 配置中的一個屬性,屬性值為正則表達式,如:

module.exports = {
 module: {
  rules: [
   {
    test: /.js$/,
    use: [
     {
      loader: "babel-loader",
      options: {
       presets: ["@babel/preset-env"],
       plugins: ["@babel/plugin-transform-runtime"]
      }
     }
    ],
    exclude: /node_modules/
   }
  ]
 }
}

3、使用 IgnorePlugin 來忽略某個模塊中某些目錄中的模塊引用,比如在引入某個模塊的時候,該模塊會引入大量的語言包,而我們不會用到那么多語言包,如果都打包進項目中,那么就會影響打包速度和最終包的大小,然后再引入需要使用的語言包即可,如:

項目根目錄下有一個 time 包,其中有一個 lang 包,lang 包中包含了各種語言輸出對應時間的 js 文件,time 包下的 index.js 會引入 lang 包下所有的 js 文件,那么當我們引入 time 模塊的時候,就會將 lang 包下的所有 js 文件都打包進去,添加如下配置:

const webpack = require("webpack");
module.exports = {
 plugins: [
  new webpack.IgnorePlugin(/lang/, /time/)
 ]
}

引入 time 模塊的時候,如果 time 模塊中引入了其中的 lang 模塊中的內容,那么就忽略掉,即不引入 lang 模塊中的內容,需要注意的是,這 /time/ 只是匹配文件夾和 time 模塊的具體目錄位置無關,即只要是引入了目錄名為 time 中的內容就會生效。

4、使用 HappyPack:由于在打包過程中有大量的文件需要交個 loader 進行處理,包括解析和轉換等操作,而由于 js 是單線程的,所以這些文件只能一個一個地處理,而 HappyPack 的工作原理就是充分發揮 CPU 的多核功能,將任務分解給多個子進程去并發執行,子進程處理完后再將結果發送給主進程,happypack 主要起到一個任務劫持的作用,在創建 HappyPack 實例的時候要傳入對應文件的 loader,即 use 部分,loader 配置中將使用經過 HappyPack 包裝后的 loader 進行處理,如:

const HappyPack = require("happypack"); // 安裝并引入happypack模塊
module.exports = {
 plugins: [
  new HappyPack({ // 這里對處理css文件的loader進行包裝
   id: "css",// 之前的loader根據具體的id進行引入
   use: ["style-loader","css-loader"],
   threads: 5 // 設置開啟的進程數
  })
 ],
 module: {
  rules: [
   {
    test: /.css$/, // 匹配以.css結尾的文件
    use: ["happypack/loader?id=css"] //根據happypack實例中配置的id引入包裝后的laoder,這里的happyPack的h可以大寫也可以小寫
   }
  ]
 }
}

webpack 要打包的文件非常多的時候才需要使用 happypack 進行優化,因為開啟多進程也是需要耗時間的,所以文件少的時候,使用 happypack 返回更耗時

5、抽離公共模塊: 對于多入口情況,如果某個或某些模塊,被兩個以上文件所依賴,那么可以將這個模塊單獨抽離出來,不需要將這些公共的代碼都打包進每個輸出文件中,這樣會造成代碼的重復和流量的浪費,即如果有兩個入口文件 index.js 和 other.js,它們都依賴了 foo.js,那么如果不抽離公共模塊,那么 foo.js 中的代碼都會打包進最終輸出的 index.js 和 other.js 中去,即有兩份 foo.js 了。抽離公共模塊也很簡單,直接在 optimization 中配置即可,如:

module.exports = {
  splitChunks: { // 分割代碼塊,即抽離公共模塊
   cacheGroups: { // 緩存組
    common: { // 組名為common可自定義
     chunks: "initial",
     minSize: 0, // 文件大小為0字節以上才抽離
     minChunks: 2, // 被引用過兩次才抽離
     name: "common/foo", // 定義抽離出的文件的名稱
    }
   }
  }
}

這樣就會將公共的 foo.js 模塊抽離到 common 目錄下 foo.js 中了,但是如果我們也有多個文件依賴了第三方模塊如 jquery,如果按以上配置,那么 jquery 也會被打包進 foo.js 中,會導致代碼混亂,所以我們希望將 jquery 單獨抽出來,即與 foo.js 分開,我們可以復制一份以上配置,并通過設置抽離代碼權重的方式來實現,即優先抽離出 jquery,如:

module.exports = {
  splitChunks: { // 分割代碼塊,即抽離公共模塊
   cacheGroups: { // 緩存組
    common: { // 組名為common可自定義
     chunks: "initial",
     minSize: 0, // 文件大小為0字節以上才抽離
     minChunks: 2, // 被引用過兩次才抽離
     name: "common/foo", // 定義抽離出的文件的名稱
    },
    verdor: {
     test: /node_modules/,
     priority: 1, // 設置打包權重,即優先抽離第三方模塊
     chunks: "initial",
     minSize: 0, // 文件大小為0字節以上才抽離
     minChunks: 2, // 被引用過兩次才抽離
     name: "common/jquery", // 定義抽離出的文件的名稱
    }
   }
  }
}

這樣就會在 common 目錄下同時抽離出 foo.js 和 jquery.js 了,需要注意的是,代碼的抽離必須是該模塊沒有被排除打包,即該模塊會被打包進輸出 bundle 中,如果第三方模塊已經通過 externals 排除打包,則以上 vendor 配置無效。

6、按需加載,即在需要使用的時候才打包輸出,webpack 提供了 import() 方法,傳入要動態加載的模塊,來動態加載指定的模塊,當 webpack 遇到 import()語句的時候,不會立即去加載該模塊,而是在用到該模塊的時候,再去加載,也就是說打包的時候會一起打包出來,但是在瀏覽器中加載的時候并不會立即加載,而是等到用到的時候再去加載,比如,點擊按鈕后才會加載某個模塊,如:

const button = document.createElement("button");
button.innerText = "點我"
button.addEventListener("click", () => { // 點擊按鈕后加載foo.js
 import("./foo").then((res) => { // import()返回的是一個Promise對象
  console.log(res);
 });
});
document.body.appendChild(button);

從中可以看到,import() 返回的是一個 Promise 對象,其主要就是利用 JSONP 實現動態加載,返回的 res 結果不同的 export 方式會有不同,如果使用的 module.exports 輸出,那么返回的 res 就是 module.exports 輸出的結果;如果使用的是 ES6 模塊輸出,即 export default 輸出,那么返回的 res 結果就是 res.default,如:

// ES6模塊輸出,res結果為
{default: "foo", __esModule: true, Symbol(Symbol.toStringTag): "Module"}

7、開啟模塊熱更新: 模塊熱更新可以做到在不刷新網頁的情況下,更新修改的模塊,只編譯變化的模塊,而不用全部模塊重新打包,大大提高開發效率,在未開啟熱更新的情況下,每次修改了模塊,都會重新打包。

要開啟模塊熱更新,那么只需要在 devServer 配置中添加 hot:true 即可。當然僅僅開啟模塊熱更新是不夠的,我們需要做一些類似監聽的操作,當監聽的模塊發生變化的時候,重新加載該模塊并執行,如:

module.exports = {
 devServer: {
  hot: true // 開啟熱更新
 }
}
----------
import foo from "./foo";
console.log(foo);
if (module.hot) {
 module.hot.accept("./foo", () => { // 監聽到foo模塊發生變化的時候
  const foo = require("./foo"); // 重新引入該模塊并執行
  console.log(foo);
 });
}

更多關于webpack配置車優化的文章請點擊下面的相關文章

標簽: CSS HTML
主站蜘蛛池模板: 91嫩草在线 | 免费一区二区三区 | 91视频在线免费观看 | 日本二区视频 | 国产aⅴ一区二区 | 欧美精品xx | 91看片 | 蜜桃免费视频 | 国产亚洲成av人片在线观看桃 | www.色综合| 国产精品成人国产乱一区 | 91精品麻豆日日躁夜夜躁 | 国产亚洲一区二区精品 | 欧美精品三区 | 米奇狠狠狠狠8877 | 欧美性猛交一区二区三区精品 | 国产中文字幕在线 | 免费啪啪网站 | 成年人网站免费在线观看 | 欧美成年黄网站色视频 | av中文字幕在线播放 | 国产成人综合在线 | 亚洲精品视频网 | 美女又黄又免费 | 国产日产精品一区二区三区四区 | 亚洲午夜精品在线观看 | 欧美精品一区二区三区在线 | 国产a视频| 国产欧美一区二区精品性色 | 亚洲激情在线播放 | 欧美日韩在线免费观看 | 国产精品久久国产精品 | 国产精品揄拍一区二区久久国内亚洲精 | 午夜精品一区二区三区在线观看 | 日韩成人在线视频 | 国内精品一区二区 | 五月婷婷色 | 久久久精品网 | 欧美猛交ⅹxxx乱大交视频 | 一区在线视频 | 亚洲国产精品区 | 国产成人福利视频 | 一区二区三区影院 | 黄色毛片在线看 | 国产日韩一区二区三区 | 亚洲免费视频在线 | 精品在线一区 | 人人干美女 | 日韩成人精品视频在线观看 | 久久伊人久久 | 国产精品毛片一区视频播 | 在线视频a | 青青草免费在线视频 | 午夜精品一区二区三区免费视频 | 国产 高清 在线 | 国产高清在线精品一区二区三区 | 毛片入口 | 日韩一二区视频 | 色婷婷国产精品综合在线观看 | 久久久久久亚洲精品 | 欧美色综合 | 在线观看你懂的网站 | 国产福利一区二区 | 久久精品久久久 | 亚洲毛片 | 日本免费xxxx| 黄色影视在线免费观看 | 亚洲欧洲中文日韩 | 成人免费精品 | 超级碰在线视频 | 久久99深爱久久99精品 | 99热在线播放 | 日韩综合区 | 欧美日韩精品一区 | 成人久久精品 | 亚洲国产精品久久久久秋霞不卡 | 国产在视频一区二区三区吞精 | 欧美日韩国产一区二区三区不卡 | 国产三级自拍 | 日本亚洲欧美 | 日韩中文在线视频 | 成人视屏在线观看 | av日韩在线播放 | 亚洲欧美综合 | www.国产欧美| 午夜视频 | 91黄色免费看 | 天天色天天色 | 欧美手机在线 | 日本一级中文字幕久久久久久 | 羞羞视频免费网站 | 亚洲综合首页 | 日韩1区3区4区第一页 | 亚洲激情久久 | 999精品视频 | 99看片| 一级毛片一级毛片一级毛片 | www伊人 | 亚洲视频精品 | 亚洲国产高清视频 | 国产成人精品亚洲日本在线观看 | 亚洲午夜激情网 | 国产精品日韩一区二区 | 日韩精品在线一区 | 国产淫片在线观看 | 91免费在线视频 | 日韩免费一区二区 | 国产精品视频不卡 | 日韩成人影院 | 欧美永久精品 | 国产成人精品一区二区三区视频 | 最近中文字幕免费观看 | 国产网站在线 | 亚洲一区二区三区 | 亚洲午夜精品一区二区三区 | 欧美成在线视频 | 日本免费xxxx | 久久成人综合 | 国产精品免费观看 | 国产精品香蕉 | 欧美伦理一区二区 | 99免费看 | 国产做a爱片久久毛片 | 国产第99页 | 久久一二 | 狠狠色综合久久丁香婷婷 | av国产精品 | 色花av| 青青久草 | 国产美女一区二区 | 日韩精品小视频 | 国产精品原创巨作av | 久久成人免费视频 | 亚洲永久精品www | 精品国产乱码久久久久久1区2区 | 黑人精品视频 | 精品久久久久久久久久 | 欧美成人精品一区二区 | 99国产精品久久久久久久久久 | 一区二区三区精品视频 | a中文在线 | 欧日韩不卡在线视频 | 国产视频亚洲精品 | a在线观看免费视频 | 污片在线免费看 | 午夜av影视 | 亚洲精品久久久一区二区三区 | 99r在线 | 国产成人午夜 | 国产在线精品视频 | 欧美怡红院视频一区二区三区 | 亚洲欧美在线一区 | 日本久久精品电影 | 国产在线精品一区二区 | 天天综合7799精品影视 | 国产最新精品视频 | 亚洲精品一区国产精品 | 亚洲国产成人精品女人 | 欧美一区二区三区在线观看视频 | 日韩欧美在线视频观看 | 免费av播放 | 精品国产31久久久久久 | 久久国产综合 | 在线观看日韩av | 久久国产精品无码网站 | 国产三级自拍 | av在线天堂 | 一区二区三区国产免费 | 日本中文字幕一区 | 欧美日韩大片在线观看 | 亚洲乱码国产乱码精品精的特点 | 人人射人人干 | 在线成人av | 日韩综合| 国产一区二区三区四区在线观看 | 亚洲午夜性视频 | 欧美videosex性欧美黑吊 | 日本69视频| 日韩一级电影在线 | 中文字幕三区 | 欧美三级在线 | 国产成人一区 | 国产日韩精品视频 | 天天插狠狠插 | 色在线免费视频 | 99精品国产高清一区二区麻豆 | 久久爱综合网 | 黄色在线免费看 | 成人精品鲁一区一区二区 | 久久精品一区二区三区不卡牛牛 | 成人福利在线观看 | 国产另类ts人妖一区二区 | 亚洲一区精品在线 | 欧美日韩免费在线 | 久久久91精品国产一区二区三区 | 成年视频在线观看福利资源 | 中文字幕二区 | 国产精品三级久久久久久电影 | 影音先锋久久 | 黄色国产视频 | 免费观看国产视频在线 | 国产视频亚洲精品 | 亚州精品天堂中文字幕 | 一区二区蜜桃 | 日日操夜夜操免费视频 | 成人爽a毛片一区二区免费 亚洲自拍偷拍精品 | 17c一起操 | 风间由美一区二区三区在线观看 | 羞羞色影院 | 成人国产一区二区 | 日韩欧美国产网站 | 高清视频一区二区三区 | 成年免费视频 | 国产一二区在线观看 | 国产一区二区精品丝袜 | 影视一区二区 | 国产免费久久 | 成年人精品视频 | 国产精品国产精品国产专区不片 | 91精品国产高清一区二区三区 | 一级一级黄色片 | 国产成人精品在线 | 国产精品日产欧美久久久久 | 91麻豆精品久久久久蜜臀 | 欧美一级裸体视频 | 亚洲欧美日韩精品久久奇米色影视 | 在线观看你懂的网站 | 有码在线| 狠狠综合| 日韩成人一区 | wwwjizz日本 | 91社区在线观看高清 | 久久一二区 | 91精品国产欧美一区二区成人 | 一区二区三区在线视频播放 | 99re在线观看 | 国产91免费在线 | 国产精品国产 | 一级a性色生活片久久毛片明星 | 精品久久久久久 | 久操草 | 精品国产一区二区三区久久久蜜臀 | 狠狠操中文字幕 | 国产片久久 | 国产成人av在线播放 | 一区二区国产精品 | 综合 欧美 亚洲日本 | 国产成人jvid在线播放 | 亚洲一区中文字幕在线观看 | 久久中文字幕视频 | 亚洲一区视频 | 日日干天天操 | 日韩视频在线播放 | 欧美激情自拍偷拍 | 欧日韩免费 | 91精品国产日韩91久久久久久 | 亚洲成av人片一区二区梦乃 | 亚洲伦理影院 | 色婷婷av一区二区三区软件 | aaa在线免费观看 | 亚洲一级淫片 | 黄理论视频 | 欧美日韩久久 | 99精品在线 | 亚洲人网站 | 一区二区三区视频在线免费观看 | 91视频免费看 | 日韩亚洲视频 | 毛片aaa| 成人午夜精品久久久久久久蜜臀 | 九一亚洲精品 | 99精品国产在热久久 | 日韩精品一区二区三区四区视频 | 成人在线小视频 | 91中文在线观看 | 美女操av | 国产伦精品一区二区三区四区视频 | 在线播放高清视频www | 天天干夜夜操 | av不卡在线播放 | 日韩欧美一区二区在线观看 | 久久综合九色综合欧美狠狠 | 亚洲国产精品一区二区三区 | 中文字幕最新在线 | www一区| 久久人人爽人人爽 | 人人干人人干人人 | 久久a视频| 一级免费视频 | 五月激情综合婷婷 | 亚洲无吗视频 | 国产精品一区二区三 | 成人在线网址 | 9 1在线观看| 欧美日韩精品一区二区 | 中文字幕第二十六页页 | 亚洲一区二区三区欧美 | 日韩久久久久久 | 国产浪潮av色综合久久超碰 | 日本成人黄色网址 | 天天综合网久久综合网 | 日韩在线成人 | 六月丁香av| 91国偷自产一区二区三区亲奶 | 犬夜叉在线观看 | 国产精品久久久久久久久久久久 | 山岸逢花在线观看 | 91在线观看视频 | 色综合久久一区二区三区 | 国产高清在线精品一区二区三区 | 一级毛片大全免费播放 | 久草综合在线 | 2020国产在线 | 亚洲免费网 | 欧美一区二区三区在线观看视频 | 狠狠操中文字幕 | 亚洲一区中文字幕 | 日韩在线观看视频一区二区 | 欧美一级片免费观看 | 在线观看国产一区 | 国产四区 | 日韩欧美在线视频免费观看 | 91黄色在线观看 | 日韩精品视频免费专区在线播放 | 欧美三级视频 | 午夜影院在线观看免费 | 欧美不卡视频一区发布 | 91福利视频导航 | 中字幕视频在线永久在线观看免费 | 中文字幕在线影院 | 亚洲人成人一区二区在线观看 | 国产美女自拍视频 | 欧美久久一区二区 | 欧美成人精品一区二区三区在线看 | 亚洲欧洲精品成人久久奇米网 | av天空| 天天艹综合 | 亚洲午夜电影 | 亚洲视频一区二区三区 | 国产日韩精品入口 | 日韩爱爱网址 | 在线看片成人 | 国产高清精品一区二区三区 | 欧美激情在线播放 | 久久久精品电影 | 久久99精品久久久久久久青青日本 | 免费国产一区 | 国产精品99在线观看 | 国产最新精品视频 | 久久久久久久一区二区 | 蜜桃精品视频在线 | 色婷婷久久久久swag精品 | 国产欧美日韩综合精品 | 成人在线观看免费视频 | 欧美自拍视频在线 | 在线观看视频一区 | 一级特黄 | 免费观看毛片 | 欧美成年黄网站色视频 | 精品国产91乱码一区二区三区 | 久久精品国产99国产精2020新增功能 | 日本一区二区三区免费观看 | 中文字幕在线电影 | 日韩视频一区二区三区 | 91精品国产色综合久久不卡98口 | 成人毛片在线视频 | 成人免费影院 | 99re6在线视频精品免费 | 校园春色av | 日韩蜜桃 | 精品久久久久久久久久久久 | 一区在线视频 | 天天天干天天天操 | 久久高清| 成年视频在线观看福利资源 | 国产一级毛片电影 | 久草免费福利 | 国产精品久久久久久婷婷天堂 | 精品久久一区二区 | 久草资源在线视频 | 在线观看你懂的视频 | 久久国产日韩 | www.国产精品.com | 黄色电影在线免费观看 | 精品超碰 | 成年人福利 | 国产精品一码二码三码在线 | 欧美在线观看一区 | 国产男女爽爽爽免费视频 | 国产精品毛片一区二区 | 国产精品自拍av | 九九久久影视 | 日韩中文在线播放 | 亚洲中出 | 欧美日韩国产在线播放 | 欧美一区二区三区四区视频 | 1级毛片| 黄色三级视频 | 日韩一区二区三区在线观看 | 男人电影天堂 | 午夜视频在线观看免费视频 | 国产乱码一区二区三区 | 成人片免费看 | 国产精品毛片久久久久久 | 在线免费黄色小视频 | 成人影音 | 一本一本久久a久久精品综合妖精 | 性培育学校羞耻椅子调教h 欧美精品网站 | 久久亚洲一区二区三区四区五区高 | 一级二级黄色大片 | 日韩城人免费 | 国产精品1页 | www.天天操.com | 欧美激情伊人 | 毛片在线免费 | 九九热在线视频 | 亚洲精品视频在线免费播放 | 久久久久久国产免费 | 日韩在线| 亚洲精品在线播放 | 在线久草 | 国产在线一区不卡 | 久久亚洲视频 | 福利视频一区二区 | 高清国产一区二区三区四区五区 | 国产一区二区免费 | 欧美成人精品一区二区男人看 | 中文字幕精品一区二区三区精品 | 久久成年人视频 | 成人免费视频网站在线看 | 国产精品综合久久 | 欧洲视频一区二区三区 | 亚洲高清网 | 国产精品久久一区 | 日韩素人一区二区三区 | 日韩城人网站 | 久久国内免费视频 | 国产网站在线 | 日韩亚洲| 成人在线免费观看 | 日日夜夜精品免费视频 | 99久久精品免费看国产免费粉嫩 | 风间由美一区二区三区在线观看 | 伊人最新网址 | 男人天堂亚洲天堂 | 亚洲精品欧美精品 | 亚洲午夜精品一区二区三区他趣 | 亚洲精品一区二区另类图片 | 亚洲欧美综合 | 久久国产精品系列 | 免费一级片| 一级毛片视频 | 亚洲精品在线看 | 黄色片在线观看视频 | 精品久久精品久久 | 中文精品一区二区三区 | 特级淫片日本高清视频免费 | 中文字幕亚洲视频 | 另类色| 亚洲成成品网站 | www.久久久| 性欧美大战久久久久久久免费观看 | 国产精品乱码一区二区三区 | 影音先锋亚洲资源 | 欧美日韩精品一区 | 波多野结衣一二三区 | 黄色一级免费观看 | 日韩一区二区在线免费 | 久久69| 亚洲精品一区二区三区蜜桃久 | 久久久久国产精品 | 日日操操| 图片区 国产 欧美 另类 在线 | 国产欧美久久久久久 | 午夜午夜精品一区二区三区文 | 97成人精品视频在线观看 | 国产成人高清视频 | 毛片综合 | 日韩视频区 | 日韩一级视频 | 日韩五月 | 999久久久久久久久 国产欧美在线观看 | 日韩和的一区二区 | 国产精品1区2区 | 日韩在线资源 | 四虎永久免费影院 | 国产视频一区在线 | 欧美激情一区二区三区 | 国产精品视频一区二区三区 | 午夜精品网站 | av网站推荐 | 91精品国产综合久久久久久蜜臀 | 成人av免费| 日韩精品在线视频 | 欧美久久久久久久久久伊人 | 日韩成人在线视频 | 久草视频在线播放 | 久草视| 欧美日韩成人在线视频 | 九九热这里只有 | 亚洲精品日本 | 91av免费 | 免费av播放 | 欧美aaa大片 | 精品96久久久久久中文字幕无 | 国产精久久久久久久妇剪断 | 毛片激情永久免费 | 欧美 日韩 亚洲 一区 | 懂色av一区二区三区在线播放 | 天天干com | 在线观看中文字幕 | 久久久久久久成人 | 黄色国产| 久久久久国产精品视频 | 精品国产青草久久久久福利 | 国产精品久久久久久久久久99 | 国产视频久久久久 | 中文字幕欧美日韩 | 亚洲乱码国产乱码精品精 | 我要看a级毛片 | 成人在线黄色 | 成年人黄色一级毛片 | 婷婷在线观看视频 | 成人欧美日韩一区二区三区 | 亚洲国产精品一区二区www | 亚洲天堂一区 | 成人在线看片网站 | 日韩精品免费在线观看 | 欧美日韩激情在线一区二区三区 | 国产精品视频一二三区 | 欧美一区二区三区黄 | 精品伊人久久 | 国产精品毛片无码 | 婷婷亚洲综合 | 一区二区在线视频 | 美女一区二区三区四区 | 午夜视频网 | 天天干天天曰天天操 | 国产精品1页 | 免费视频成人 | 日夜夜精品视频 | 蜜桃视频一区二区 | 天堂资源最新在线 | 日韩中文一区 | 国产精品福利视频 | 中文字幕 国产 | 午夜精品一区二区三区在线观看 | 欧美日韩一区二区三区 | av黄色在线看 | 久久精品毛片 | 国产精品一区二区三区在线 | 91精品国产综合久久久蜜臀粉嫩 | 国产一区二区自拍视频 | 搞黄免费视频 | 日韩免费视频 | 亚洲视频免费在线 | 亚洲精品日韩综合观看成人91 | 亚洲视频在线播放 | 美女天天操 | 日韩在线视频一区 | 99爱国产| 一级毛片免费播放 | 国产成人99久久亚洲综合精品 | av资源中文在线天堂 | 毛片网站免费在线观看 | 亚洲永久免费 | 国产精品一区亚洲二区日本三区 | 欧美一区二区三区在线 | 亚洲欧美v国产一区二区 | 成人免费影院 | 中文字幕 国产精品 | 国产高清精品一区 | 毛片网站大全 | 欧美一区二区三区在线观看视频 | 日本黄色大片免费看 | 91精品国产乱码久久久久久久久 | 欧美二区在线观看 | av入口 | 在线观看中文 | 一级片av | 亚洲视频中文字幕 | 国产欧美综合一区二区三区 | 日韩视频一区二区三区 | 亚洲精选久久 | 国产日韩欧美视频 | 欧美日韩精品在线一区 | 一区在线观看视频 | 久久99精品久久久久子伦 | 久久久久无码国产精品一区 | 国产一级免费在线 | 亚洲人成网亚洲欧洲无码 | 欧美日韩精品一区 | 欧美成人精品一区 | 精品国产乱码一区二区三 | 天堂√在线观看一区二区 | 日韩成人免费视频 | 日韩精品一区二区三区在线观看 | 91久色| 91精品国产自产91精品 | 人人玩人人干 | 欧美一级片在线观看 | 国产高清一区二区 | 亚洲一区二区三 | 天堂欧美城网站 | 91中文字幕在线 | 亚洲一区二区三区中文字幕 | 国产精品999 | 国产伦精品一区二区三区在线 | 国产一区二区精品在线 | 色人人 | 国产天天操 | 国产午夜精品一区二区三区 | 一区国产精品 | 亚洲午夜剧场 | av三级|