From 748f88902cde233c51b722aef3e46f7ee4a75eeb Mon Sep 17 00:00:00 2001
From: Roosted7 <thomasroos@live.nl>
Date: Thu, 12 Apr 2018 23:49:23 +0200
Subject: [PATCH] Update packages and add analyze option

---
 .gitignore        |  3 +++
 package.json      | 20 +++++++++++---------
 webpack.common.js |  2 +-
 webpack.dev.js    |  3 ++-
 webpack.prod.js   | 32 ++++++++++++++++++++------------
 5 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/.gitignore b/.gitignore
index 4e0553ea6..b3a007ce7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -82,3 +82,6 @@ __pycache__/
 
 # development data
 data-dev
+
+# webpack analyze data
+stats.json
\ No newline at end of file
diff --git a/package.json b/package.json
index 65f1f491e..d33cb4811 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,8 @@
   "scripts": {
     "dev": "concurrently --kill-others --names \"WEBPACK,PYTHON\" --prefix-colors \"bgBlue.bold,bgGreen.bold\" \"webpack-dev-server --hot --inline --progress --config webpack.dev.js\" \"ZESJE_SETTINGS=$(pwd)/zesje.dev.cfg python3 zesje\"",
     "build": "webpack --config webpack.prod.js",
-    "start": "ZESJE_SETTINGS=$(pwd)/zesje.dev.cfg python3 zesje"
+    "start": "ZESJE_SETTINGS=$(pwd)/zesje.dev.cfg python3 zesje",
+    "analyze": "webpack --config webpack.prod.js --json > stats.json; webpack-bundle-analyzer stats.json"
   },
   "dependencies": {
     "babel-plugin-syntax-dynamic-import": "^6.18.0",
@@ -15,15 +16,14 @@
     "bulma": "^0.6.2",
     "concurrently": "^3.5.1",
     "css-loader": "^0.28.8",
-    "extract-text-webpack-plugin": "^3.0.2",
     "file-loader": "^1.1.6",
     "font-awesome": "^4.7.0",
-    "formik": "^0.10.5",
     "fuse.js": "^3.2.0",
     "get-closest": "^0.0.4",
-    "html-webpack-plugin": "^2.30.1",
+    "html-webpack-plugin": "^3.2.0",
+    "mini-css-extract-plugin": "^0.4.0",
     "mousetrap": "^1.6.1",
-    "optimize-css-assets-webpack-plugin": "^3.2.0",
+    "optimize-css-assets-webpack-plugin": "^4.0.0",
     "path": "^0.12.7",
     "raw-loader": "^0.5.1",
     "react": "^16.2.0",
@@ -34,10 +34,11 @@
     "react-numeric-input": "^2.2.3",
     "react-router-dom": "^4.2.2",
     "react-table": "^6.7.6",
-    "style-loader": "^0.19.1",
+    "style-loader": "^0.20.3",
     "uglifyjs-webpack-plugin": "^1.1.6",
-    "url-loader": "^0.6.2",
-    "webpack": "^3.10.0",
+    "url-loader": "^1.0.1",
+    "webpack": "^4.5.0",
+    "webpack-cli": "^2.0.14",
     "webpack-merge": "^4.1.1"
   },
   "devDependencies": {
@@ -45,6 +46,7 @@
     "babel-loader": "^7.1.2",
     "babel-preset-flow": "^6.23.0",
     "babel-preset-react": "^6.24.1",
-    "webpack-dev-server": "^2.10.1"
+    "webpack-bundle-analyzer": "^2.11.1",
+    "webpack-dev-server": "^3.1.3"
   }
 }
diff --git a/webpack.common.js b/webpack.common.js
index f6faf2a82..7d07d13ee 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -19,7 +19,7 @@ module.exports = {
     publicPath: '/'
   },
   module: {
-    loaders: [
+    rules: [
       { test: /\.(jsx|js)$/, loader: 'babel-loader', exclude: /node_modules/ },
       { test: /\.(png|jpg|gif)$/, loader: "file-loader" },
       { test: /\.(woff(2)?|ttf|eot|svg|otf)(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader" },
diff --git a/webpack.dev.js b/webpack.dev.js
index e13056f76..d8dc133ef 100644
--- a/webpack.dev.js
+++ b/webpack.dev.js
@@ -3,8 +3,9 @@ const merge = require('webpack-merge');
 const common = require('./webpack.common.js');
 
 module.exports = merge(common, {
+    mode: 'development',
     module: {
-        loaders: [
+        rules: [
           { test: /\.css$/, use: [ 'style-loader', 'css-loader' ]}
         ]
     },
diff --git a/webpack.prod.js b/webpack.prod.js
index 42409997c..43bf21545 100644
--- a/webpack.prod.js
+++ b/webpack.prod.js
@@ -1,33 +1,41 @@
 const webpack = require('webpack');
 const merge = require('webpack-merge');
-const ExtractTextPlugin = require("extract-text-webpack-plugin");
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
 const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
 const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
 const common = require('./webpack.common.js');
 
 module.exports = merge(common, {
+
+    mode: 'production',
     module: {
-        loaders: [
-          { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" })}
+        rules: [
+            { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, "css-loader" ]}
         ]
     },
-
     devtool: 'source-map',
-    plugins: [
-        new UglifyJsPlugin({
-            parallel: true,
+    optimization: {
+        minimizer: [
+          new UglifyJsPlugin({
             cache: true,
+            parallel: true,
             sourceMap: true
           }),
-        new webpack.DefinePlugin({
-            'process.env.NODE_ENV': JSON.stringify('production')
-        }),
-        new ExtractTextPlugin("styles.css"),
-        new OptimizeCssAssetsPlugin({
+          new OptimizeCssAssetsPlugin({
             assetNameRegExp: /\.optimize\.css$/g,
             cssProcessor: require('cssnano'),
             cssProcessorOptions: { discardComments: {removeAll: true } },
             canPrint: true
         })
+        ]
+      },
+    plugins: [
+        new webpack.DefinePlugin({
+            'process.env.NODE_ENV': JSON.stringify('production')
+        }),
+        new MiniCssExtractPlugin({
+            filename: "[name].css",
+            chunkFilename: "[id].css"
+        })
    ]
 })
\ No newline at end of file
-- 
GitLab