Vue進階十四):config/index.js配置文件講解

      網友投稿 671 2025-03-31

      config配置的目的是為了服務webpack的配置,給不同的編譯條件提供配置。當我們需要和后臺分離部署的時候,必須配置config/index.js。


      用vue-cli 自動構建的目錄里面會包含以下代碼(環境變量及其基本變量的配置)。

      var path = require('path') module.exports = { build: { index: path.resolve(__dirname, 'dist/index.html'), assetsRoot: path.resolve(__dirname, 'dist'), assetsSubDirectory: 'static', assetsPublicPath: '/', productionSourceMap: true }, dev: { port: 8080, proxyTable: {} } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      在build部分,我們有以下選項:

      build.index

      必須是本地文件系統上的絕對路徑。

      index.html?(帶著插入的資源路徑) 會在編譯之后生成。

      build.assetsRoot

      必須是本地文件系統上的絕對路徑。

      應該指向包含應用程序的所有靜態資產的根目錄。

      build.assetsSubDirectory

      被webpack編譯處理過的資源文件都會在這個build.assetsRoot目錄下,所以它不可以混有其它可能在build.assetsRoot里面有的文件。例如,假如build.assetsRoot參數是/path/to/dist,build.assetsSubDirectory?參數是?static, 那么所以webpack資源會被編譯到path/to/dist/static目錄。

      每次編譯前,這個目錄會被清空,所以這個只能放編譯出來的資源文件。

      static/目錄的文件會在構建過程中,直接拷貝到這個目錄。這意味著是如果改變這個規則,所有依賴于static/中文件的絕對地址,都需要改變。

      build.assetsPublicPath【資源的根目錄】

      這個是通過http服務器運行的url路徑。在大多數情況下,這個是根目錄(/)。如果你的后臺框架對靜態資源url前綴要求,你僅需要改變這個參數。在內部,這個是被webpack當做output.publicPath來處理的。

      build.productionSourceMap

      在構建生產環境版本時是否開啟source map。

      dev.port

      開發服務器監聽的特定端口

      dev.proxyTable

      定義開發服務器的代理規則。

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

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

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      下面是build/webpack.base.conf.js配置文件:

      //引入依賴模塊 var path = require('path') var config = require('../config') // 獲取配置 var utils = require('./utils') var projectRoot = path.resolve(__dirname, '../') var env = process.env.NODE_ENV // check env & config/index.js to decide weither to enable CSS Sourcemaps for the // various preprocessor loaders added to vue-loader at the end of this file var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)/* 是否在 dev 環境下開啟 cssSourceMap ,在 config/index.js 中可配置 */ var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap)/* 是否在 production 環境下開啟 cssSourceMap ,在 config/index.js 中可配置 */ var useCssSourceMap = cssSourceMapDev || cssSourceMapProd /* 最終是否使用 cssSourceMap */ module.exports = { entry: { // 配置webpack編譯入口 app: './src/main.js' }, output: { // 配置webpack輸出路徑和命名規則 path: config.build.assetsRoot, // webpack輸出的目標文件夾路徑(例如:/dist) publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath, // webpack編譯輸出的發布路徑(判斷是正式環境或者開發環境等) filename: '[name].js' // webpack輸出bundle文件命名格式,基于文件的md5生成Hash名稱的script來防止緩存 }, resolve: { extensions: ['', '.js', '.vue', '.scss'], //自動解析確定的拓展名,使導入模塊時不帶拓展名 fallback: [path.join(__dirname, '../node_modules')], alias: { // 創建import或require的別名,一些常用的,路徑長的都可以用別名 'vue$': 'vue/dist/vue', 'src': path.resolve(__dirname, '../src'), 'assets': path.resolve(__dirname, '../src/assets'), 'components': path.resolve(__dirname, '../src/components'), 'scss_vars': path.resolve(__dirname, '../src/styles/vars.scss') } }, resolveLoader: { fallback: [path.join(__dirname, '../node_modules')] }, module: { loaders: [ { test: /\.vue$/, // vue文件后綴 loader: 'vue' //使用vue-loader處理 }, { test: /\.js$/, loader: 'babel', include: projectRoot, 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]') } } ] }, vue: { // .vue 文件配置 loader 及工具 (autoprefixer) loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }), 調用cssLoaders方法返回各類型的樣式對象(css: loader) postcss: [ require('autoprefixer')({ browsers: ['last 2 versions'] }) ] } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      webpack.prod.conf.js 生產環境下的配置文件

      var path = require('path') var config = require('../config') var utils = require('./utils') var webpack = require('webpack') var merge = require('webpack-merge')// 一個可以合并數組和對象的插件 var baseWebpackConfig = require('./webpack.base.conf') // 用于從webpack生成的bundle中提取文本到特定文件中的插件 // 可以抽取出css,js文件將其與webpack輸出的bundle分離 var ExtractTextPlugin = require('extract-text-webpack-plugin') //如果我們想用webpack打包成一個文件,css js分離開,需要這個插件 var HtmlWebpackPlugin = require('html-webpack-plugin')// 一個用于生成HTML文件并自動注入依賴文件(link/script)的webpack插件 var env = config.build.env // 合并基礎的webpack配置 var webpackConfig = merge(baseWebpackConfig, { // 配置樣式文件的處理規則,使用styleLoaders module: { loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) }, devtool: config.build.productionSourceMap ? '#source-map' : false, // 開啟source-map,生產環境下推薦使用cheap-source-map或source-map,后者得到的.map文件體積比較大,但是能夠完全還原以前的js代碼 output: { path: config.build.assetsRoot,// 編譯輸出目錄 filename: utils.assetsPath('js/[name].[chunkhash].js'), // 編譯輸出文件名格式 chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') // 沒有指定輸出名的文件輸出的文件名格式 }, vue: { // vue里的css也要單獨提取出來 loaders: utils.cssLoaders({ // css加載器,調用了utils文件中的cssLoaders方法,用來返回針對各類型的樣式文件的處理方式, sourceMap: config.build.productionSourceMap, extract: true }) }, // 重新配置插件項 plugins: [ // http://vuejs.github.io/vue-loader/en/workflow/production.html // 位于開發環境下 new webpack.DefinePlugin({ 'process.env': env }), new webpack.optimize.UglifyJsPlugin({// 丑化壓縮代碼 compress: { warnings: false } }), new webpack.optimize.OccurenceOrderPlugin(), // extract css into its own file new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')), // 抽離css文件 // generate dist index.html with correct asset hash for caching. // you can customize output by editing /index.html // see https://github.com/ampedandwired/html-webpack-plugin // filename 生成網頁的HTML名字,可以使用/來控制文件文件的目錄結構,最 // 終生成的路徑是基于webpac配置的output.path的 new HtmlWebpackPlugin({ // 生成html文件的名字,路徑和生產環境下的不同,要與修改后的publickPath相結合,否則開啟服務器后頁面空白 filename: config.build.index, // 源文件,路徑相對于本文件所在的位置 template: 'index.html', inject: true,// 要把

      亚洲精品国产suv一区88 | 国产精品亚洲专区无码WEB| 国产亚洲精品国产福利在线观看 | 亚洲国产成人无码AV在线| 亚洲精品国产成人| 久久亚洲国产中v天仙www| 久久亚洲高清观看| 亚洲精品自产拍在线观看| 亚洲精品无码久久久久AV麻豆| 亚洲AV网一区二区三区| 亚洲αⅴ无码乱码在线观看性色| 亚洲国产精品无码久久98| 亚洲gay片在线gv网站| 国产精品亚洲片在线花蝴蝶| www国产亚洲精品久久久日本| 在线亚洲v日韩v| 亚洲AV成人潮喷综合网| JLZZJLZZ亚洲乱熟无码| 久久精品国产亚洲5555| 亚洲精品美女久久久久99| 亚洲AV无码码潮喷在线观看| 久久精品夜色国产亚洲av| 亚洲第一成年男人的天堂| 久久久久亚洲av无码专区| 亚洲成a人不卡在线观看| 亚洲第一精品电影网| 亚洲精品免费在线视频| 亚洲成人动漫在线观看| 亚洲视频一区在线播放| 亚洲国产精品人久久电影| 亚洲人成影院77777| 亚洲va成无码人在线观看| 色偷偷女男人的天堂亚洲网| 亚洲第一街区偷拍街拍| 亚洲AV无码专区在线厂| 在线日韩日本国产亚洲| 亚洲AV无码成人网站久久精品大| 97se亚洲综合在线| 亚洲色丰满少妇高潮18p| 国产精品手机在线亚洲| 亚洲一区二区三区在线视频|