const path = require('path'); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const HtmlWebPackPlugin = require('html-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); module.exports = { mode: process.env.NODE_ENV, entry: ['babel-polyfill', './app/index.js'], output: { path: path.join(__dirname, 'dist'), publicPath: '/', filename: 'bundle.js', }, devtool: 'inline-source-map', devServer: { port: 3000, historyApiFallback: true, }, module: { rules: [ { test: /\.(png|jpe?g|gif)$/i, use: [ { loader: 'file-loader', }, ], }, { test: /\.(js|jsx)$/, exclude: /node_modules/, use: ['babel-loader', 'eslint-loader'], }, { // Preprocess 3rd party .css files located in node_modules test: /\.css$/, include: /node_modules/, use: ['style-loader', 'css-loader'], }, { test: /\.less$/, use: [ { loader: 'style-loader', }, { loader: 'css-loader', }, { loader: 'less-loader', options: { javascriptEnabled: true, }, }, ], }, { test: /\.(css|scss)$/, exclude: /node_modules/, use: [ { loader: 'style-loader', }, { loader: 'css-loader', options: { modules: { localIdentName: '[name]__[local]___[hash:base64:5]', }, sourceMap: true, }, }, { loader: 'sass-loader', }, ], }, ], }, optimization: { minimizer: [new UglifyJsPlugin()], }, resolve: { modules: ['node_modules', path.resolve(`${__dirname}/app`)], alias: { app: path.resolve(`${__dirname}/app`), }, }, plugins: [ new CleanWebpackPlugin(), new HtmlWebPackPlugin({ inject: true, template: './app/index.html', filename: './index.html', }), ], };