const path = require('path'); const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const ExportFilesWebpackPlugin = require('export-files-webpack-plugin'); const pkg = require('./package.json'); const isProduction = process.env.NODE_ENV === 'production'; module.exports = { devtool: 'eval-source-map', entry: isProduction ? ['./demo/src/js/index'] : [ 'webpack-dev-server/client?http://localhost:3000', 'webpack/hot/only-dev-server', './demo/src/js/index', ], output: { path: path.join(__dirname, 'demo/dist'), filename: 'js/bundle.js', }, plugins: [ new CleanWebpackPlugin(), new HtmlWebpackPlugin({ inject: true, template: 'demo/src/index.html', package: pkg, }), new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), }, }), ].concat( isProduction ? [ new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false }, output: { comments: false }, }), ] : [ new ExportFilesWebpackPlugin('demo/dist/index.html'), new webpack.HotModuleReplacementPlugin(), ] ), resolve: { extensions: ['.js', '.jsx'], }, module: { rules: [ { test: /\.jsx?$/, loader: 'babel-loader', include: [ path.join(__dirname, 'src'), path.join(__dirname, 'demo/src/js'), ], }, { test: /\.css$/, use: [{ loader: 'style-loader' }, { loader: 'css-loader' }], }, { test: /\.(ttf|eot|svg|woff|woff2)$/, loader: 'file-loader', options: { outputPath: 'fonts/', publicPath: 'fonts/' }, }, ], }, devServer: isProduction ? null : { quiet: false, port: 3001, hot: true, stats: { chunkModules: false, colors: true, }, historyApiFallback: true, }, };