96 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
const utils = require('./utils')
 | 
						|
const webpack = require('webpack')
 | 
						|
const config = require('../config')
 | 
						|
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')
 | 
						|
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
 | 
						|
const portfinder = require('portfinder')
 | 
						|
 | 
						|
const HOST = process.env.HOST
 | 
						|
const PORT = process.env.PORT && Number(process.env.PORT)
 | 
						|
 | 
						|
const devWebpackConfig = merge(baseWebpackConfig, {
 | 
						|
  module: {
 | 
						|
    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
 | 
						|
  },
 | 
						|
  // cheap-module-eval-source-map is faster for development
 | 
						|
  devtool: config.dev.devtool,
 | 
						|
 | 
						|
  // these devServer options should be customized in /config/index.js
 | 
						|
  devServer: {
 | 
						|
    clientLogLevel: 'warning',
 | 
						|
    historyApiFallback: {
 | 
						|
      rewrites: [
 | 
						|
        { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
 | 
						|
      ],
 | 
						|
    },
 | 
						|
    hot: true,
 | 
						|
    contentBase: false, // since we use CopyWebpackPlugin.
 | 
						|
    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,
 | 
						|
    publicPath: config.dev.assetsPublicPath,
 | 
						|
    proxy: config.dev.proxyTable,
 | 
						|
    quiet: true, // necessary for FriendlyErrorsPlugin
 | 
						|
    watchOptions: {
 | 
						|
      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({
 | 
						|
      filename: 'index.html',
 | 
						|
      template: 'index.html',
 | 
						|
      inject: true
 | 
						|
    }),
 | 
						|
    // copy custom static assets
 | 
						|
    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 {
 | 
						|
      // 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: {
 | 
						|
          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
 | 
						|
        },
 | 
						|
        onErrors: config.dev.notifyOnErrors
 | 
						|
        ? utils.createNotifierCallback()
 | 
						|
        : undefined
 | 
						|
      }))
 | 
						|
 | 
						|
      resolve(devWebpackConfig)
 | 
						|
    }
 | 
						|
  })
 | 
						|
})
 |