亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

commonChunkplugin配置項詳解

2024-04-27 15:15:33
字體:
來源:轉載
供稿:網友

建議在github閱讀

單入口文件時候不能把引用多次的模塊打印到commonChunkPlugin中

注意:example1(對應于目錄example1,修改webpack.config.js中的配置就可以了,以下例子相同)

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");module.exports = { entry: { main:雖然在example1中chunk2被引用了兩次,但是最終并沒有打包到chunk.js中,我們看看chunk.js中的內容:

/******/ (function(modules) { // webpackBootstrap/******/ // install a JSONP callback for chunk loading/******/ var parentJsonpFunction = window["webpackJsonp"];/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) {/******/ // add "moreModules" to the modules object,/******/ // then flag all "chunkIds" as loaded and fire callback/******/ var moduleId, chunkId, i = 0, callbacks = [];/******/ for(;i < chunkIds.length; i++) {/******/ chunkId = chunkIds[i];/******/ if(installedChunks[chunkId])/******/ callbacks.push.apply(callbacks, installedChunks[chunkId]);/******/ installedChunks[chunkId] = 0;/******/ }/******/ for(moduleId in moreModules) {/******/ modules[moduleId] = moreModules[moduleId];/******/ }/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);/******/ while(callbacks.length)/******/ callbacks.shift().call(null, __webpack_require__);/******/ if(moreModules[0]) {/******/ installedModules[0] = 0;/******/ return __webpack_require__(0);/******/ }/******/ };/******/ // The module cache/******/ var installedModules = {};/******/ // object to store loaded and loading chunks/******/ // "0" means "already loaded"/******/ // Array means "loading", array contains callbacks/******/ var installedChunks = {/******/ 1:0/******/ };/******/ // The require function/******/ function __webpack_require__(moduleId) {/******/ // Check if module is in cache/******/ if(installedModules[moduleId])/******/ return installedModules[moduleId].exports;/******/ // Create a new module (and put it into the cache)/******/ var module = installedModules[moduleId] = {/******/ exports: {},/******/ id: moduleId,/******/ loaded: false/******/ };/******/ // Execute the module function/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);/******/ // Flag the module as loaded/******/ module.loaded = true;/******/ // Return the exports of the module/******/ return module.exports;/******/ }/******/ // This file contains only the entry chunk./******/ // The chunk loading function for additional chunks/******/ __webpack_require__.e = function requireEnsure(chunkId, callback) {/******/ // "0" is the signal for "already loaded"/******/ if(installedChunks[chunkId] === 0)/******/ return callback.call(null, __webpack_require__);/******/ // an array means "currently loading"./******/ if(installedChunks[chunkId] !== undefined) {/******/ installedChunks[chunkId].push(callback);/******/ } else {/******/ // start chunk loading/******/ installedChunks[chunkId] = [callback];/******/ var head = document.getElementsByTagName('head')[0];/******/ var scr
ipt = document.createElement('script');/******/ script.type = 'text/javascript';/******/ script.charset = 'utf-8';/******/ script.async = true;/******/ script.src = __webpack_require__.p + "" + chunkId + "." + ({"0":"main"}[chunkId]||chunkId) + ".js";/******/ head.appendChild(script);/******/ }/******/ };/******/ // expose the modules object (__webpack_modules__)/******/ __webpack_require__.m = modules;/******/ // expose the module cache/******/ __webpack_require__.c = installedModules;/******/ // __webpack_public_path__/******/ __webpack_require__.p = "";/******/ })/************************************************************************//******/ ([]);

打包成的main.js中內容是:

webpackJsonp([0,1],[/* 0 *//***/ function(module, exports, __webpack_require__) { __webpack_require__(1); __webpack_require__(2);/***/ },/* 1 *//***/ function(module, exports, __webpack_require__) { __webpack_require__(2); var chunk1=1; exports.chunk1=chunk1;/***/ },/* 2 *//***/ function(module, exports) { var chunk2=1; exports.chunk2=chunk2;/***/ }]);

多入口文件時候能把引用多次的模塊打印到commonChunkPlugin中

在example2中我們配置了如下:

minChunks:2

我們兩個入口文件中公有的chunk1.js和chunk2.js被打印到chunk.js中!

/******/ (function(modules) { // webpackBootstrap/******/ // install a JSONP callback for chunk loading/******/ var parentJsonpFunction = window["webpackJsonp"];/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) {/******/ // add "moreModules" to the modules object,/******/ // then flag all "chunkIds" as loaded and fire callback/******/ var moduleId, chunkId, i = 0, callbacks = [];/******/ for(;i < chunkIds.length; i++) {/******/ chunkId = chunkIds[i];/******/ if(installedChunks[chunkId])/******/ callbacks.push.apply(callbacks, installedChunks[chunkId]);/******/ installedChunks[chunkId] = 0;/******/ }/******/ for(moduleId in moreModules) {/******/ modules[moduleId] = moreModules[moduleId];/******/ }/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);/******/ while(callbacks.length)/******/ callbacks.shift().call(null, __webpack_require__);/******/ if(moreModules[0]) {/******/ installedModules[0] = 0;/******/ return __webpack_require__(0);/******/ }/******/ };/******/ // The module cache/******/ var installedModules = {};/******/ // object to store loaded and loading chunks/******/ // "0" means "already loaded"/******/ // Array means "loading", array contains callbacks/******/ var installedChunks = {/******/ 2:0/******/ };/******/ // The require function/******/ function __webpack_require__(moduleId) {/******/ // Check if module is in cache/******/ if(installedModules[moduleId])/******/ return installedModules[moduleId].exports;/******/ // Create a new module (and put it into the cache)/******/ var module = installedModules[moduleId] = {/******/ exports: {},/******/ id: moduleId,/******/ loaded: false/******/ };/******/ // Execute the module function/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);/******/ // Flag the module as loaded/******/ module.loaded = true;/******/ // Return the exports of the module/******/ return module.exports;/******/ }/******/ // This file contains only the entry chunk./******/ // The chunk loading function for additional chunks/******/ __webpack_require__.e = function requireEnsure(chunkId, callback) {/******/ // "0" is the signal for "already loaded"/******/ if(installedChunks[chunkId] === 0)/******/ return callback.call(null, __webpack_require__);/******/ // an array means "currently loading"./******/ if(installedChunks[chunkId] !== undefined) {/******/ installedChunks[chunkId].push(callback);/******/ } else {/******/ // start chunk loading/******/ installedChunks[chunkId] = [callback];/******/ var head = document.getElementsByTagName('head')[0];/******/ var script = document.createElement('script');/******/ script.type = 'text/Javascript';/******/ script.charset = 'utf-8';/******/ script.async = true;/******/ script.src = __webpack_require__.p + "" + chunkId + "." + ({"0":"main","1":"main1"}[chunkId]||chunkId) + ".js";/******/ head.appendChild(script);/******/ }/******/ };/******/ // expose the modules object (__webpack_modules__)/******/ __webpack_require__.m = modules;/******/ // expose the module cache/******/ __webpack_require__.c = installedModules;/******/ // __webpack_public_path__/******/ __webpack_require__.p = "";/******/ })/************************************************************************//******/ ([/* 0 */,/* 1 *//***/ function(module, exports, __webpack_require__) { __webpack_require__(2); var chunk1=1; exports.chunk1=chunk1;/***/ },/* 2 *//***/ function(module, exports) { var chunk2=1; exports.chunk2=chunk2;/***/ }/******/ ]);

將公共業務模塊與類庫或框架分開打包

例1

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");module.exports = { entry: { main: process.cwd()+'/example3/main.js', main1: process.cwd()+'/example3/main1.js', common1:["jquery"], common2:["vue"] }, output: { path: process.cwd()+'/dest/example3', filename: '[name].js' }, plugins: [ new CommonsChunkPlugin({ name: ["chunk",'common1','common2'],//對應于上面的entry的key minChunks:2 }) ]};

上面的配置就可以把jquery,vue分別打包到一個獨立的chunk中,分別為common1.js,common2.js。同時把main1,main的公共業務模塊打包到chunk.js中,而其他非公共的業務代碼全部保留在main.js和main1.js中。

注意:webpack用插件CommonsChunkPlugin進行打包的時候,將符合引用次數(minChunks)的模塊打包到name參數的數組的第一個塊里(chunk),然后數組后面的塊依次打包(查找entry里的key,沒有找到相關的key就生成一個空的塊),最后一個塊包含webpack生成的在瀏覽器上使用各個塊的加載代碼,所以頁面上使用的時候最后一個塊必須最先加載,我們看看最后一個塊,也就是common2.js的內容頭部:

/******/ (function(modules) { // webpackBootstrap/******/ // install a JSONP callback for chunk loading/******/ var parentJsonpFunction = window["webpackJsonp"];/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) {/******/ // add "moreModules" to the modules object,/******/ // then flag all "chunkIds" as loaded and fire callback/******/ var moduleId, chunkId, i = 0, callbacks = [];/******/ for(;i < chunkIds.length; i++) {/******/ chunkId = chunkIds[i];/******/ if(installedChunks[chunkId])/******/ callbacks.push.apply(callbacks, installedChunks[chunkId]);/******/ installedChunks[chunkId] = 0;/******/ }/******/ for(moduleId in moreModules) {/******/ modules[moduleId] = moreModules[moduleId];/******/ }/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);/******/ while(callbacks.length)/******/ callbacks.shift().call(null, __webpack_require__);/******/ if(moreModules[0]) {/******/ installedModules[0] = 0;/******/ return __webpack_require__(0);/******/ }/******/ };/******/ // The module cache/******/ var installedModules = {};/******/ // object to store loaded and loading chunks/******/ // "0" means "already loaded"/******/ // Array means "loading", array contains callbacks/******/ var installedChunks = {/******/ 1:0/******/ };/******/ // The require function/******/ function __webpack_require__(moduleId) {/******/ // Check if module is in cache/******/ if(installedModules[moduleId])/******/ return installedModules[moduleId].exports;/******/ // Create a new module (and put it into the cache)/******/ var module = installedModules[moduleId] = {/******/ exports: {},/******/ id: moduleId,/******/ loaded: false/******/ };/******/ // Execute the module function/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);/******/ // Flag the module as loaded/******/ module.loaded = true;/******/ // Return the exports of the module/******/ return module.exports;/******/ }/******/ // This file contains only the entry chunk./******/ // The chunk loading function for additional chunks/******/ __webpack_require__.e = function requireEnsure(chunkId, callback) {/******/ // "0" is the signal for "already loaded"/******/ if(installedChunks[chunkId] === 0)/******/ return callback.call(null, __webpack_require__);/******/ // an array means "currently loading"./******/ if(installedChunks[chunkId] !== undefined) {/******/ installedChunks[chunkId].push(callback);/******/ } else {/******/ // start chunk loading/******/ installedChunks[chunkId] = [callback];/******/ var head = document.getElementsByTagName('head')[0];/******/ var script = document.createElement('script');/******/ script.type = 'text/javascript';/******/ script.charset = 'utf-8';/******/ script.async = true;/******/ script.src = __webpack_require__.p + "" + chunkId + "." + ({"0":"common1","2":"main","3":"main1","4":"chunk"}[chunkId]||chunkId) + ".js";/******/ head.appendChild(script);/******/ }/******/ };/******/ // expose the modules object (__webpack_modules__)/******/ __webpack_require__.m = modules;/******/ // expose the module cache/******/ __webpack_require__.c = installedModules;/******/ // __webpack_public_path__/******/ __webpack_require__.p = "";/******/ // Load entry module and return exports/******/ return __webpack_require__(0);/******/ })/************************************************************************//******/ ([/* 0 *//***/ function(module, exports, __webpack_require__) { module.exports = __webpack_require__(2);/***/ }])

看到這里你就會明白為什么他要最后加載了把。

例2

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");module.exports = { entry: { main: process.cwd()+'/example4/main.js', main1: process.cwd()+'/example4/main1.js', jquery:["jquery"], vue:["vue"] }, output: { path: process.cwd() + '/dest/example4', filename: '[name].js' }, plugins: [ new CommonsChunkPlugin({ name: ["common","jquery","vue","load"], minChunks:2 }) ]};

這樣我們的業務共享代碼會提取到common.js中,如下:

webpackJsonp([4,5],[//第一個參數是一個數組,數組中第一個元素是該chunkId,而其余元素是該chunk依賴的其他模塊/* 0 */,/* 1 */,/* 2 *//***/ function(module, exports, __webpack_require__) { __webpack_require__(3); var chunk1=1; exports.chunk1=chunk1;/***/ },/* 3 *//***/ function(module, exports) { var chunk2=1; exports.chunk2=chunk2;/***/ }]);

而我們的load.js中僅僅是用于加載其他chunk代碼的函數,所以必須在最后加載才行:

/******/ (function(modules) { // webpackBootstrap/******/ // install a JSONP callback for chunk loading/******/ var parentJsonpFunction = window["webpackJsonp"];/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) {/******/ // add "moreModules" to the modules object,/******/ // then flag all "chunkIds" as loaded and fire callback/******/ var moduleId, chunkId, i = 0, callbacks = [];/******/ for(;i < chunkIds.length; i++) {/******/ chunkId = chunkIds[i];/******/ if(installedChunks[chunkId])/******/ callbacks.push.apply(callbacks, installedChunks[chunkId]);/******/ installedChunks[chunkId] = 0;/******/ }/******/ for(moduleId in moreModules) {/******/ modules[moduleId] = moreModules[moduleId];/******/ }/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);/******/ while(callbacks.length)/******/ callbacks.shift().call(null, __webpack_require__);/******/ if(moreModules[0]) {/******/ installedModules[0] = 0;/******/ return __webpack_require__(0);/******/ }/******/ };/******/ // The module cache/******/ var installedModules = {};/******/ // object to store loaded and loading chunks/******/ // "0" means "already loaded"/******/ // Array means "loading", array contains callbacks/******/ var installedChunks = {/******/ 5:0/******/ };/******/ // The require function/******/ function __webpack_require__(moduleId) {/******/ // Check if module is in cache/******/ if(installedModules[moduleId])/******/ return installedModules[moduleId].exports;/******/ // Create a new module (and put it into the cache)/******/ var module = installedModules[moduleId] = {/******/ exports: {},/******/ id: moduleId,/******/ loaded: false/******/ };/******/ // Execute the module function/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);/******/ // Flag the module as loaded/******/ module.loaded = true;/******/ // Return the exports of the module/******/ return module.exports;/******/ }/******/ // This file contains only the entry chunk./******/ // The chunk loading function for additional chunks/******/ __webpack_require__.e = function requireEnsure(chunkId, callback) {/******/ // "0" is the signal for "already loaded"/******/ if(installedChunks[chunkId] === 0)/******/ return callback.call(null, __webpack_require__);/******/ // an array means "currently loading"./******/ if(installedChunks[chunkId] !== undefined) {/******/ installedChunks[chunkId].push(callback);/******/ } else {/******/ // start chunk loading/******/ installedChunks[chunkId] = [callback];/******/ var head = document.getElementsByTagName('head')[0];/******/ var script = document.createElement('script');/******/ script.type = 'text/javascript';/******/ script.charset = 'utf-8';/******/ script.async = true;/******/ script.src = __webpack_require__.p + "" + chunkId + "." + ({"0":"jquery","1":"main","2":"main1","3":"vue","4":"common"}[chunkId]||chunkId) + ".js";/******/ head.appendChild(script);/******/ }/******/ };/******/ // expose the modules object (__webpack_modules__)/******/ __webpack_require__.m = modules;/******/ // expose the module cache/******/ __webpack_require__.c = installedModules;/******/ // __webpack_public_path__/******/ __webpack_require__.p = "";/******/ })/************************************************************************//******/ ([]);

參數minChunks: Infinity

下面的配置會把main.js和main1.js公共的業務代碼打包到jquery.js中:

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");module.exports = { entry: { main: process.cwd()+'/example5/main.js', main1: process.cwd()+'/example5/main1.js', jquery:["jquery"] //minChunks: Infinity時候框架代碼依然會被單獨打包成一個文件 }, output: { path: process.cwd() + '/dest/example5', filename: '[name].js' }, plugins: [ new CommonsChunkPlugin({ name: "jquery", minChunks:2//被引用兩次及以上 }) ]};

如果把上面的minChunks修改為Infinity,那么chunk1和chunk2(公有的業務邏輯部分,在main.js和main1.js中require進來)都打包到main.js,main1.js里,也就是共有邏輯不會抽取出來作為一個單獨的chunk,而是打包到jquery.js中!注意:此處的jquery必須在最先加載,因為window.webpackJsonp函數是被打包到jquery.js中的!

參數chunks

下面的配置表示:只有在main.js和main1.js中都引用的模塊才會被打包的到公共模塊(這里即jquery.js)

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");module.exports = { entry: { main: process.cwd()+'/example6/main.js', main1: process.cwd()+'/example6/main1.js', jquery:["jquery"] }, output: { path: process.cwd() + '/dest/example6', filename: '[name].js' }, plugins: [ new CommonsChunkPlugin({ name: "jquery", minChunks:2, chunks:["main","main1"] }) ]};

此時你會發現在我們的jquery.js的最后會打包進來我們的chunk1.js和chunk2.js

/* 2 *//***/ function(module, exports, __webpack_require__) { __webpack_require__(3); var chunk1=1; exports.chunk1=chunk1;/***/ },/* 3 *//***/ function(module, exports) { var chunk2=1; exports.chunk2=chunk2;/***/ }

參考資料:

webpack打包策略分析

webpack CommonsChunkPlugin詳細教程


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产区精品在线观看| 国产精品欧美亚洲777777| 欧美午夜久久久| 欧美巨乳在线观看| 欧美黄色片在线观看| 久久资源免费视频| 黑人巨大精品欧美一区免费视频| 一二美女精品欧洲| 亚洲深夜福利网站| 日本精品久久电影| 亚洲va欧美va国产综合剧情| 91中文在线视频| 日韩欧美一区二区三区久久| 日韩美女视频免费在线观看| 在线观看国产欧美| 久久精品国产2020观看福利| 日韩av男人的天堂| 国产精品久久久久久久久久99| 国产在线拍揄自揄视频不卡99| 日韩在线观看免费全集电视剧网站| 久久久免费电影| 欧美日韩不卡合集视频| 精品国产一区二区三区四区在线观看| 久久视频在线直播| 国产精品丝袜高跟| 久久影院资源站| 亚洲第一页自拍| 久久99国产综合精品女同| 久久精品久久精品亚洲人| 欧美午夜女人视频在线| 欧美激情极品视频| 热99在线视频| 91豆花精品一区| 青青草原成人在线视频| 韩国v欧美v日本v亚洲| 国产专区精品视频| 亚洲精品日韩丝袜精品| 成人免费淫片视频软件| 精品国产自在精品国产浪潮| 青青在线视频一区二区三区| 欧美日韩一区二区免费在线观看| www.精品av.com| 一区二区国产精品视频| 国精产品一区一区三区有限在线| 亚洲精品久久久久久下一站| 97碰在线观看| xxxxx成人.com| 性色av一区二区三区在线观看| 亚洲电影第1页| 亚洲福利小视频| 视频直播国产精品| 欧美视频中文在线看| 亚洲高清久久网| 欧美日韩亚洲成人| 亚洲一区二区免费| 亚洲va欧美va国产综合剧情| 国产精品美女免费视频| 成人性生交大片免费观看嘿嘿视频| 成人免费视频a| 一区二区成人精品| 日韩中文字幕网址| 欧美福利在线观看| 国产精品永久免费视频| 国内精品久久影院| 日日狠狠久久偷偷四色综合免费| 日本不卡高字幕在线2019| 不卡av电影院| 4438全国亚洲精品在线观看视频| 97视频在线观看免费高清完整版在线观看| 日韩精品福利网站| 国产精品v日韩精品| 欧美激情一级精品国产| 欧美日韩美女在线观看| 亚洲精品电影在线观看| 97人人模人人爽人人喊中文字| 国产欧美婷婷中文| 国产视频精品自拍| 黑人巨大精品欧美一区免费视频| 欧美影院久久久| 亚洲天堂视频在线观看| 成人网在线免费观看| 欧美大片在线看免费观看| 欧美日韩国产一区二区| 成人激情视频在线观看| 欧美日韩性生活视频| 欧美成人免费网| 久久久久久中文| 97香蕉久久超级碰碰高清版| 亚洲精品丝袜日韩| 色综合五月天导航| 国产脚交av在线一区二区| 国产精品日日做人人爱| 国产精品日日做人人爱| 国产精品视频公开费视频| 亚洲伊人久久综合| 亚洲国产精品成人va在线观看| 98精品在线视频| 国产美女高潮久久白浆| 欧美孕妇性xx| 粉嫩av一区二区三区免费野| 成人av资源在线播放| 欧美激情一区二区三区久久久| 精品久久久久久久久久久久久久| 亚洲欧美中文字幕在线一区| 中文字幕在线观看日韩| 欧美xxxx做受欧美| 久久成人精品电影| 美女999久久久精品视频| 国产精品91久久久| 日韩精品欧美激情| 热久久美女精品天天吊色| 91亚洲午夜在线| 综合网中文字幕| 欧美大片欧美激情性色a∨久久| 欧美xxxx14xxxxx性爽| 精品国产福利在线| 久久综合久久美利坚合众国| 91精品国产网站| 岛国精品视频在线播放| 色噜噜亚洲精品中文字幕| 日韩欧美国产一区二区| 亚洲福利在线观看| 国产69精品久久久久99| 国产精品揄拍一区二区| 国产精品99一区| 成人激情视频在线播放| 亚洲男人的天堂网站| 久久精品中文字幕| 亚洲高清福利视频| 久久久在线观看| 亚洲精品小视频| 亚洲欧美日韩在线高清直播| 久久久精品国产网站| 亚洲性69xxxbbb| www.99久久热国产日韩欧美.com| 中文字幕欧美精品在线| 国内揄拍国内精品| 免费不卡欧美自拍视频| 亚洲乱码一区av黑人高潮| 久久久精品一区| 夜夜嗨av一区二区三区免费区| 久久综合伊人77777| 亚洲精品第一页| 亚洲精品丝袜日韩| 国产午夜精品视频免费不卡69堂| 精品久久久香蕉免费精品视频| 久久久人成影片一区二区三区观看| 精品偷拍各种wc美女嘘嘘| 51ⅴ精品国产91久久久久久| 日韩成人激情在线| 成人网在线免费观看| 日韩午夜在线视频| 国产性色av一区二区| 亚洲成色999久久网站| 91精品久久久久久| 欧洲亚洲在线视频| 久久精品视频播放| 久久91亚洲精品中文字幕| 人人爽久久涩噜噜噜网站| 欧美猛少妇色xxxxx| 性亚洲最疯狂xxxx高清| 国产精品国产福利国产秒拍| 日韩中文综合网| 亚洲一区二区日本|