From a0efb99ea88acdf80ed73b1a3055443b7da10c57 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Tue, 31 May 2016 14:32:26 -0700 Subject: [PATCH] Fix production webpack build --- package.json | 2 +- server/middlewares/global-locals.js | 15 ------- server/middlewares/jade-helpers.js | 56 +++++++++++++++++++++----- server/middlewares/revision-helpers.js | 19 --------- server/views/layout-react.jade | 2 + 5 files changed, 48 insertions(+), 46 deletions(-) delete mode 100644 server/middlewares/global-locals.js delete mode 100644 server/middlewares/revision-helpers.js diff --git a/package.json b/package.json index db7f77abde..0164ba5433 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "babel-preset-react": "^6.3.13", "babel-preset-stage-0": "^6.3.13", "browser-sync": "^2.9.12", - "chunk-manifest-webpack-plugin": "0.0.1", + "chunk-manifest-webpack-plugin": "0.1.0", "del": "^2.2.0", "eslint": "^3.1.0", "eslint-plugin-react": "^5.1.1", diff --git a/server/middlewares/global-locals.js b/server/middlewares/global-locals.js deleted file mode 100644 index aa2d7e32d0..0000000000 --- a/server/middlewares/global-locals.js +++ /dev/null @@ -1,15 +0,0 @@ -export default function globalLocals() { - return function(req, res, next) { - // Make user object available in templates. - res.locals.user = req.user; - res.locals._csrf = req.csrfToken ? req.csrfToken() : null; - if (req.csrfToken) { - res.expose({ token: res.locals._csrf }, 'csrf'); - } - res.locals.theme = req.user && req.user.theme || - req.cookies.theme || - 'default'; - - next(); - }; -} diff --git a/server/middlewares/jade-helpers.js b/server/middlewares/jade-helpers.js index c8625c34be..d1331a35fa 100644 --- a/server/middlewares/jade-helpers.js +++ b/server/middlewares/jade-helpers.js @@ -1,20 +1,54 @@ -const challengesRegex = /^(bonfire|waypoint|zipline|basejump|checkpoint):\s/i; +import manifest from '../rev-manifest'; import config from '../../webpack.config'; +let chunkManifest; +try { + chunkManifest = require('../manifests/chunk-manifest.json'); +} catch (err) { + chunkManifest = {}; +} + +chunkManifest = Object.keys(chunkManifest).reduce((manifest, key) => { + manifest[key] = '/' + chunkManifest[key]; + return manifest; +}, {}); + const __DEV__ = process.env.NODE_ENV !== 'production'; +const challengesRegex = /^(bonfire|waypoint|zipline|basejump|checkpoint):\s/i; + +function rev(scopedPrepend, asset) { + if (__DEV__) { + // do not use revision in dev mode + return `${scopedPrepend}/${asset}`; + } + return `${scopedPrepend}/${ manifest[asset] || asset }`; +} + +function removeOldTerms(str = '') { + return str.replace(challengesRegex, ''); +} + +function getBundleLocation() { + return __DEV__ ? + config.output.publicPath + '/bundle.js' : + rev('/js', 'bundle.js'); +} export default function jadeHelpers() { return function jadeHelpersMiddleware(req, res, next) { - res.locals.removeOldTerms = function removeOldTerms(str = '') { - return str.replace(challengesRegex, ''); - }; - - res.locals.getBundleLocation = function getBundleLocation() { - return __DEV__ ? - config.output.publicPath + '/bundle.js' : - 'js/bundle.js'; - }; - + res.locals.removeOldTerms = removeOldTerms; + res.locals.getBundleLocation = getBundleLocation; + res.locals.rev = rev; + // static data + res.locals.user = req.user; + res.locals.chunkManifest = chunkManifest; + res.locals._csrf = req.csrfToken ? req.csrfToken() : null; + if (req.csrfToken) { + res.expose({ token: res.locals._csrf }, 'csrf'); + } + res.locals.theme = req.user && req.user.theme || + req.cookies.theme || + 'default'; next(); }; } diff --git a/server/middlewares/revision-helpers.js b/server/middlewares/revision-helpers.js deleted file mode 100644 index b8a970ea8a..0000000000 --- a/server/middlewares/revision-helpers.js +++ /dev/null @@ -1,19 +0,0 @@ -import manifest from '../rev-manifest.json'; - -const __DEV__ = process.env.NODE_ENV === 'development'; - -export default function({ globalPrepend = '' } = {}) { - - function rev(scopedPrepend, asset) { - if (__DEV__) { - // do not use revision in dev mode - return `${globalPrepend}${scopedPrepend}/${asset}`; - } - return `${globalPrepend}${scopedPrepend}/${ manifest[asset] || asset }`; - } - - return function(req, res, next) { - res.locals.rev = rev; - return next(); - }; -} diff --git a/server/views/layout-react.jade b/server/views/layout-react.jade index cd766c8a5a..184ebdcd59 100644 --- a/server/views/layout-react.jade +++ b/server/views/layout-react.jade @@ -9,5 +9,7 @@ html(lang='en') body.no-top-and-bottom-margins(style='overflow: hidden') #fcc!= markup script!= state + script. + window.webpackManifest = !{JSON.stringify(chunkManifest || {})}; script(src=rev('/js', 'vendor-challenges.js')) script(src=getBundleLocation())