From 96fe5900388c027c9dbeeb7362aad8ce5275e27d Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Fri, 21 Dec 2018 16:45:56 +0000
Subject: [PATCH] Allow for deployment

---
 gulpfile.js                                   | 13 +++++++++---
 opentech/settings/base.py                     |  7 +++++++
 opentech/settings/dev.py                      |  8 -------
 opentech/settings/production.py               |  3 +++
 .../static_src/src/app/webpack.dev.config.js  |  2 +-
 .../prod.config.js => webpack.prod.config.js} | 21 ++++++-------------
 6 files changed, 27 insertions(+), 27 deletions(-)
 rename opentech/static_src/src/app/{webpack/prod.config.js => webpack.prod.config.js} (51%)

diff --git a/gulpfile.js b/gulpfile.js
index 358058d88..2bffc4124 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -166,7 +166,14 @@ gulp.task('scripts:production', gulp.series('clean:js', function js () {
 // Build App.
 gulp.task('app', function() {
     return gulp.src(options.theme.app + 'src/')
-        .pipe(webpack( require(options.theme.app + 'webpack/dev.config.js') ))
+        .pipe(webpack( require(options.theme.app + 'webpack.dev.config.js') ))
+        .pipe(gulp.dest(options.theme.app_dest));
+})
+
+// Build Prod App
+gulp.task('app:production', function() {
+    return gulp.src(options.theme.app + 'src/')
+        .pipe(webpack( require(options.theme.app + 'webpack.prod.config.js') ))
         .pipe(gulp.dest(options.theme.app_dest));
 })
 
@@ -221,10 +228,10 @@ gulp.task('watch:static', function watch () {
 gulp.task('watch', gulp.parallel('watch:css', 'watch:lint:sass', 'watch:js', 'watch:lint:js', 'watch:images', 'watch:fonts', 'watch:static'));
 
 // Build everything.
-gulp.task('build', gulp.series(gulp.parallel('styles:production', 'scripts:production', 'images', 'fonts', 'lint'), 'collectstatic'));
+gulp.task('build', gulp.series(gulp.parallel('styles:production', 'scripts:production', 'app:production', 'images', 'fonts', 'lint'), 'collectstatic'));
 
 // Deploy everything.
-gulp.task('deploy', gulp.parallel('styles:production', 'scripts:production', 'images', 'fonts'));
+gulp.task('deploy', gulp.parallel('styles:production', 'scripts:production', 'app:production', 'images', 'fonts'));
 
 // The default task.
 gulp.task('default', gulp.series('build'));
diff --git a/opentech/settings/base.py b/opentech/settings/base.py
index 6986d6a9b..492157071 100644
--- a/opentech/settings/base.py
+++ b/opentech/settings/base.py
@@ -592,3 +592,10 @@ if env.get('SECURE_CONTENT_TYPE_NOSNIFF', 'true').lower().strip() == 'true':
 
 REFERRER_POLICY = env.get('SECURE_REFERRER_POLICY',
                           'no-referrer-when-downgrade').strip()
+
+WEBPACK_LOADER = {
+    'DEFAULT': {
+        'BUNDLE_DIR_NAME': 'app/',
+        'STATS_FILE': os.path.join(BASE_DIR, './opentech/static_compiled/app/webpack-stats.json'),
+    }
+}
diff --git a/opentech/settings/dev.py b/opentech/settings/dev.py
index 1313d7fe3..176f00d6d 100644
--- a/opentech/settings/dev.py
+++ b/opentech/settings/dev.py
@@ -109,11 +109,3 @@ if DEBUGTOOLBAR:
     MIDDLEWARE = [
         'debug_toolbar.middleware.DebugToolbarMiddleware',
     ] + MIDDLEWARE
-
-
-WEBPACK_LOADER = {
-    'DEFAULT': {
-        'BUNDLE_DIR_NAME': 'app/',
-        'STATS_FILE': os.path.join(BASE_DIR, './opentech/static_src/src/app/webpack-stats.json'),
-    }
-}
diff --git a/opentech/settings/production.py b/opentech/settings/production.py
index c4a21eedd..b9e649beb 100644
--- a/opentech/settings/production.py
+++ b/opentech/settings/production.py
@@ -21,5 +21,8 @@ if 'MAILGUN_API_KEY' in env:
         "WEBHOOK_SECRET": env.get('ANYMAIL_WEBHOOK_SECRET', None)
     }
 
+WEBPACK_LOADER['DEFAULT'].update({
+    'STATS_FILE': os.path.join(BASE_DIR, './opentech/static_compiled/app/webpack-stats-prod.json'),
+})
 
 django_heroku.settings(locals())
diff --git a/opentech/static_src/src/app/webpack.dev.config.js b/opentech/static_src/src/app/webpack.dev.config.js
index 29349fe9f..ce97aee7d 100644
--- a/opentech/static_src/src/app/webpack.dev.config.js
+++ b/opentech/static_src/src/app/webpack.dev.config.js
@@ -11,7 +11,7 @@ config.output.publicPath = 'http://localhost:3000/app/'
 config.plugins = config.plugins.concat([
     new webpack.HotModuleReplacementPlugin(),
     new webpack.NoEmitOnErrorsPlugin(),
-    new BundleTracker({filename: './webpack-stats.json'}),
+    new BundleTracker({filename: './opentech/static_compiled/app/webpack-stats.json'}),
 ])
 
 // Add a loader for JSX files with react-hot enabled
diff --git a/opentech/static_src/src/app/webpack/prod.config.js b/opentech/static_src/src/app/webpack.prod.config.js
similarity index 51%
rename from opentech/static_src/src/app/webpack/prod.config.js
rename to opentech/static_src/src/app/webpack.prod.config.js
index 5fdcde239..9b0ff64ac 100644
--- a/opentech/static_src/src/app/webpack/prod.config.js
+++ b/opentech/static_src/src/app/webpack.prod.config.js
@@ -6,28 +6,19 @@ var config = require('./webpack.base.config.js')
 config.output.path = require('path').resolve('./assets/dist')
 
 config.plugins = config.plugins.concat([
-    new BundleTracker({filename: './webpack-stats-prod.json'}),
+    new BundleTracker({filename: './opentech/static_compiled/app/webpack-stats-prod.json'}),
 
     // removes a lot of debugging code in React
     new webpack.DefinePlugin({
         'process.env': {
             'NODE_ENV': JSON.stringify('production')
         }}),
-
-    // keeps hashes consistent between compilations
-    new webpack.optimize.OccurenceOrderPlugin(),
-
-    // minifies your code
-    new webpack.optimize.UglifyJsPlugin({
-        compressor: {
-            warnings: false
-        }
-    })
 ])
 
-// Add a loader for JSX files
-config.module.loaders.push(
-    { test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel' }
-)
+config.optimization = {
+    minimize: true
+}
+
+config.mode = "production"
 
 module.exports = config
-- 
GitLab