vue-cli腳手架之webpack.dev.conf.js

webpack.dev.conf.js  開發環境模式配置文件:css

 

'use strict'//js按照嚴格模式執行
const utils = require('./utils')//導入utils.js
const webpack = require('webpack')//使用webpack來使用webpack內置插件
const config = require('../config')//config文件夾下index.js文件
const merge = require('webpack-merge')//引入webpack-merge插件用來合併webpack配置對象,也就是說能夠把webpack配置文件拆分紅幾個小的模塊,而後合併
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')//導入webpack基本配置
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')//生成html文件
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')//獲取port

const HOST = process.env.HOST//process.env屬性返回一個對象,包含了當前shell的全部環境變量。這句取其中的host文件?
const PORT = process.env.PORT && Number(process.env.PORT)//獲取全部環境變量下的端口?

//合併模塊,第一個參數是webpack基本配置文件webpack.base.conf.js中的配置
const devWebpackConfig = merge(baseWebpackConfig, {
  module: {
    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })//建立模塊時匹配請求的規則數組,這裏調用了utils中的配置模板styleLoaders
  },
  // cheap-module-eval-source-map is faster for development
  devtool: config.dev.devtool,//debtool是開發工具選項,用來指定如何生成sourcemap文件,cheap-module-eval-source-map此款soucemap文件性價比最高

  // these devServer options should be customized in /config/index.js
  devServer: {//webpack服務器配置
    clientLogLevel: 'warning',//使用內聯模式時,在開發工具的控制檯將顯示消息,可取的值有none error warning info
    historyApiFallback: {//當使用h5 history api時,任意的404響應均可能須要被替代爲index.html,經過historyApiFallback:true控制;經過傳入一個對象,好比使用rewrites這個選項進一步控制
      rewrites: [
        { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
      ],
    },
    hot: true,//是否啓用webpack的模塊熱替換特性。這個功能主要是用於開發過程當中,對生產環境無幫助。效果上就是界面無刷新更新。
    contentBase: false, // since we use CopyWebpackPlugin.這裏禁用了該功能。原本是告訴服務器從哪裏提供內容,一半是本地靜態資源。
    compress: true,//一切服務是否都啓用gzip壓縮
    host: HOST || config.dev.host,//指定一個host,默認是localhost。若是有全局host就用全局,不然就用index.js中的設置。
    port: PORT || config.dev.port,//指定端口
    open: config.dev.autoOpenBrowser,//是否在瀏覽器開啓本dev server
    overlay: config.dev.errorOverlay//當有編譯器錯誤時,是否在瀏覽器中顯示全屏覆蓋。
      ? { warnings: false, errors: true }
      : false,
    publicPath: config.dev.assetsPublicPath,//此路徑下的打包文件可在瀏覽器中訪問
    proxy: config.dev.proxyTable,//若是你有單獨的後端開發服務器api,而且但願在同域名下發送api請求,那麼代理某些URL會頗有用。
    quiet: true, // necessary for FriendlyErrorsPlugin  啓用 quiet 後,除了初始啓動信息以外的任何內容都不會被打印到控制檯。這也意味着來自 webpack 的錯誤或警告在控制檯不可見。
    watchOptions: {//webpack 使用文件系統(file system)獲取文件改動的通知。在某些狀況下,不會正常工做。例如,當使用 Network File System (NFS) 時。Vagrant 也有不少問題。在這些狀況下使用輪詢。
      poll: config.dev.poll,//是否使用輪詢
    }
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env': require('../config/dev.env')
    }),
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
    new webpack.NoEmitOnErrorsPlugin(),
    // https://github.com/ampedandwired/html-webpack-plugin
    new HtmlWebpackPlugin({//模塊HtmlWebpackPlugin
      filename: 'index.html',//生成的文件的名稱
      template: 'index.html',//能夠指定模塊html文件
      inject: true//在文檔上沒查到這個選項 不知道幹嗎的。。。
    }),
    // copy custom static assets
    new CopyWebpackPlugin([//模塊CopyWebpackPlugin  將單個文件或整個文件複製到構建目錄
      {
        from: path.resolve(__dirname, '../static'),//將static文件夾及其子文件複製到
        to: config.dev.assetsSubDirectory,
        ignore: ['.*']//這個沒翻譯好,百度翻譯看不懂,請本身查文檔。。。
      }
    ])
  ]
})
//webpack將運行由配置文件導出的函數,而且等待promise返回,便於須要異步地加載所需的配置變量。
module.exports = new Promise((resolve, reject) => {
  portfinder.basePort = process.env.PORT || config.dev.port
  portfinder.getPort((err, port) => {
    if (err) {
      reject(err)
    } else {
      // publish the new Port, necessary for e2e tests
      process.env.PORT = port
      // add port to devServer config
      devWebpackConfig.devServer.port = port

      // Add FriendlyErrorsPlugin
      devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({//出錯友好處理插件
        compilationSuccessInfo: {//build成功的話會執行者塊
          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
        },
        onErrors: config.dev.notifyOnErrors//若是出錯就執行這塊,實際上是utils裏面配置好的提示信息 ? utils.createNotifierCallback()
        : undefined
      }))

      resolve(devWebpackConfig)
    }
  })
})

 

 

額,看到一個大佬說,要想本身真正弄懂,就最好本身實現一個vue-cli......個人下巴掉了!html

相關文章
相關標籤/搜索