diff --git a/gulpfile.js b/gulpfile.js index 358058d880e4fd58af46198066843d046db19eaf..2bffc4124dc1e72eff1f305b863977797294cbb2 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 6986d6a9bdaa84e65c95445accd6d4e0797eb4d6..4921570711078598352bb003eb0d17aea8110e35 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 1313d7fe3968cfaa9b3b729e93b0f26d36801880..176f00d6dc4033024cd9f363b2bb28663575f326 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 c4a21eedde2ef80a89bd01f0e8142a096bef376f..b9e649bebf041d563d73cad0a2ad41043daa83a1 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 29349fe9fb6d2881d1e03bf0cb4c236990f2e8dc..ce97aee7ded896e275251f7413a694af46c86a6b 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 5fdcde239c57b88deb4225cb77e91e8550f07c68..9b0ff64acf263045ea57e046147492c9f347a7d2 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