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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue-cli脚手架中webpack配置基础文件详解

發布時間:2025/3/15 vue 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue-cli脚手架中webpack配置基础文件详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

vue-cli是構建vue單頁應用的腳手架,輸入一串指定的命令行從而自動生成vue.js+wepack的項目模板。這其中webpack發揮了很大的作用,它使得我們的代碼模塊化,引入一些插件幫我們完善功能可以將文件打包壓縮,圖片轉base64等。后期對項目的配置使得我們對于腳手架自動生成的代碼的理解更為重要,接下來我將基于webpack3.6.0版本結合文檔將文件各個擊破,純干料。
重點章節點擊查看:package.json;config/index.js;webpack.base.conf.js;webpack.dev.conf.js;webpack.prod.conf.js

二、主體結構

├─build ├─config ├─dist ├─node_modules ├─src │ ├─assets │ ├─components │ ├─router │ ├─App.vue │ ├─main.js ├─static ├─.babelrc ├─.editorconfig ├─.gitignore ├─.postcssrc.js ├─index.html ├─package-lock.json ├─package.json └─README.md

1、?package.json

項目作為一個大家庭,每個文件都各司其職。package.json來制定名單,需要哪些npm包來參與到項目中來,npm install命令根據這個配置文件增減來管理本地的安裝包。

{ //從name到private都是package的配置信息,也就是我們在腳手架搭建中輸入的項目描述"name": "shop",//項目名稱:不能以.(點)或者_(下劃線)開頭,不能包含大寫字母,具有明確的的含義與現有項目名字不重復"version": "1.0.0",//項目版本號:遵循“大版本.次要版本.小版本” "description": "A Vue.js project",//項目描述 "author": "qietuniu",//作者名字 "private": true,//是否私有 //scripts中的子項即是我們在控制臺運行的腳本的縮寫 "scripts": { //①webpack-dev-server:啟動了http服務器,實現實時編譯; //inline模式會在webpack.config.js入口配置中新增webpack-dev-server/client?http://localhost:8080/的入口,使得我們訪問路徑為localhost:8080/index.html(相應的還有另外一種模式Iframe); //progress:顯示打包的進度 "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev",//與npm run dev相同,直接運行開發環境 "build": "node build/build.js"//使用node運行build文件 }, //②dependencies(項目依賴庫):在安裝時使用--save則寫入到dependencies "dependencies": { "vue": "^2.5.2",//vue.js "vue-router": "^3.0.1"//vue的路由插件 }, //和devDependencies(開發依賴庫):在安裝時使用--save-dev將寫入到devDependencies "devDependencies": { "autoprefixer": "^7.1.2",//autoprefixer作為postcss插件用來解析CSS補充前綴,例如 display: flex會補充為display:-webkit-box;display: -webkit-flex;display: -ms-flexbox;display: flex。 //babel:以下幾個babel開頭的都是針對es6解析的插件。用最新標準編寫的 JavaScript 代碼向下編譯成可以在今天隨處可用的版本 "babel-core": "^6.22.1",//babel的核心,把 js 代碼分析成 ast ,方便各個插件分析語法進行相應的處理。 "babel-helper-vue-jsx-merge-props": "^2.0.3",//預制babel-template函數,提供給vue,jsx等使用 "babel-loader": "^7.1.1",//使項目運行使用Babel和webpack來傳輸js文件,使用babel-core提供的api進行轉譯 "babel-plugin-syntax-jsx": "^6.18.0",//支持jsx "babel-plugin-transform-runtime": "^6.22.0",//避免編譯輸出中的重復,直接編譯到build環境中 "babel-plugin-transform-vue-jsx": "^3.5.0",//babel轉譯過程中使用到的插件,避免重復 "babel-preset-env": "^1.3.2",//轉為es5,transform階段使用到的插件之一 "babel-preset-stage-2": "^6.22.0",//ECMAScript第二階段的規范 "chalk": "^2.0.1",//用來在命令行輸出不同顏色文字 "copy-webpack-plugin": "^4.0.1",//拷貝資源和文件 "css-loader": "^0.28.0",//webpack先用css-loader加載器去解析后綴為css的文件,再使用style-loader生成一個內容為最終解析完的css代碼的style標簽,放到head標簽里 "extract-text-webpack-plugin": "^3.0.0",//將一個以上的包里面的文本提取到單獨文件中 "file-loader": "^1.1.4",//③打包壓縮文件,與url-loader用法類似 "friendly-errors-webpack-plugin": "^1.6.1",//識別某些類別的WebPACK錯誤和清理,聚合和優先排序,以提供更好的開發經驗 "html-webpack-plugin": "^2.30.1",//簡化了HTML文件的創建,引入了外部資源,創建html的入口文件,可通過此項進行多頁面的配置 "node-notifier": "^5.1.2",//支持使用node發送跨平臺的本地通知 "optimize-css-assets-webpack-plugin": "^3.2.0",//壓縮提取出的css,并解決ExtractTextPlugin分離出的js重復問題(多個文件引入同一css文件) "ora": "^1.2.0",//加載(loading)的插件 "portfinder": "^1.0.13",//查看進程端口 "postcss-import": "^11.0.0",//可以消耗本地文件、節點模塊或web_modules "postcss-loader": "^2.0.8",//用來兼容css的插件 "postcss-url": "^7.2.1",//URL上重新定位、內聯或復制 "rimraf": "^2.6.0",//節點的UNIX命令RM—RF,強制刪除文件或者目錄的命令 "semver": "^5.3.0",//用來對特定的版本號做判斷的 "shelljs": "^0.7.6",//使用它來消除shell腳本在UNIX上的依賴性,同時仍然保留其熟悉和強大的命令,即可執行Unix系統命令 "uglifyjs-webpack-plugin": "^1.1.1",//壓縮js文件 "url-loader": "^0.5.8",//壓縮文件,可將圖片轉化為base64 "vue-loader": "^13.3.0",//VUE單文件組件的WebPACK加載器 "vue-style-loader": "^3.0.1",//類似于樣式加載程序,您可以在CSS加載器之后將其鏈接,以將CSS動態地注入到文檔中作為樣式標簽 "vue-template-compiler": "^2.5.2",//這個包可以用來預編譯VUE模板到渲染函數,以避免運行時編譯開銷和CSP限制 "webpack": "^3.6.0",//打包工具 "webpack-bundle-analyzer": "^2.9.0",//可視化webpack輸出文件的大小 "webpack-dev-server": "^2.9.1",//提供一個提供實時重載的開發服務器 "webpack-merge": "^4.1.0"//它將數組和合并對象創建一個新對象。如果遇到函數,它將執行它們,通過算法運行結果,然后再次將返回的值封裝在函數中 }, //engines是引擎,指定node和npm版本 "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" }, //限制了瀏覽器或者客戶端需要什么版本才可運行 "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ] }

注釋:
①、點這里→webpack運行時的配置文檔傳送門

②、devDependencies和dependencies的區別: devDependencies里面的插件只用于開發環境,不用于生產環境,即輔助作用,打包的時候需要,打包完成就不需要了。而dependencies是需要發布到生產環境的,自始至終都在。比如wepack等只是在開發中使用的包就寫入到devDependencies,而像vue這種項目全程依賴的包要寫入到dependencies
點這里→更多安裝包文檔搜索頁傳送門

③、file-loader和url-loader的區別:以圖片為例,file-loader可對圖片進行壓縮,但是還是通過文件路徑進行引入,當http請求增多時會降低頁面性能,而url-loader通過設定limit參數,小于limit字節的圖片會被轉成base64的文件,大于limit字節的將進行圖片壓縮的操作。總而言之,url-loader是file-loader的上層封裝。
點這里→file-loader 和 url-loader詳解
點這里→file-loader文檔傳送門
點這里→url-loader文檔傳送門

2、.postcssrc.js

.postcssrc.js文件其實是postcss-loader包的一個配置,在webpack的舊版本可以直接在webpack.config.js中配置,現版本中postcss的文檔示例獨立出.postcssrc.js,里面寫進去需要使用到的插件

module.exports = {"plugins": {"postcss-import": {},//① "postcss-url": {},//② "autoprefixer": {}//③ } }

注釋:
①、點這里→postcss-import文檔傳送門
②、點這里→postcss-url文檔傳送門
③、點這里→autoprefixer文檔傳送門

3、?.babelrc

該文件是es6解析的一個配置

{ //制定轉碼的規則"presets": [//env是使用babel-preset-env插件將js進行轉碼成es5,并且設置不轉碼的AMD,COMMONJS的模塊文件,制定瀏覽器的兼容["env", {"modules": false,"targets": { "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] } }], "stage-2" ], "plugins": ["transform-vue-jsx", "transform-runtime"]//① }

注釋:
①、點這里→transform-vue-jsx文檔傳送門
點這里→transform-runtime文檔傳送門

4、src內文件

我們開發的代碼都存放在src目錄下,根據需要我們通常會再建一些文件夾。比如pages的文件夾,用來存放頁面讓components文件夾專門做好組件的工作;api文件夾,來封裝請求的參數和方法;store文件夾,使用vuex來作為vue的狀態管理工具,我也常叫它作前端的數據庫等。


①、assets文件:腳手架自動會放入一個圖片在里面作為初始頁面的logo。平常我們使用的時候會在里面建立js,css,img,fonts等文件夾,作為靜態資源調用

②、components文件夾:用來存放組件,合理地使用組件可以高效地實現復用等功能,從而更好地開發項目。一般情況下比如創建頭部組件的時候,我們會新建一個header的文件夾,然后再新建一個header.vue的文件

③、router文件夾:該文件夾下有一個叫index.js文件,用于實現頁面的路由跳轉,具體使用請點擊→vue-router傳送門

④、App.vue:作為我們的主組件,可通過使用<router-view/>開放入口讓其他的頁面組件得以顯示。

⑤、main.js:作為我們的入口文件,主要作用是初始化vue實例并使用需要的插件,小型項目省略router時可放在該處

注釋:具體vue的用法可查看vue官方中文文檔傳送門

5、其他文件

①、.editorconfig:編輯器的配置文件

②、.gitignore:忽略git提交的一個文件,配置之后提交時將不會加載忽略的文件

③、index.html:頁面入口,經過編譯之后的代碼將插入到這來。

④、package.lock.json:鎖定安裝時的包的版本號,并且需要上傳到git,以保證其他人在npm install時大家的依賴能保證一致

⑤、README.md:可此填寫項目介紹

⑥、node_modules:根據package.json安裝時候生成的的依賴(安裝包)

三、config文件夾

├─config │ ├─dev.env.js │ ├─index.js │ ├─prod.env.js

1、config/dev.env.js

config內的文件其實是服務于build的,大部分是定義一個變量export出去。

'use strict'//采用嚴格模式 const merge = require('webpack-merge')//① const prodEnv = require('./prod.env') //webpack-merge提供了一個合并函數,它將數組和合并對象創建一個新對象。 //如果遇到函數,它將執行它們,通過算法運行結果,然后再次將返回的值封裝在函數中.這邊將dev和prod進行合并 module.exports = merge(prodEnv, { NODE_ENV: '"development"' })

注釋:①、點這里→webpack-merge文檔傳送門

2、config/prod.env.js

當開發是調取dev.env.js的開發環境配置,發布時調用prod.env.js的生產環境配置

'use strict' module.exports = {NODE_ENV: '"production"' }

3、config/index.js

'use strict' const path = require('path') module.exports = { dev: { // 開發環境下面的配置 assetsSubDirectory: 'static',//子目錄,一般存放css,js,image等文件 assetsPublicPath: '/',//根目錄 proxyTable: {},//可利用該屬性解決跨域的問題 host: 'localhost', // 地址 port: 8080, //端口號設置,端口號占用出現問題可在此處修改 autoOpenBrowser: false,//是否在編譯(輸入命令行npm run dev)后打開http://localhost:8080/頁面,以前配置為true,近些版本改為false,個人偏向習慣自動打開頁面 errorOverlay: true,//瀏覽器錯誤提示 notifyOnErrors: true,//跨平臺錯誤提示 poll: false, //使用文件系統(file system)獲取文件改動的通知devServer.watchOptions devtool: 'cheap-module-eval-source-map',//增加調試,該屬性為原始源代碼(僅限行)不可在生產環境中使用 cacheBusting: true,//使緩存失效 cssSourceMap: true//代碼壓縮后進行調bug定位將非常困難,于是引入sourcemap記錄壓縮前后的位置信息記錄,當產生錯誤時直接定位到未壓縮前的位置,將大大的方便我們調試 }, build: { // 生產環境下面的配置 index: path.resolve(__dirname, '../dist/index.html'),//index編譯后生成的位置和名字,根據需要改變后綴,比如index.php assetsRoot: path.resolve(__dirname, '../dist'),//編譯后存放生成環境代碼的位置 assetsSubDirectory: 'static',//js,css,images存放文件夾名 assetsPublicPath: '/',//發布的根目錄,通常本地打包dist后打開文件會報錯,此處修改為./。如果是上線的文件,可根據文件存放位置進行更改路徑 productionSourceMap: true, devtool: '#source-map',//① //unit的gzip命令用來壓縮文件,gzip模式下需要壓縮的文件的擴展名有js和css productionGzip: false, productionGzipExtensions: ['js', 'css'], bundleAnalyzerReport: process.env.npm_config_report } }

注釋:①點擊→devtool文檔傳送門

四、build文件夾

├─build │ ├─build.js │ ├─check-versions.js │ ├─utils.js │ ├─vue-loader.conf.js │ ├─webpack.base.conf.js │ ├─webpack.dev.conf.js │ ├─webpack.prod.conf.js

1、build/build.js

該文件作用,即構建生產版本。package.json中的scripts的build就是node build/build.js,輸入命令行npm run build對該文件進行編譯生成生產環境的代碼。

'use strict' require('./check-versions')()//check-versions:調用檢查版本的文件。加()代表直接調用該函數 process.env.NODE_ENV = 'production'//設置當前是生產環境 //下面定義常量引入插件 const ora = require('ora')//①加載動畫 const rm = require('rimraf')//②刪除文件 const path = require('path') const chalk = require('chalk')//③對文案輸出的一個彩色設置 const webpack = require('webpack') const config = require('../config')//默認讀取下面的index.js文件 const webpackConfig = require('./webpack.prod.conf') //調用start的方法實現加載動畫,優化用戶體驗 const spinner = ora('building for production...') spinner.start() //先刪除dist文件再生成新文件,因為有時候會使用hash來命名,刪除整個文件可避免冗余 rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { if (err) throw err webpack(webpackConfig, (err, stats) => { spinner.stop() if (err) throw err process.stdout.write(stats.toString({ colors: true, modules: false, children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. chunks: false, chunkModules: false }) + '\n\n') if (stats.hasErrors()) { process.exit(1) } console.log(chalk.cyan(' Build complete.\n')) console.log(chalk.yellow( ' Tip: built files are meant to be served over an HTTP server.\n' + ' Opening index.html over file:// won\'t work.\n' )) }) })

注釋:
①、點這里→ora文檔傳送門
②、點這里→chalk文檔傳送門
③、點這里→rimraf文檔傳送門

2、build/check-version.js

該文件用于檢測node和npm的版本,實現版本依賴

'use strict' const chalk = require('chalk') const semver = require('semver')//①對版本進行檢查 const packageConfig = require('../package.json') const shell = require('shelljs') function exec (cmd) { //返回通過child_process模塊的新建子進程,執行 Unix 系統命令后轉成沒有空格的字符串 return require('child_process').execSync(cmd).toString().trim() } const versionRequirements = [ { name: 'node', currentVersion: semver.clean(process.version),//使用semver格式化版本 versionRequirement: packageConfig.engines.node//獲取package.json中設置的node版本 } ] if (shell.which('npm')) { versionRequirements.push({ name: 'npm', currentVersion: exec('npm --version'),// 自動調用npm --version命令,并且把參數返回給exec函數,從而獲取純凈的版本號 versionRequirement: packageConfig.engines.npm }) } module.exports = function () { const warnings = [] for (let i = 0; i < versionRequirements.length; i++) { const mod = versionRequirements[i] if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { //上面這個判斷就是如果版本號不符合package.json文件中指定的版本號,就執行下面錯誤提示的代碼 warnings.push(mod.name + ': ' + chalk.red(mod.currentVersion) + ' should be ' + chalk.green(mod.versionRequirement) ) } } if (warnings.length) { console.log('') console.log(chalk.yellow('To use this template, you must update following to modules:')) console.log() for (let i = 0; i < warnings.length; i++) { const warning = warnings[i] console.log(' ' + warning) } console.log() process.exit(1) } }

注釋:
①、點這里→chalk文檔傳送門
點這里→semver文檔傳送門

3、build/utils.js

utils是工具的意思,是一個用來處理css的文件。

'use strict' const path = require('path') const config = require('../config') const ExtractTextPlugin = require('extract-text-webpack-plugin') const packageConfig = require('../package.json') //導出文件的位置,根據環境判斷開發環境和生產環境,為config文件中index.js文件中定義的build.assetsSubDirectory或dev.assetsSubDirectory exports.assetsPath = function (_path) { const assetsSubDirectory = process.env.NODE_ENV === 'production' ? config.build.assetsSubDirectory : config.dev.assetsSubDirectory //Node.js path 模塊提供了一些用于處理文件路徑的小工具① return path.posix.join(assetsSubDirectory, _path) } exports.cssLoaders = function (options) { options = options || {} //使用了css-loader和postcssLoader,通過options.usePostCSS屬性來判斷是否使用postcssLoader中壓縮等方法 const cssLoader = { loader: 'css-loader', options: { sourceMap: options.sourceMap } } const postcssLoader = { loader: 'postcss-loader', options: { sourceMap: options.sourceMap } } function generateLoaders (loader, loaderOptions) { const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] if (loader) { loaders.push({ loader: loader + '-loader', //Object.assign是es6語法的淺復制,后兩者合并后復制完成賦值 options: Object.assign({}, loaderOptions, { sourceMap: options.sourceMap }) }) } if (options.extract) { //ExtractTextPlugin可提取出文本,代表首先使用上面處理的loaders,當未能正確引入時使用vue-style-loader return ExtractTextPlugin.extract({ use: loaders, fallback: 'vue-style-loader' }) } else { //返回vue-style-loader連接loaders的最終值 return ['vue-style-loader'].concat(loaders) } } return { css: generateLoaders(),//需要css-loader 和 vue-style-loader postcss: generateLoaders(),//需要css-loader和postcssLoader 和 vue-style-loader less: generateLoaders('less'),//需要less-loader 和 vue-style-loader sass: generateLoaders('sass', { indentedSyntax: true }),//需要sass-loader 和 vue-style-loader scss: generateLoaders('sass'),//需要sass-loader 和 vue-style-loader stylus: generateLoaders('stylus'),//需要stylus-loader 和 vue-style-loader styl: generateLoaders('stylus')//需要stylus-loader 和 vue-style-loader } } exports.styleLoaders = function (options) { const output = [] const loaders = exports.cssLoaders(options) //將各種css,less,sass等綜合在一起得出結果輸出output for (const extension in loaders) { const loader = loaders[extension] output.push({ test: new RegExp('\\.' + extension + '$'), use: loader }) } return output } exports.createNotifierCallback = () => { //發送跨平臺通知系統 const notifier = require('node-notifier') return (severity, errors) => { if (severity !== 'error') return //當報錯時輸出錯誤信息的標題,錯誤信息詳情,副標題以及圖標 const error = errors[0] const filename = error.file && error.file.split('!').pop() notifier.notify({ title: packageConfig.name, message: severity + ': ' + error.name, subtitle: filename || '', icon: path.join(__dirname, 'logo.png') }) } }

注釋:
①、path.posix:提供對路徑方法的POSIX(可移植性操作系統接口)特定實現的訪問,即可跨平臺,區別于win32。
path.join:用于連接路徑,會正確使用當前系統的路徑分隔符,Unix系統是"/",Windows系統是""
點擊→path用法傳送門

4、vue-loader.conf.js

該文件的主要作用就是處理.vue文件,解析這個文件中的每個語言塊(template、script、style),轉換成js可用的js模塊。

'use strict' const utils = require('./utils') const config = require('../config') const isProduction = process.env.NODE_ENV === 'production' const sourceMapEnabled = isProduction ? config.build.productionSourceMap : config.dev.cssSourceMap //處理項目中的css文件,生產環境和測試環境默認是打開sourceMap,而extract中的提取樣式到單獨文件只有在生產環境中才需要 module.exports = { loaders: utils.cssLoaders({ sourceMap: sourceMapEnabled, extract: isProduction }), cssSourceMap: sourceMapEnabled, cacheBusting: config.dev.cacheBusting, // 在模版編譯過程中,編譯器可以將某些屬性,如 src 路徑,轉換為require調用,以便目標資源可以由 webpack 處理. transformToRequire: { video: ['src', 'poster'], source: 'src', img: 'src', image: 'xlink:href' } }

5、webpack.base.conf.js

webpack.base.conf.js是開發和生產共同使用提出來的基礎配置文件,主要實現配制入口,配置輸出環境,配置模塊resolve和插件等

'use strict' const path = require('path') const utils = require('./utils') const config = require('../config') const vueLoaderConfig = require('./vue-loader.conf') function resolve (dir) { //拼接出絕對路徑 return path.join(__dirname, '..', dir) } module.exports = { //path.join將路徑片段進行拼接,而path.resolve將以/開始的路徑片段作為根目錄,在此之前的路徑將會被丟棄 //path.join('/a', '/b') // 'a/b',path.resolve('/a', '/b') // '/b' context: path.resolve(__dirname, '../'), //配置入口,默認為單頁面所以只有app一個入口 entry: { app: './src/main.js' }, //配置出口,默認是/dist作為目標文件夾的路徑 output: { path: config.build.assetsRoot,//路徑 filename: '[name].js',//文件名 publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath//公共存放路徑 }, resolve: { //自動的擴展后綴,比如一個js文件,則引用時書寫可不要寫.js extensions: ['.js', '.vue', '.json'], //創建路徑的別名,比如增加'components': resolve('src/components')等 alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src'), } }, //使用插件配置相應文件的處理方法 module: { rules: [ //使用vue-loader將vue文件轉化成js的模塊① { test: /\.vue$/, loader: 'vue-loader', options: vueLoaderConfig }, //js文件需要通過babel-loader進行編譯成es5文件以及壓縮等操作② { test: /\.js$/, loader: 'babel-loader', include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] }, //圖片、音像、字體都使用url-loader進行處理,超過10000會編譯成base64③ { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: utils.assetsPath('img/[name].[hash:7].[ext]') } }, { test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: utils.assetsPath('media/[name].[hash:7].[ext]') } }, { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: utils.assetsPath('fonts/[name].[hash:7].[ext]') } } ] }, //以下選項是Node.js全局變量或模塊,這里主要是防止webpack注入一些Node.js的東西到vue中 node: setImmediate: false, dgram: 'empty', fs: 'empty', net: 'empty', tls: 'empty', child_process: 'empty' } }

注釋:
①、點擊→vue-loader文檔傳送門
②、點擊→babel-loader文檔傳送門

6、webpack.dev.conf.js

'use strict' const utils = require('./utils') const webpack = require('webpack') const config = require('../config') //通過webpack-merge實現webpack.dev.conf.js對wepack.base.config.js的繼承 const merge = require('webpack-merge') const path = require('path') const baseWebpackConfig = require('./webpack.base.conf') const CopyWebpackPlugin = require('copy-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') //美化webpack的錯誤信息和日志的插件① const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') const portfinder = require('portfinder')// 查看空閑端口位置,默認情況下搜索8000這個端口② const HOST = process.env.HOST//③processs為node的一個全局對象獲取當前程序的環境變量,即host const PORT = process.env.PORT && Number(process.env.PORT) const devWebpackConfig = merge(baseWebpackConfig, { module: { //規則是工具utils中處理出來的styleLoaders,生成了css,less,postcss等規則 rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) }, devtool: config.dev.devtool, //增強調試,上文有提及 //此處的配置都是在config的index.js中設定好了 devServer: {//④ clientLogLevel: 'warning',//控制臺顯示的選項有none, error, warning 或者 info //當使用 HTML5 History API 時,任意的 404 響應都可能需要被替代為 index.html historyApiFallback: { rewrites: [ { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, ], }, hot: true,//熱加載 contentBase: false, compress: true,//壓縮 host: HOST || config.dev.host, port: PORT || config.dev.port, open: config.dev.autoOpenBrowser,//調試時自動打開瀏覽器 overlay: config.dev.errorOverlay ? { warnings: false, errors: true } : false,// warning 和 error 都要顯示 publicPath: config.dev.assetsPublicPath, proxy: config.dev.proxyTable,//接口代理 quiet: true, //控制臺是否禁止打印警告和錯誤,若用FriendlyErrorsPlugin 此處為 true watchOptions: { poll: config.dev.poll, 文件系統檢測改動 } }, plugins: [ new webpack.DefinePlugin({ 'process.env': require('../config/dev.env') }), new webpack.HotModuleReplacementPlugin(),//⑤模塊熱替換插件,修改模塊時不需要刷新頁面 new webpack.NamedModulesPlugin(), // 顯示文件的正確名字 new webpack.NoEmitOnErrorsPlugin(),//當webpack編譯錯誤的時候,來中端打包進程,防止錯誤代碼打包到文件中 // https://github.com/ampedandwired/html-webpack-plugin // 該插件可自動生成一個 html5 文件或使用模板文件將編譯好的代碼注入進去⑥ new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', inject: true }), new CopyWebpackPlugin([//復制插件 { from: path.resolve(__dirname, '../static'), to: config.dev.assetsSubDirectory, ignore: ['.*']//忽略.*的文件 } ]) ] }) module.exports = new Promise((resolve, reject) => { portfinder.basePort = process.env.PORT || config.dev.port //查找端口號 portfinder.getPort((err, port) => { if (err) { reject(err) } else { //端口被占用時就重新設置evn和devServer的端口 process.env.PORT = port devWebpackConfig.devServer.port = port //友好地輸出信息 devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ compilationSuccessInfo: { messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], }, onErrors: config.dev.notifyOnErrors ? utils.createNotifierCallback() : undefined })) resolve(devWebpackConfig) } }) })

注釋:
①、點擊→friendly-errors-webpack-plugin文檔傳送門
②、點擊→process文檔傳送門
③、點擊→babel-loader文檔傳送門
④、點擊→devtool文檔傳送門
⑤、點擊→webpack的HotModuleReplacementPlugin文檔傳送門
⑥、點擊→html-webpack-plugin文檔傳送門

7、webpack.prod.conf.js

'use strict' const path = require('path') const utils = require('./utils') const webpack = require('webpack') const config = require('../config') const merge = require('webpack-merge') const baseWebpackConfig = require('./webpack.base.conf') const CopyWebpackPlugin = require('copy-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') const ExtractTextPlugin = require('extract-text-webpack-plugin') const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') const UglifyJsPlugin = require('uglifyjs-webpack-plugin') const env = require('../config/prod.env') const webpackConfig = merge(baseWebpackConfig, { module: { //調用utils.styleLoaders的方法 rules: utils.styleLoaders({ sourceMap: config.build.productionSourceMap,//開啟調試的模式。默認為true extract: true, usePostCSS: true }) }, devtool: config.build.productionSourceMap ? config.build.devtool : false, output: { path: config.build.assetsRoot, filename: utils.assetsPath('js/[name].[chunkhash].js'), chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') }, plugins: [ new webpack.DefinePlugin({ 'process.env': env }), new UglifyJsPlugin({ uglifyOptions: { compress: {//壓縮 warnings: false//警告:true保留警告,false不保留 } }, sourceMap: config.build.productionSourceMap, parallel: true }), new ExtractTextPlugin({//抽取文本。比如打包之后的index頁面有style插入,就是這個插件抽取出來的,減少請求 filename: utils.assetsPath('css/[name].[contenthash].css'), allChunks: true, }), new OptimizeCSSPlugin({//優化css的插件 cssProcessorOptions: config.build.productionSourceMap ? { safe: true, map: { inline: false } } : { safe: true } }), new HtmlWebpackPlugin({//html打包 filename: config.build.index, template: 'index.html', inject: true, minify: {//壓縮 removeComments: true,//刪除注釋 collapseWhitespace: true,//刪除空格 removeAttributeQuotes: true//刪除屬性的引號 }, chunksSortMode: 'dependency'//模塊排序,按照我們需要的順序排序 }), new webpack.HashedModuleIdsPlugin(), new webpack.optimize.ModuleConcatenationPlugin(), new webpack.optimize.CommonsChunkPlugin({//抽取公共的模塊 name: 'vendor', minChunks (module) { return ( module.resource && /\.js$/.test(module.resource) && module.resource.indexOf( path.join(__dirname, '../node_modules') ) === 0 ) } }), new webpack.optimize.CommonsChunkPlugin({ name: 'manifest', minChunks: Infinity }), new webpack.optimize.CommonsChunkPlugin({ name: 'app', async: 'vendor-async', children: true, minChunks: 3 }), new CopyWebpackPlugin([//復制,比如打包完之后需要把打包的文件復制到dist里面 { from: path.resolve(__dirname, '../static'), to: config.build.assetsSubDirectory, ignore: ['.*'] } ]) ] }) if (config.build.productionGzip) { const CompressionWebpackPlugin = require('compression-webpack-plugin') webpackConfig.plugins.push( new CompressionWebpackPlugin({ asset: '[path].gz[query]', algorithm: 'gzip', test: new RegExp( '\\.(' + config.build.productionGzipExtensions.join('|') + ')$' ), threshold: 10240, minRatio: 0.8 }) ) } if (config.build.bundleAnalyzerReport) { const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin webpackConfig.plugins.push(new BundleAnalyzerPlugin()) } module.exports = webpackConfig

注釋:webpack.prod.conf.js詳細內容

五、結語

第一篇博文總在想要寫點什么,就根據自己的經驗加查了下文檔寫了這么一篇工具類的文章,由于有些插件有些用法會重復,所以按照文章先后,寫過用法或者給過鏈接的插件,在后面的文章就省略了,有時間的建議從頭開始,如果單獨看某章節的話遇到不懂的語法或插件可全文查找,也可以點擊更多安裝包傳送門進行查找閱讀。本文將vue本身自帶的英文注釋刪除了,但英文注釋非常有用可以仔細閱讀,希望對大家學習vue和webpack都有所幫助。

轉自:https://segmentfault.com/a/1190000014804826

轉載于:https://www.cnblogs.com/sichaoyun/p/9241829.html

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

總結

以上是生活随笔為你收集整理的vue-cli脚手架中webpack配置基础文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久免费视频这里只有精品 | 天天综合中文 | 国产一二区免费视频 | 99亚洲精品在线 | 亚洲黄色一级大片 | 久久99国产精品二区护士 | 99久久精品免费一区 | 久在线观看视频 | 中文字幕在线人 | 久久久久久久久久免费视频 | 久久手机免费观看 | 青青河边草免费观看 | 国内视频在线 | 99久久99视频| 成年人在线观看视频免费 | 在线黄色国产 | 九色精品免费永久在线 | 国产精品乱码久久久久久1区2区 | 国产视频亚洲视频 | 免费成人av在线 | 亚洲免费成人 | 色播六月天 | 亚洲aⅴ在线| 六月丁香在线观看 | av电影久久 | 久久久精品国产一区二区电影四季 | 成人动漫一区二区三区 | 夜夜澡人模人人添人人看 | 免费男女羞羞的视频网站中文字幕 | www.91国产 | 91在线最新| 久久综合成人 | 成人一区二区三区中文字幕 | 中文字幕在线观看一区 | 福利久久久 | 中文字幕在线日 | 中文字幕在线观看视频免费 | 麻豆91网站| 亚洲美女精品 | 亚洲视频高清 | 成人午夜久久 | 高清av不卡| 国产精品免费一区二区三区在线观看 | 国产一区二三区好的 | 国产精品自产拍在线观看蜜 | 夜夜躁日日躁狠狠久久88av | 亚洲伊人网在线观看 | 97超视频在线观看 | 在线观看av麻豆 | 婷婷久久一区二区三区 | 毛片网站免费 | 国产日韩精品一区二区三区在线 | 免费在线观看日韩视频 | 国产亚洲精品久久19p | 国产手机精品视频 | 五月婷婷一区 | 成人av免费在线观看 | 色综合激情网 | 香蕉手机在线 | 免费看黄在线网站 | 色婷婷天天干 | 精品亚洲欧美无人区乱码 | av福利在线播放 | 日本中文字幕在线视频 | 精品一区二区久久久久久久网站 | 黄色片网站 | 日韩免费小视频 | 国产粉嫩在线观看 | 天天躁天天狠天天透 | 婷婷亚洲最大 | av网址aaa | av中文字幕免费在线观看 | 久久嗨 | 国产一区二区免费在线观看 | 成人国产精品电影 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 麻豆 91 在线 | a级国产乱理伦片在线观看 亚洲3级 | 欧美日韩精品在线观看视频 | 超碰最新网址 | 免费在线观看污网站 | 韩国av电影在线观看 | 久久精品久久99精品久久 | 精品国产一二三四区 | 中国精品少妇 | 日韩理论电影在线观看 | 亚洲在线激情 | 国产精品网址在线观看 | 色综合久久88色综合天天 | 日韩在线观看视频中文字幕 | 精品一区电影国产 | 久久www免费人成看片高清 | av网站在线免费观看 | 成人一级免费视频 | 四虎8848免费高清在线观看 | 久久高清国产 | 高清av中文字幕 | 午夜久久电影网 | 久久久国产精品亚洲一区 | 欧美日韩激情视频8区 | 国产亚洲视频系列 | 久久精品看| 久久精品99视频 | 欧美大片mv免费 | 玖玖在线播放 | 中文字幕在线免费看 | 超碰国产在线 | 欧美另类网站 | 国产黄在线| av在线网站观看 | 干干操操| 九九久久成人 | 2021国产精品 | 久久亚洲成人网 | 久久久久久久99精品免费观看 | 免费观看91视频大全 | 欧美日韩在线免费观看 | 久久五月婷婷丁香 | 日韩免费一区二区在线观看 | 国产精品爽爽久久久久久蜜臀 | 在线观看国产一区二区 | 亚洲乱码中文字幕综合 | 91看片麻豆 | 欧美成年黄网站色视频 | wwwwwww色| 8x8x在线观看视频 | 色综合久久综合中文综合网 | 四月婷婷在线观看 | 精品福利国产 | 在线影视 一区 二区 三区 | 婷婷在线不卡 | 丁香网五月天 | 色国产在线 | 欧美日韩成人一区 | 激情视频在线观看网址 | 99国产成+人+综合+亚洲 欧美 | 激情综合网在线观看 | 天天综合狠狠精品 | 中文字幕一区二区三区四区久久 | 91网页版免费观看 | 成人a免费 | 91久久偷偷做嫩草影院 | 日日夜夜噜噜噜 | 狠狠狠狠狠狠狠狠干 | 精品久久久成人 | 丰满少妇在线观看资源站 | 久久伦理网 | 四虎影院在线观看av | 婷婷网五月天 | 最近日本韩国中文字幕 | 久久久久电影网站 | 精品美女国产在线 | 97精品在线视频 | 亚洲电影第一页av | 香蕉视频一级 | 国产精品日韩高清 | 国产一区二区手机在线观看 | 国产成人精品午夜在线播放 | 99综合视频 | 久久久99久久 | 国产日韩欧美在线观看视频 | 国产一区二区观看 | 精品一区二区电影 | av电影亚洲 | 国产精品影音先锋 | 不卡的av中文字幕 | 一区二区三区免费看 | 亚洲精品在线播放视频 | 麻豆传媒视频在线 | 日本精品一区二区在线观看 | 久久久久女人精品毛片 | 91福利在线观看 | 欧美网站黄色 | 国产专区在线 | 精品一区在线看 | 久久狠狠亚洲综合 | 操高跟美女 | 久九视频 | 99精品乱码国产在线观看 | 国产精品一区久久久久 | 中文字幕视频在线播放 | 九色自拍视频 | 91伊人久久大香线蕉蜜芽人口 | 国产精品美女久久久久久久久久久 | 国产免费久久av | 国产淫片 | 91人人澡人人爽 | 国产精品精品久久久久久 | 国产午夜一区二区 | 制服丝袜欧美 | 久久久亚洲麻豆日韩精品一区三区 | 精品久久久影院 | 麻豆免费视频 | 婷婷中文字幕 | 天天干,天天干 | 中文字幕 国产视频 | 最近中文字幕久久 | 99视频精品| 亚洲天堂网在线视频 | 久久久久国产成人精品亚洲午夜 | 亚洲精品欧美成人 | www.黄色在线 | 婷婷久久婷婷 | 91香蕉视频在线下载 | 日韩色一区二区三区 | 亚洲精品三级 | 亚洲aⅴ一区二区三区 | 五月天婷婷丁香花 | 精品美女视频 | 日韩网 | 亚洲aⅴ乱码精品成人区 | 99热国产在线 | 日韩最新av | 亚洲国产伊人 | 国产在线视频不卡 | 亚洲精品福利视频 | 免费看麻豆 | 国产精品嫩草55av | 国产超碰在线观看 | 日韩激情免费视频 | 91精品视频在线 | 色全色在线资源网 | 四虎国产精品成人免费4hu | 国产成人av一区二区三区在线观看 | 夜夜夜夜夜夜操 | 国产视| 久草香蕉在线 | 久草视频在线免费播放 | av超碰在线观看 | 日韩av影片在线观看 | 国产一区二区在线观看免费 | 欧美午夜a | 人人超在线公开视频 | 日韩一区视频在线 | 91亚洲欧美 | 黄色三级免费看 | 免费三级黄 | 久久久久久久免费观看 | 婷婷网址| 久草免费在线视频观看 | 国产一区在线观看免费 | 国产黄色免费电影 | 中文字幕一区二区三区乱码在线 | 超碰在线人人97 | 日日干夜夜草 | 香蕉网在线播放 | 超碰97在线看| 国产.精品.日韩.另类.中文.在线.播放 | 久久久久久久久福利 | 91精品国产91久久久久久三级 | 五月天狠狠操 | 亚洲人xxx| 久久久免费毛片 | 久久手机在线视频 | 成人午夜电影久久影院 | 国产在线va | 人人舔人人插 | 九九99视频 | 国产欧美日韩视频 | 日日夜精品 | 国产一区二区三区午夜 | 亚洲精品小区久久久久久 | 久久精品4 | av中文字幕在线免费观看 | avove黑丝 | 欧美一级视频一区 | 中文字幕在线观看不卡 | 激情图片qvod | 久久激情小说 | 午夜久久久久久久久久影院 | 亚洲精品一区中文字幕乱码 | 久久久久亚洲国产精品 | 国产 色 | 欧美先锋影音 | 91av电影| www.色五月| 中文字幕人成不卡一区 | 五月天色综合 | 色狠狠久久av五月综合 | 亚洲精品在线网站 | 在线黄色观看 | 日韩一区二区三区观看 | 亚洲国产片色 | 中文字幕日韩一区二区三区不卡 | 99热官网 | 黄色在线看网站 | 国产一区二区三区午夜 | 国产精品入口麻豆www | 国产中文在线播放 | 在线看国产视频 | av福利第一导航 | 一区二区三区电影 | 久久香蕉国产精品麻豆粉嫩av | 摸阴视频 | 久久6精品 | 99视频精品免费观看, | 亚洲九九| 91精品久久久久久综合乱菊 | 成人在线播放免费观看 | 热久久这里只有精品 | 日韩在线精品 | 亚洲精品在线视频观看 | 国产欧美日韩视频 | 青青河边草免费观看 | 国产精品女同一区二区三区久久夜 | 久久成人18免费网站 | 日韩精品在线免费播放 | 天天射综合| 国产午夜三级一区二区三 | 国产精品无 | 国产精品久久电影观看 | 日韩av在线网站 | 天天干天天在线 | 青青河边草观看完整版高清 | 九九视频网 | www.69xx| 国产精品涩涩屋www在线观看 | 中文字幕九九 | 91精品国产自产在线观看永久 | 在线 国产 日韩 | 欧美日韩免费在线观看视频 | 日韩网站中文字幕 | 国产日韩中文字幕 | 国产成人精品999 | 麻豆超碰| 久久一区二区三区日韩 | 狠狠插狠狠干 | 蜜桃传媒一区二区 | 欧美日韩不卡一区 | 99综合电影在线视频 | 不卡的av在线播放 | 波多野结衣在线视频一区 | 91久久国产精品 | 日本性久久 | 黄色在线观看免费网站 | 在线 影视 一区 | 免费高清在线观看成人 | 视频一区视频二区在线观看 | 日韩理论片在线 | 91精品国产欧美一区二区成人 | 99在线精品视频 | 91精品一区二区三区蜜桃 | 成人午夜性影院 | 91成人看片| 成人一区二区三区中文字幕 | 国产伦精品一区二区三区在线 | 99久久99久久免费精品蜜臀 | 国产精品久久久久久爽爽爽 | 四虎www | 91福利视频在线 | 亚洲综合情 | 国产精品福利午夜在线观看 | 日日夜夜天天人人 | avsex| 精品国产一区二区三区av性色 | 成人资源在线播放 | 欧美日韩国产在线一区 | 久久综合色综合88 | 亚洲精品影院在线观看 | 干综合网| 亚洲一二区视频 | 日韩av成人免费看 | 国产亚洲一区二区在线观看 | 97在线免费观看视频 | 免费看三级黄色片 | 久久成人一区二区 | 日韩欧美高清在线观看 | 91亚色在线观看 | 国产又粗又猛又爽 | 日韩美女久久 | 天天拍天天干 | 999热视频| 欧美一二区在线 | 激情视频在线高清看 | 超碰在线个人 | 国产中的精品av小宝探花 | 91麻豆精品国产91久久久久久久久 | 黄色免费大片 | 亚洲 欧美日韩 国产 中文 | 亚洲激情国产精品 | 成人一级免费电影 | 成人免费观看视频大全 | 日韩欧美在线第一页 | 免费 在线 中文 日本 | 久久久国产精品网站 | 欧美大片www| 久久免费视频在线观看30 | 中文字幕久久精品一区 | 中文字幕电影高清在线观看 | 中中文字幕av在线 | www.com黄| 精品久久国产精品 | 伊人资源视频在线 | 国产视频精品免费播放 | 国产第一福利 | 精品久久亚洲 | 人人看人人做人人澡 | 欧美性黑人 | 久久经典国产视频 | 黄色国产区 | 国产69精品久久久久99尤 | 欧美综合国产 | 国产丝袜美腿在线 | 欧美乱大交 | 99草视频| 91精品办公室少妇高潮对白 | 国内精品久久久久久久97牛牛 | 91亚洲激情 | 91精品国产乱码久久桃 | 国产一二三四在线视频 | 国产 日韩 在线 亚洲 字幕 中文 | 国产亚洲精品久久久久久无几年桃 | 激情综合狠狠 | 玖玖在线播放 | a电影在线观看 | 久久亚洲专区 | 深爱激情婷婷网 | 欧美精品国产精品 | 久久免费视频网 | 色婷婷激婷婷情综天天 | 国产馆在线播放 | 在线观看视频一区二区 | 国产一卡在线 | 亚洲精品456在线播放第一页 | 国产精品女同一区二区三区久久夜 | 五月婷婷一级片 | 亚洲在线视频免费 | 蜜臀精品久久久久久蜜臀 | 欧美嫩草影院 | 97免费在线观看视频 | 96超碰在线 | 欧美日韩国产伦理 | 精品一区二区电影 | 四虎国产永久在线精品 | 成年人黄色免费视频 | 国内一级片在线观看 | 99国产一区二区三精品乱码 | 九九精品视频在线观看 | 国产在线高清精品 | 少妇bbbb搡bbbb桶 | 在线看污网站 | 国产日韩精品欧美 | 黄色亚洲大片免费在线观看 | 欧洲亚洲精品 | 国产精品乱码在线 | 中文字幕日韩精品有码视频 | 精品久久久久国产 | 一区二区三区免费在线播放 | av黄在线播放 | 久久久久久久久久久综合 | 日韩成人精品一区二区三区 | 久久久久免费电影 | 久久久久久久久艹 | a色网站| 国产精品系列在线 | 日本中文字幕在线免费观看 | 国产黄色av | 日韩精品久久一区二区三区 | 亚洲欧洲视频 | 日韩 精品 一区 国产 麻豆 | 国产精品久久久av久久久 | 成人午夜电影在线 | 国内亚洲精品 | 国产精品久久久久久爽爽爽 | 91在线公开视频 | 亚洲一区二区麻豆 | 97超级碰碰碰碰久久久久 | 亚洲精品视频在线观看免费视频 | 日韩欧美视频免费看 | 黄色软件在线观看免费 | 日韩免费在线观看网站 | 久草视频在线资源 | 又爽又黄又刺激的视频 | 极品中文字幕 | 久久99视频免费 | 91资源在线观看 | 久久久午夜精品福利内容 | 999久久国精品免费观看网站 | 日三级在线 | 国产一级电影网 | 国产一级片直播 | 中文字幕精品www乱入免费视频 | 婷婷丁香综合 | wwwww.国产 | 日日爱网址 | 91av网站在线观看 | 久草国产精品 | 久久天天拍| 成人福利av | www.av在线播放| 午夜色大片在线观看 | 91传媒在线看 | 亚洲精品欧洲精品 | 成人在线观看资源 | 亚洲精品国产精品国自产在线 | 欧美在线观看小视频 | 超碰在线最新 | 蜜臀av性久久久久av蜜臀三区 | 精品美女久久久久 | 激情五月***国产精品 | 久久久久一区二区三区四区 | 激情九九 | 亚洲免费av片 | 国产精品欧美久久久久无广告 | 一级国产视频 | zzijzzij亚洲日本少妇熟睡 | 在线中文字幕观看 | 国产精品涩涩屋www在线观看 | 99久久精品久久久久久动态片 | 精品国产不卡 | 精品在线视频观看 | 免费精品国产va自在自线 | 国产精品欧美久久久久久 | 91福利免费 | 97超碰色偷偷 | 久久人人97超碰精品888 | 天天夜夜亚洲 | 999国产| 一级免费黄色 | 日韩欧美在线高清 | 激情网五月婷婷 | 在线成人中文字幕 | 免费国产在线精品 | 国内外激情视频 | 在线午夜av | 日韩免费一级a毛片在线播放一级 | 视频国产在线 | av黄网站 | 五月婷香蕉久色在线看 | av高清一区二区三区 | japanesefreesexvideo高潮 | 亚洲天堂视频在线 | 97人人模人人爽人人喊中文字 | 久久综合影视 | 在线香蕉视频 | 超碰97网站 | 欧美激情精品久久久久久免费印度 | 日韩高清精品免费观看 | 国内精品久久久久久久久久 | 久99久视频 | 视频在线观看入口黄最新永久免费国产 | 国产美女视频免费 | 精品国偷自产国产一区 | 91视频观看免费 | 国产在线观看二区 | 国产视频一区二区三区在线 | 免费在线看成人av | 日本久久久久久久久 | 日韩免费一级电影 | 国产一级二级视频 | 97超碰国产精品女人人人爽 | 中文字幕在线观看完整版电影 | 精品免费一区二区三区 | 亚洲三级黄色 | 精品国偷自产在线 | 99福利影院| 夜夜骑首页 | 日韩精品不卡在线观看 | 狠狠色狠狠色合久久伊人 | 久草在线 | 国产精品不卡一区 | 欧美视频不卡 | 亚洲人成综合 | 天天综合网国产 | 91大神精品视频在线观看 | 91免费黄视频| 美女黄网久久 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 日本中文字幕在线 | 色综合久久久久综合 | 日韩欧美一区二区在线 | 亚洲国产理论片 | 91色国产在线 | 四虎国产 | 黄色三级免费 | 成年人在线免费视频观看 | 日韩欧美一区二区在线 | 久久无码精品一区二区三区 | 久久国产一区二区三区 | 婷婷在线视频观看 | 久久99视频免费观看 | 亚州国产精品久久久 | 99福利片| 特级a老妇做爰全过程 | 欧美日韩国产在线 | 天天搞天天干天天色 | 韩国av免费看 | 五月丁色 | 黄色片视频免费 | 青青河边草观看完整版高清 | 成人毛片100免费观看 | 欧美日韩国产xxx | 天天色欧美 | 免费欧美高清视频 | 色丁香婷婷 | 六月丁香综合网 | 91在线永久 | 国产精品18久久久久久首页狼 | 国产精品videoxxxx | 国产资源网 | 天天干天天拍天天操 | 人人干97 | 久久的色| 国产精品自产拍在线观看 | 国产v在线 | 久久黄页 | 在线中文字幕av观看 | 欧美视频99 | 国产视频精品久久 | 九月婷婷综合网 | 少妇bbbb揉bbbb日本 | 久久久www成人免费毛片 | 天天干天天天 | 在线色视频小说 | 美女视频网站久久 | 亚洲精选久久 | 在线观看的av | 亚洲欧美日韩一二三区 | 午夜精品久久久久久久99 | 日韩欧美高清不卡 | 国产成人一级 | 最新高清无码专区 | 在线一区av | 国产日韩欧美在线播放 | 中文字幕久久久精品 | 日韩激情免费视频 | 久久99久久99精品中文字幕 | av在线进入| 日韩字幕在线 | 狠狠干网站| 中文字幕成人一区 | 日韩精品一区二区在线观看视频 | 国产又黄又猛又粗 | 永久免费的啪啪网站免费观看浪潮 | 亚洲欧美日韩精品久久奇米一区 | 黄色影院在线免费观看 | 国产精品九九九九九九 | 中国一级特黄毛片大片久久 | 少妇高潮流白浆在线观看 | 国产精品1024 | 久久久久这里只有精品 | 国产精品一区二区久久国产 | 日日草天天干 | 中文字幕在线观看网址 | 久久 一区 | 久草在线免费在线观看 | 韩国三级一区 | 免费福利在线观看 | 成年人视频免费在线播放 | 国产女教师精品久久av | 色视频国产直接看 | 日韩美在线观看 | 久久免费观看视频 | 欧美 国产 视频 | 激情视频在线高清看 | 久久久久国产精品www | 国产91精品一区二区麻豆亚洲 | 久久精品一区二区三区国产主播 | 亚洲天堂网在线视频 | 免费成人黄色 | 国产一区在线免费观看视频 | 国产精品观看在线亚洲人成网 | 国产精品美女久久久 | 又黄又爽又色无遮挡免费 | 欧美激情精品久久久久久免费印度 | 国产黄色精品在线观看 | 国产福利小视频在线 | 中文字幕久久久精品 | 日韩中文字幕91 | 久久人人爽爽 | 久久免费看a级毛毛片 | avav片 | 久久成人高清视频 | 国产成人精品一区二区三区在线 | 亚洲国产午夜 | 日本系列中文字幕 | 国产三级视频在线 | 超碰电影在线观看 | 在线观看的a站 | 天天操天天干天天干 | 99精品免费视频 | 蜜臀av夜夜澡人人爽人人 | 在线精品观看 | 亚洲欧洲成人精品av97 | 免费成人看片 | 视频国产在线观看18 | 亚洲精品自在在线观看 | 天天草天天草 | 欧美成人高清 | ww视频在线观看 | 色综合天天综合网国产成人网 | 一区二区三区四区精品视频 | 日韩精品中文字幕一区二区 | 狠狠色丁香婷婷综合 | 国产又粗又长又硬免费视频 | 国产永久免费高清在线观看视频 | 天天综合狠狠精品 | 天天插综合 | www.久热| 欧美另类xxx | 中文字幕高清在线 | 在线观看视频福利 | 婷婷国产一区二区三区 | 91视频在线自拍 | 日韩高清在线不卡 | 香蕉一区| 国产福利91精品一区二区三区 | 久草视频在线资源 | 又爽又黄又无遮挡网站动态图 | 亚洲三级毛片 | 日韩精品一区在线观看 | 国产精品黄色影片导航在线观看 | 国内精品久久久久久久久久 | 日韩美女av在线 | 国产精品美女视频 | 亚洲乱码在线 | 欧美在线aaa | 成人一区电影 | 精品美女久久久久久免费 | av在线播放一区二区三区 | 久久综合成人 | 欧美一区二区三区在线观看 | 九九视频免费在线观看 | 手机av观看 | 国产99久久久国产精品免费看 | 亚洲欧美久久 | 最近免费观看的电影完整版 | 久久这里只有精品视频99 | 国产精品美乳一区二区免费 | 国产不卡一二三区 | 在线观看精品黄av片免费 | 精品视频在线观看 | 日韩欧美高清不卡 | 精品美女在线视频 | 国产中文字幕视频在线 | 欧美性色黄 | 东方av免费在线观看 | 天天综合精品 | 天天射天天操天天干 | 69久久夜色精品国产69 | 狠狠久久综合 | 一区二区三区免费看 | 亚洲精品mv在线观看 | 黄色在线看网站 | 一区二区视频在线观看免费 | 四虎成人免费观看 | 亚洲播播 | 久久精品国产免费 | 久久综合久久综合久久综合 | 99久久日韩精品免费热麻豆美女 | 99久久99久久免费精品蜜臀 | 在线观看中文字幕2021 | 超碰免费在线公开 | 99久久精品午夜一区二区小说 | 黄色av电影在线 | 成在人线av | 久久精品国产亚洲精品 | 久久精品视频国产 | 天天色天天操天天爽 | 国内精品在线看 | 午夜视频久久久 | 天天拍夜夜拍 | 91精品久久久久久粉嫩 | 中文字幕在线字幕中文 | 成人xxxx| 天天射天天色天天干 | 欧美日韩在线视频一区二区 | 精品人妖videos欧美人妖 | 中文字幕中文字幕 | 免费看精品久久片 | 91麻豆精品国产91久久久无需广告 | 九九久久国产精品 | 91女人18片女毛片60分钟 | 视频在线91| 91精品人成在线观看 | a√国产免费a | 中文欧美字幕免费 | 九九精品视频在线观看 | 亚洲黄色软件 | 国产日韩高清在线 | 色婷婷综合久久久久 | 欧美高清视频不卡网 | 丰满少妇在线 | 亚洲精品在线观看视频 | 亚洲黄色影院 | 91av中文| av在线小说 | av免费在线观看网站 | 超碰97人| 成人在线观看av | 超碰99在线| 欧美性生活小视频 | 久久综合成人 | 亚洲春色综合另类校园电影 | 超碰97.com | 久久久91精品国产一区二区三区 | 亚洲专区在线视频 | 日韩精品视| 国产精品久久久久久久久久久久久久 | 97国产视频 | 国产精品专区h在线观看 | 国产热re99久久6国产精品 | 精品久久久久一区二区国产 | 免费中文字幕视频 | 亚洲精品电影在线 | 黄色影院在线免费观看 | 亚洲精品小视频 | 日韩动漫免费观看高清完整版在线观看 | www国产亚洲 | 97在线观看视频 | 九九热精品视频在线观看 | 草久在线播放 | 成人高清在线观看 | 午夜精品视频一区二区三区在线看 | bayu135国产精品视频 | 午夜丰满寂寞少妇精品 | 日日摸日日爽 | 成人黄色大片在线免费观看 | 午夜精品久久久久 | 麻豆成人在线观看 | 日韩欧三级 | 欧美va天堂在线电影 | 精品乱码一区二区三四区 | 日韩视频一 | 午夜av激情 | 国产69精品久久久久久久久久 | 91精品国产福利在线观看 | 五月婷在线观看 | 久久久国产在线视频 | 99久热在线精品视频成人一区 | 97超碰色 | 国产成人99av超碰超爽 | av手机在线播放 | 亚洲午夜精品久久久久久久久 | 激情欧美一区二区三区 | 制服丝袜在线 | 一区二区中文字幕在线 | av超碰在线 | 国产一区二区不卡视频 | 国产护士av | 成人性生交视频 | 九七人人干 | 国产色在线视频 | 国产亚洲精品久久久久久无几年桃 | 在线不卡视频 | 99爱精品视频 | 91久草视频 | 久久久鲁| 国产精品成人在线 | 免费观看视频的网站 | av福利第一导航 | 在线之家免费在线观看电影 | 不卡的av在线播放 | 欧美精品首页 | 超级碰碰碰碰 | 国产黄色播放 | 国产中文欧美日韩在线 | 大荫蒂欧美视频另类xxxx | av中文字幕免费在线观看 | 黄色软件大全网站 | 91看片淫黄大片一级在线观看 | 欧美了一区在线观看 | 丁香六月婷婷激情 | 亚洲成人国产精品 | 中文字幕日本在线观看 | 国产日韩欧美中文 | 久久精品官网 | 亚洲成人午夜av | 久久久久久久久久久精 | av在线播放快速免费阴 | 天天综合天天做 | 欧美精品乱码99久久影院 | 亚洲精品资源在线观看 | 人人干网 | 五月天激情综合网 | 国产99久久久国产精品成人免费 | 国产亚洲一区二区在线观看 | av中文在线影视 | 国产婷婷一区二区 | 99r在线观看 | 97日日碰人人模人人澡分享吧 | 干狠狠 | 久久精品国产免费看久久精品 | 久国产在线播放 | 国产在线视频在线观看 | 久久99亚洲精品久久久久 | 亚洲精品国产日韩 | 999精品网 | 开心激情五月网 | 中文字幕免费在线看 | 国产精品欧美久久久久天天影视 | 激情xxxx| 国产精品电影一区二区 | 精精国产xxxx视频在线播放 | 久久免费视频6 | 欧美日韩国产三级 | 国产视频二区三区 | 操操操日日日干干干 | 日韩欧美在线一区 | 成人精品一区二区三区电影免费 | 欧美精品黑人性xxxx | av福利在线 | 91系列在线| 中文av资源站 | 国产精品视频久久久 | 亚洲伊人网在线观看 | www.福利视频 | 九九精品毛片 | 成人在线免费看视频 | 99re中文字幕 | 黄色一级免费网站 | 亚洲特级毛片 | 三级黄免费看 | 亚洲成av片人久久久 | 天天射天天搞 | 欧美日韩国产一区二区在线观看 | 免费一级黄色 | 欧美精品中文 | 亚洲国产一区二区精品专区 | 国产精品综合久久久久久 | 亚在线播放中文视频 | 日本久久成人中文字幕电影 | 亚洲精品人人 | 久久视频99 | 91夫妻自拍 | 波多野结衣在线视频免费观看 | 在线小视频 | .精品久久久麻豆国产精品 亚洲va欧美 | 亚洲综合黄色 | 又黄又爽又色无遮挡免费 | 午夜精品久久久久久久久久久久久久 | 欧美天堂视频在线 | 叶爱av在线 | 亚洲精品国偷拍自产在线观看 | 中文字幕色站 | 免费福利在线观看 | 欧美精品久久久久久 | 日日碰狠狠躁久久躁综合网 | 午夜国产福利在线观看 | 69国产成人综合久久精品欧美 | 香蕉色综合| 91成人网在线观看 | 人人干在线 | 国产成人黄色av | 99九九视频 | 国产一级片播放 | 最近中文字幕免费av | 99久久精品免费看国产麻豆 | 国产精品久久久久久久av大片 | 天天操夜夜操夜夜操 | 久久久亚洲网站 | 日韩大片在线免费观看 | 人人射人人澡 | 精品国产三级 | 久久国产a| 超碰在线个人 | 久久精品国产精品亚洲 | 精品电影一区二区 | www毛片com| 97小视频 | 国产精品 国产精品 | 成年人视频在线观看免费 | 97超碰在线免费观看 | 91精品视频在线观看免费 | 精品视频免费在线 | 国产成人一区二区三区影院在线 | 蜜臀av夜夜澡人人爽人人 | av中文天堂在线 | 色综合久久久久综合体桃花网 | 亚洲国产中文字幕在线观看 | 久草在线网址 | 国内精品久久久久国产 | 精品亚洲免费视频 | 韩国av免费在线 | 久久久免费看片 | 欧美日韩高清一区二区 国产亚洲免费看 | 亚洲jizzjizz日本少妇 | 国产亚洲在线视频 | 九九在线国产视频 | 免费精品国产 | 国产黄色大片免费看 | 丁香视频在线观看 | 亚洲精品美女 | 久久五月婷婷丁香社区 | 久久精品国产精品亚洲精品 | 黄色在线视频网址 | 国产精品第7页 | 国产免费xvideos视频入口 | 天天干亚洲 | 色是在线视频 | 亚洲黄色av一区 | 91视频一8mav | www.99久久.com| 欧美日韩中文国产 | 精品久久久成人 | 毛片随便看| 日韩有码中文字幕在线 | 激情深爱 |