日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

vue

vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析

發布時間:2023/11/29 vue 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.下載vue-cli

?

[html]?view plain?copy
  • npm?install?vue-cli?-g??

  • vue-cli的使用與詳細介紹,可以到github上獲取https://github.com/vuejs/vue-cli

    ?

    ?

    2.安裝webpack項目模版

    [html]?view plain?copy
  • vue?init?<template-name>?<project-name>??
  • 比如:
    [html]?view plain?copy
  • vue?init?webpack?my-project??
  • 之后可以在當前目錄下下載該模版,然后 [html]?view plain?copy
  • npm?install??

  • 安裝所有的依賴包,可以得到如下的目錄結構

    3.目錄結構與文件配置說明

    首先對目錄結構進行說明, 1.build目錄,主要利用webpack與node插件啟動一些相關服務的js文件 2.config目錄主要是針對開發環境,生產環境,測試環境的配置信息 3.src是我們自己開發時的源碼目錄(可指定修改名稱) 4.static是一些第三方庫的包用到的靜態資源目錄(可指定修改名稱) 說明每個文件: 主要入口文件,dev-server.js文件,幾乎每一句話都進行了注釋,有些地方,涉及了其他關聯文件,下面也會有相應的注釋的方式 [html]?view plain?copy
  • //?引入檢查版本js模塊??
  • require('./check-versions')()??
  • //?引入配置文件信息模塊??
  • var?config?=?require('../config')??
  • //?判斷開發環境??
  • if?(!process.env.NODE_ENV)?process.env.NODE_ENV?=?JSON.parse(config.dev.env.NODE_ENV)??
  • //?引入nodejs的path模塊,進行一些路徑的操作,詳情可以查看node官方的api??
  • var?path?=?require('path')??
  • //?引入nodejs的一個框架express,可以幫助我們快速搭建一個node服務?github?https://github.com/expressjs/express??
  • var?express?=?require('express')??
  • //?引入node為webpack提供的一個模塊服務?github?https://github.com/webpack/webpack??
  • var?webpack?=?require('webpack')??
  • //?可以指定打開指定的url使用指定的瀏覽器或者應用,詳情可以去看一下github?https://github.com/sindresorhus/opn??
  • var?opn?=?require('opn')??
  • //?一個可以設置幫助我們進行服務器轉發代理的中間件?https://github.com/chimurai/http-proxy-middleware??
  • var?proxyMiddleware?=?require('http-proxy-middleware')??
  • //?根據當前啟動環境選擇加載相應的配置文件,webpack.prod.conf與webpack.dev.conf文件的說明后面也有??
  • var?webpackConfig?=?process.env.NODE_ENV?===?'testing'??
  • ????require('./webpack.prod.conf')??
  • ??:?require('./webpack.dev.conf')??
  • ??
  • //?端口號的設置??
  • var?port?=?process.env.PORT?||?config.dev.port??
  • //?獲取需要代理的服務api??
  • //?https://github.com/chimurai/http-proxy-middleware??
  • var?proxyTable?=?config.dev.proxyTable??
  • //?啟動一個express服務??
  • var?app?=?express()??
  • //?加載webpack配置??
  • var?compiler?=?webpack(webpackConfig)??
  • //?webpack的開發中間件,專門為webpack提供的一個簡單的中間件,可以讓文件都加載內存中,不去讀寫硬盤,并且當文件被改動的時候,不會刷新頁面就會部署成功??
  • var?devMiddleware?=?require('webpack-dev-middleware')(compiler,?{??
  • ??publicPath:?webpackConfig.output.publicPath,??
  • ??quiet:?true??
  • })??
  • //?一個為webpack提供的熱部署中間件。https://github.com/glenjamin/webpack-hot-middleware??
  • var?hotMiddleware?=?require('webpack-hot-middleware')(compiler,?{??
  • ??log:?()?=>?{}??
  • })??
  • //?當html被改變的時候,讓html被強制部署,使用這個中間件html-webpack-plugin,https://github.com/ampedandwired/html-webpack-plugin??
  • compiler.plugin('compilation',?function?(compilation)?{??
  • ??compilation.plugin('html-webpack-plugin-after-emit',?function?(data,?cb)?{??
  • ????hotMiddleware.publish({?action:?'reload'?})??
  • ????cb()??
  • ??})??
  • })??
  • ??
  • //?遍歷代理的配置信息,并且使用中間件加載進去??
  • Object.keys(proxyTable).forEach(function?(context)?{??
  • ??var?options?=?proxyTable[context]??
  • ??if?(typeof?options?===?'string')?{??
  • ????options?=?{?target:?options?}??
  • ??}??
  • ??app.use(proxyMiddleware(context,?options))??
  • })??
  • ??
  • //?當訪問找不到的頁面的時候,該中間件指定了一個默認的頁面返回https://github.com/bripkens/connect-history-api-fallback??
  • app.use(require('connect-history-api-fallback')())??
  • ??
  • //?使用中間件??
  • app.use(devMiddleware)??
  • ??
  • //?熱部署??
  • app.use(hotMiddleware)??
  • ??
  • //?根據配置信息拼接一個目錄路徑,然后將該路徑下的文件交給express的靜態目錄管理??
  • var?staticPath?=?path.posix.join(config.dev.assetsPublicPath,?config.dev.assetsSubDirectory)??
  • app.use(staticPath,?express.static('./static'))??
  • ??
  • var?uri?=?'http://localhost:'?+?port??
  • ??
  • devMiddleware.waitUntilValid(function?()?{??
  • ??console.log('>?Listening?at?'?+?uri?+?'\n')??
  • })??
  • //?導出的對象??
  • module.exports?=?app.listen(port,?function?(err)?{??
  • ??if?(err)?{??
  • ????console.log(err)??
  • ????return??
  • ??}??
  • ??
  • ??//?when?env?is?testing,?don't?need?open?it??
  • ??if?(process.env.NODE_ENV?!==?'testing')?{??
  • ????opn(uri)??
  • ??}??
  • })??
  • webpack.base.conf.js [html]?view plain?copy
  • var?path?=?require('path')??
  • var?config?=?require('../config')??
  • //?工具類,下面會用到??
  • var?utils?=?require('./utils')??
  • //?工程目錄,就是當前目錄build的上一層目錄??
  • var?projectRoot?=?path.resolve(__dirname,?'../')??
  • ??
  • var?env?=?process.env.NODE_ENV??
  • //?是否在開發環境中使用cssSourceMap,默認是false,該配置信息在config目錄下的index.js中可以查看??
  • var?cssSourceMapDev?=?(env?===?'development'?&&?config.dev.cssSourceMap)??
  • var?cssSourceMapProd?=?(env?===?'production'?&&?config.build.productionSourceMap)??
  • var?useCssSourceMap?=?cssSourceMapDev?||?cssSourceMapProd??
  • //?導出的對象,就是webpack的配置項,詳情可以參考的webpack的配置說明,這里會將出現的都一一說明一下??
  • module.exports?=?{??
  • ??//?指明入口函數??
  • ??entry:?{??
  • ????app:?'./src/main.js'??
  • ??},??
  • ??//?輸出配置項??
  • ??output:?{??
  • ????//?路徑,從config/index讀取的,值為:工程目錄下的dist目錄,需要的自定義的也可以去修改??
  • ????path:?config.build.assetsRoot,??
  • ????//?發布路徑,這里是的值為/,正式生產環境可能是服務器上的一個路徑,也可以自定義??
  • ????publicPath:?process.env.NODE_ENV?===?'production'???config.build.assetsPublicPath?:?config.dev.assetsPublicPath,??
  • ????filename:?'[name].js'??
  • ??},??
  • ??//?配置模塊如何被解析,就是import或者require的一些配置??
  • ??resolve:?{??
  • ????//?當使用require或者import的時候,自動補全下面的擴展名文件的擴展名,也就是說引入的時候不需要使用擴展名??
  • ????extensions:?['',?'.js',?'.vue',?'.json'],??
  • ????//?當我們require的東西找不到的時候,可以去node_modules里面去找,??
  • ????fallback:?[path.join(__dirname,?'../node_modules')],??
  • ????//?別名,在我們require的時候,可以使用這些別名,來縮短我們需要的路徑的長度??
  • ????alias:?{??
  • ??????'vue$':?'vue/dist/vue.common.js',??
  • ??????'src':?path.resolve(__dirname,?'../src'),??
  • ??????'assets':?path.resolve(__dirname,?'../src/assets'),??
  • ??????'components':?path.resolve(__dirname,?'../src/components')??
  • ????}??
  • ??},??
  • ??//?同上??
  • ??resolveLoader:?{??
  • ????fallback:?[path.join(__dirname,?'../node_modules')]??
  • ??},??
  • ??//?對相應文件的編譯使用什么工具的配置??
  • ??module:?{??
  • ????//?loader之前的配置,會對.vue,.js的文件用eslint進行編譯,include是包含的文件,exclude是排除的文件,可以使用的正則??
  • ????preLoaders:?[??
  • ??????{??
  • ????????test:?/\.vue$/,??
  • ????????loader:?'eslint',??
  • ????????include:?[??
  • ??????????path.join(projectRoot,?'src')??
  • ????????],??
  • ????????exclude:?/node_modules/??
  • ??????},??
  • ??????{??
  • ????????test:?/\.js$/,??
  • ????????loader:?'eslint',??
  • ????????include:?[??
  • ??????????path.join(projectRoot,?'src')??
  • ????????],??
  • ????????exclude:?/node_modules/??
  • ??????}??
  • ????],??
  • ????//?這里也是相應的配置,test就是匹配文件,loader是加載器,??
  • ????//?query比較特殊,當大小超過10kb的時候,會單獨生成一個文件,文件名的生成規則是utils提供的方法,當小于10kb的時候,就會生成一個base64串放入js文件中??
  • ????loaders:?[??
  • ??????{??
  • ????????test:?/\.vue$/,??
  • ????????loader:?'vue'??
  • ??????},??
  • ??????{??
  • ????????test:?/\.js$/,??
  • ????????loader:?'babel',??
  • ????????include:?[??
  • ??????????path.join(projectRoot,?'src')??
  • ????????],??
  • ????????exclude:?/node_modules/??
  • ??????},??
  • ??????{??
  • ????????test:?/\.json$/,??
  • ????????loader:?'json'??
  • ??????},??
  • ??????{??
  • ????????test:?/\.(png|jpe?g|gif|svg)(\?.*)?$/,??
  • ????????loader:?'url',??
  • ????????query:?{??
  • ??????????limit:?10000,??
  • ??????????name:?utils.assetsPath('img/[name].[hash:7].[ext]')??
  • ????????}??
  • ??????},??
  • ??????{??
  • ????????test:?/\.(woff2?|eot|ttf|otf)(\?.*)?$/,??
  • ????????loader:?'url',??
  • ????????query:?{??
  • ??????????limit:?10000,??
  • ??????????name:?utils.assetsPath('fonts/[name].[hash:7].[ext]')??
  • ????????}??
  • ??????}??
  • ????]??
  • ??},??
  • ??//?eslint的配置??
  • ??eslint:?{??
  • ????formatter:?require('eslint-friendly-formatter')??
  • ??},??
  • ??//?vue-loader的配置??
  • ??vue:?{??
  • ????loaders:?utils.cssLoaders({?sourceMap:?useCssSourceMap?}),??
  • ????postcss:?[??
  • ??????require('autoprefixer')({??
  • ????????browsers:?['last?2?versions']??
  • ??????})??
  • ????]??
  • ??}??
  • }??

  • webpack.dev.comf.js [html]?view plain?copy
  • var?config?=?require('../config')??
  • var?webpack?=?require('webpack')??
  • //?https://github.com/survivejs/webpack-merge?提供一個合并生成新對象函數??
  • var?merge?=?require('webpack-merge')??
  • var?utils?=?require('./utils')??
  • var?baseWebpackConfig?=?require('./webpack.base.conf')??
  • var?HtmlWebpackPlugin?=?require('html-webpack-plugin')??
  • var?FriendlyErrors?=?require('friendly-errors-webpack-plugin')??
  • ??
  • //?在瀏覽器不刷新的情況下,也可以看到改變的效果,如果刷新失敗了,他就會自動刷新頁面??
  • Object.keys(baseWebpackConfig.entry).forEach(function?(name)?{??
  • ??baseWebpackConfig.entry[name]?=?['./build/dev-client'].concat(baseWebpackConfig.entry[name])??
  • })??
  • ??
  • module.exports?=?merge(baseWebpackConfig,?{??
  • ??module:?{??
  • ????//?后面會有對utils的解釋,這里是對單獨的css文件,用相應的css加載器來解析??
  • ????loaders:?utils.styleLoaders({?sourceMap:?config.dev.cssSourceMap?})??
  • ??},??
  • ??//?在開發模式下,可以在webpack下面找到js文件,在f12的時候,??
  • ??devtool:?'#eval-source-map',??
  • ??//?將webpack的插件放入??
  • ??plugins:?[??
  • ????//?通過插件修改定義的變量??
  • ????new?webpack.DefinePlugin({??
  • ??????'process.env':?config.dev.env??
  • ????}),??
  • ????//?webpack優化的這個一個模塊,https://github.com/glenjamin/webpack-hot-middleware#installation--usage??
  • ????new?webpack.optimize.OccurrenceOrderPlugin(),??
  • ????//?熱加載??
  • ????new?webpack.HotModuleReplacementPlugin(),??
  • ????//?當編譯出現錯誤的時候,會跳過這部分代碼??
  • ????new?webpack.NoErrorsPlugin(),??
  • ????//?filename生成的文件名,template是模版用的文件名,https://github.com/ampedandwired/html-webpack-plugin??
  • ????new?HtmlWebpackPlugin({??
  • ??????filename:?'index.html',??
  • ??????template:?'index.html',??
  • ??????//?讓打包生成的html文件中css和js就默認添加到html里面,css就添加到head里面,js就添加到body里面??
  • ??????inject:?true??
  • ????}),??
  • ????new?FriendlyErrors()??
  • ??]??
  • })??

  • utils.js和config目錄下面的js文件都比較好辨認是干什么的,config下面都是配置信息,json對象,很好理解,utils下面就是導出了幾個常用的方法,主要也就是用在了上述的幾個js文件里面,另外關于生產階段和測試階段的js說明,后面會有文章說明 補充:

    ?項目中配置的config/index.js,有dev和production兩種環境的配置 以下介紹的是production環境下的webpack配置的理解

    1 var path = require('path')2 3 module.exports = {4 build: { // production 環境5 env: require('./prod.env'), // 使用 config/prod.env.js 中定義的編譯環境6 index: path.resolve(__dirname, '../dist/index.html'), // 編譯輸入的 index.html 文件7 assetsRoot: path.resolve(__dirname, '../dist'), // 編譯輸出的靜態資源路徑8 assetsSubDirectory: 'static', // 編譯輸出的二級目錄9 assetsPublicPath: '/', // 編譯發布的根目錄,可配置為資源服務器域名或 CDN 域名 10 productionSourceMap: true, // 是否開啟 cssSourceMap 11 // Gzip off by default as many popular static hosts such as 12 // Surge or Netlify already gzip all static assets for you. 13 // Before setting to `true`, make sure to: 14 // npm install --save-dev compression-webpack-plugin 15 productionGzip: false, // 是否開啟 gzip 16 productionGzipExtensions: ['js', 'css'] // 需要使用 gzip 壓縮的文件擴展名 17 }, 18 dev: { // dev 環境 19 env: require('./dev.env'), // 使用 config/dev.env.js 中定義的編譯環境 20 port: 8080, // 運行測試頁面的端口 21 assetsSubDirectory: 'static', // 編譯輸出的二級目錄 22 assetsPublicPath: '/', // 編譯發布的根目錄,可配置為資源服務器域名或 CDN 域名 23 proxyTable: {}, // 需要 proxyTable 代理的接口(可跨域) 24 // CSS Sourcemaps off by default because relative paths are "buggy" 25 // with this option, according to the CSS-Loader README 26 // (https://github.com/webpack/css-loader#sourcemaps) 27 // In our experience, they generally work as expected, 28 // just be aware of this issue when enabling this option. 29 cssSourceMap: false // 是否開啟 cssSourceMap 30 } 31 }

    轉載于:https://www.cnblogs.com/leolovexx/p/7992929.html

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

    總結

    以上是生活随笔為你收集整理的vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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