const path = require('path'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const isProduction = process.env.NODE_ENV === 'production'; const scriptFileName = 'driver-demo.min.js'; const styleFileName = 'driver-demo.min.css'; module.exports = { mode: isProduction ? 'production' : 'development', entry: [ './demo/styles/demo.scss', './demo/scripts/demo.js', './src/index.js', ].filter(entryPoint => !!entryPoint), output: { path: path.join(__dirname, '/../dist/demo'), publicPath: './', filename: scriptFileName, libraryTarget: 'umd', library: 'Driver', libraryExport: 'default', }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, loader: 'eslint-loader', enforce: 'pre', options: { failOnWarning: false, failOnError: true, }, }, { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', }, { test: /.scss$/, loader: ExtractTextPlugin.extract([ { loader: 'css-loader', options: { url: false }, }, 'sass-loader', ]), }, ], }, plugins: [ new ExtractTextPlugin({ filename: styleFileName, allChunks: true, }), new OptimizeCssAssetsPlugin({ assetNameRegExp: /\.min\.css$/g, // eslint-disable-next-line global-require cssProcessor: require('cssnano'), cssProcessorPluginOptions: { preset: [ 'default', { discardComments: { removeAll: true }, }, ], }, canPrint: true, }), new CopyWebpackPlugin([ { from: './demo/images/', to: 'images', }, ]), new HtmlWebpackPlugin({ template: 'demo/index.html', favicon: 'demo/images/favicon.png', }), ], stats: { colors: true, }, devtool: 'cheap-module-eval-source-map', };