let webpack = require('webpack'); let path = require('path'); const glob = require('glob'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const PurgecssPlugin = require('purgecss-webpack-plugin'); module.exports = { entry: ['./src/js/main.js', './src/scss/main.scss'], output: { path: path.resolve(__dirname, 'dist'), filename: 'main.js', }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', }, { test: /\.(png|jpe?g|gif)$/i, use: [ { loader: 'file-loader', options: { name: '[name].[hash].[ext]', outputPath: 'images', }, }, ], }, { test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, use: [ { loader: 'file-loader', options: { name: '[name].[hash].[ext]', outputPath: 'fonts', }, }, ], }, { test: /\.s[ac]ss$/i, use: [ MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { sourceMap: true, url: true, }, }, { loader: 'postcss-loader', options: { sourceMap: true, config: { path: 'postcss.config.js', }, }, }, { loader: 'sass-loader', options: { sourceMap: true, }, }, ], }, ], }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].css', chunkFilename: '[id].css', }), ], }; if (process.env.NODE_ENV === 'production') { module.exports.plugins.push(new webpack.optimize.UglifyJsPlugin()); module.exports.plugins.push( new webpack.optimize.PurgecssPlugin({ paths: glob.sync(path.join(__dirname, '*.html'), { nodir: true }), }) ); }