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)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 |