import webpack from 'webpack'; import path from 'path'; const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const devMode = process.env.NODE_ENV !== 'production' export default { entry: ['babel-polyfill', `${__dirname}/src/components/index.js`], output: { path: `${__dirname}/build`, publicPath: '/build/', filename: 'bundle.js', }, optimization: { splitChunks: { cacheGroups: { styles: { name: 'styles', test: /\.css$/, chunks: 'all', enforce: true } } } }, module: { rules: [ { test: /\.jsx?$/, exclude: /node_modules/, use: 'babel-loader' }, { test: /\.s?[ac]ss$/, use: [ devMode ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader', ], } ] }, resolve: { extensions: ['.js', '.jsx'], }, node: { fs: 'empty', }, // First array is dev only, second is production plugins: process.argv.indexOf('-p') === -1 ? [ new MiniCssExtractPlugin({ filename: devMode ? '[name].css' : '[name].[hash].css', }) ] : [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production'), }), new webpack.optimize.UglifyJsPlugin({ output: { comments: false, }, warnings: true, }), new ExtractTextPlugin({ filename: 'style.css', allChunks: true }) ], };