const path = require('path'); const glob = require('glob'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const nodeModulesPath = path.resolve(__dirname, 'node_modules') module.exports = (env, options) => { const devMode = options.mode !== 'production'; return { optimization: { minimizer: [ new TerserPlugin({ cache: true, parallel: true, sourceMap: devMode }), new OptimizeCSSAssetsPlugin({}) ] }, entry: { 'app': glob.sync('./vendor/**/*.js').concat(['./js/app.js']) }, output: { filename: '[name].js', path: path.resolve(__dirname, '../priv/static/js'), publicPath: '/js/' }, devtool: devMode ? 'source-map' : undefined, module: { rules: [ // For images and fonts found in our scss files { test: /\.(jpg|jpeg|gif|png)$/, use: [ 'file-loader', { loader: 'image-webpack-loader', options: { disable: devMode, }, }, ], }, { test: /\.(woff2?|ttf|eot|svg)(\?[a-z0-9\=\.]+)?$/, exclude: [nodeModulesPath], loader: 'file-loader', }, { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader' } }, { test: /\.[s]?css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader', ], }, { test: /\.less$/, use: [ MiniCssExtractPlugin.loader, {loader: 'css-loader', options: {sourceMap: true}}, { loader: 'less-loader', options: { sourceMap: true, }, }, ], }, ] }, plugins: [ new MiniCssExtractPlugin({ filename: '../css/app.css' }), new CopyWebpackPlugin([{ from: 'static/', to: '../' }]) ], resolve: { alias: { "../../theme.config$": path.join(__dirname, "/semantic-ui/theme.config"), "../semantic-ui/site": path.join(__dirname, "/semantic-ui/site") } }, } };