import path from "path";
import webpack from "webpack";
import CaseSensitivePathsPlugin from "case-sensitive-paths-webpack-plugin";
import CircularDependencyPlugin from "circular-dependency-plugin";
import DuplicatePackageCheckerPlugin from "duplicate-package-checker-webpack-plugin";
import HappyPack from "happypack";
import TerserPlugin from "terser-webpack-plugin";

const NODE_ENV = process.env.NODE_ENV ? "production" : "development";
const isDevelopment = NODE_ENV === "development";

let options = {
  mode: NODE_ENV,
  entry: ["./helpers/polyfills.js", "./main.js"],
  output: {
    filename: "[name].js",
    path: path.join(__dirname, "/dest/assets/javascripts"),
    publicPath: "/assets/javascripts/",
    library: "App"
  },
  resolve: {
    modules: ["node_modules", path.join(__dirname, "soruce")],
    alias: {
      "lodash-es": "lodash",
      "@": path.resolve(__dirname, "source")
    }
  },
  devtool: isDevelopment ? "eval-source-map" : "source-map",
  context: path.resolve(__dirname, "source/scripts"),
  optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          parse: {
            ecma: 8
          },
          compress: {
            ecma: 5,
            warnings: false,
            comparisons: false,
            inline: 2
          },
          mangle: {
            safari10: true
          },
          output: {
            ecma: 5,
            comments: false,
            ascii_only: true
          }
        },
        parallel: true,
        cache: true,
        sourceMap: true
      })
    ]
  },
  module: {
    noParse: /\/node_modules\/(jquery|backbone)/,
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "happypack/loader"
        }
      }
    ]
  },
  plugins: [
    new webpack.DefinePlugin({
      "process.env.NODE_ENV": JSON.stringify(NODE_ENV)
    }),
    new CaseSensitivePathsPlugin(),
    new CircularDependencyPlugin({
      // exclude detection of files based on a RegExp
      exclude: /a\.js|node_modules/,
      // add errors to webpack instead of warnings
      failOnError: true
    }),
    new DuplicatePackageCheckerPlugin(),
    new HappyPack({
      loaders: ["babel-loader"]
    })
  ]
};

export default options;

@@ -485,18 +485,20 @@
 ment%22;%0A%0A
-le
+cons
 t option
@@ -728,16 +728,17 @@
 y: %22App%22
+,
 %0A  %7D,%0A  
@@ -897,22 +897,24 @@
 source%22)
+,
 %0A    %7D
+,
 %0A  %7D,%0A  
@@ -1060,519 +1060,62 @@
 mize
-r
 : 
-%5B%0A      new TerserPlugin(%7B%0A        terserOptions: %7B%0A          parse: %7B%0A            ecma: 8%0A          %7D,%0A          compress: %7B%0A            ecma: 5,%0A            warnings: false,%0A            comparisons: false,%0A            inline: 2%0A          %7D,%0A          mangle: %7B%0A            safari10: true%0A          %7D,%0A          output: %7B%0A            ecma: 5,%0A            comments: false,%0A            ascii_only: true%0A          %7D%0A        %7D,%0A        parallel: true,%0A        cache: true,%0A        sourceMap: true%0A      %7D)%0A    %5D
+!isDevelopment,%0A    minimizer: %5Bnew TerserPlugin()%5D,
 %0A  %7D
@@ -1306,16 +1306,17 @@
 /loader%22
+,
 %0A       
@@ -1321,16 +1321,17 @@
    %7D
+,
 %0A      %7D
 %0A   
@@ -1330,14 +1330,16 @@
    %7D
+,
 %0A    %5D
+,
 %0A  %7D
@@ -1438,16 +1438,17 @@
 ODE_ENV)
+,
 %0A    %7D),
@@ -1684,16 +1684,17 @@
 or: true
+,
 %0A    %7D),
@@ -1790,19 +1790,22 @@
 er%22%5D
+,
 %0A    %7D)
+,
 %0A  %5D
+,
 %0A%7D;%0A

Update webpack config