From 980be029826cf4a8243b9e9477b8cf33433cb4a0 Mon Sep 17 00:00:00 2001 From: Joe Farro Date: Wed, 2 Jan 2019 13:57:35 -0500 Subject: [PATCH] Fix for CRA 2.1.2 #343, builds on #344 --- packages/react-app-rewired/package.json | 3 ++- packages/react-app-rewired/scripts/build.js | 23 +++++++++++------- packages/react-app-rewired/scripts/start.js | 27 ++++++++++++--------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/packages/react-app-rewired/package.json b/packages/react-app-rewired/package.json index 46d11e7..50d2725 100644 --- a/packages/react-app-rewired/package.json +++ b/packages/react-app-rewired/package.json @@ -11,7 +11,8 @@ }, "dependencies": { "cross-spawn": "^5.1.0", - "dotenv": "^4.0.0" + "dotenv": "^4.0.0", + "semver": "^5.6.0" }, "repository": { "type": "git", diff --git a/packages/react-app-rewired/scripts/build.js b/packages/react-app-rewired/scripts/build.js index 7ee68a0..723d98f 100644 --- a/packages/react-app-rewired/scripts/build.js +++ b/packages/react-app-rewired/scripts/build.js @@ -1,17 +1,22 @@ process.env.NODE_ENV = 'production'; -const paths = require('./utils/paths'); -const overrides = require('../config-overrides'); -const scriptPkg = require(paths.scriptVersion + "/package.json"); +const semver = require('semver'); -const isOldScript = !(scriptPkg && scriptPkg.version >= '2.1.2'); +const { scriptVersion } = require('./utils/paths'); +const overrides = require('../config-overrides'); +const scriptPkg = require(`${scriptVersion}/package.json`); -const webpackConfigPath = paths.scriptVersion + isOldScript ? "/config/webpack.config.prod" : "/config/webpack.config"; +// CRA 2.1.2 switched to using a webpack config factory +// https://github.com/facebook/create-react-app/pull/5722 +// https://github.com/facebook/create-react-app/releases/tag/v2.1.2 +const isWebpackFactory = semver.gte(scriptPkg && scriptPkg.version, '2.1.2'); -// load original config +const webpackConfigPath = `${scriptVersion}/config/webpack.config${!isWebpackFactory ? '.prod' : ''}`; const webpackConfig = require(webpackConfigPath); + // override config in memory -require.cache[require.resolve(webpackConfigPath)].exports = - isOldScript ? overrides.webpack(webpackConfig, process.env.NODE_ENV) : (env) => overrides.webpack(webpackConfig(env), env); +require.cache[require.resolve(webpackConfigPath)].exports = isWebpackFactory + ? (env) => overrides.webpack(webpackConfig(env), env) + : overrides.webpack(webpackConfig, process.env.NODE_ENV); // run original script -require(paths.scriptVersion + '/scripts/build'); +require(`${scriptVersion}/scripts/build`); diff --git a/packages/react-app-rewired/scripts/start.js b/packages/react-app-rewired/scripts/start.js index 5aae597..0fce3c6 100644 --- a/packages/react-app-rewired/scripts/start.js +++ b/packages/react-app-rewired/scripts/start.js @@ -1,23 +1,28 @@ -process.env.NODE_ENV = process.env.NODE_ENV || "development"; +process.env.NODE_ENV = process.env.NODE_ENV || 'development'; -const paths = require("./utils/paths"); -const overrides = require('../config-overrides'); -const scriptPkg = require(paths.scriptVersion + "/package.json"); +const semver = require('semver'); -const isOldScript = !(scriptPkg && scriptPkg.version >= '2.1.2'); +const { scriptVersion } = require('./utils/paths'); +const overrides = require('../config-overrides'); +const scriptPkg = require(`${scriptVersion}/package.json`); -const webpackConfigPath = paths.scriptVersion + isOldScript ? "/config/webpack.config.dev" : "/config/webpack.config"; -const devServerConfigPath = paths.scriptVersion + "/config/webpackDevServer.config.js"; +// CRA 2.1.2 switched to using a webpack config factory +// https://github.com/facebook/create-react-app/pull/5722 +// https://github.com/facebook/create-react-app/releases/tag/v2.1.2 +const isWebpackFactory = semver.gte(scriptPkg && scriptPkg.version, '2.1.2'); -// load original configs +const webpackConfigPath = `${scriptVersion}/config/webpack.config${!isWebpackFactory ? '.prod' : ''}`; +const devServerConfigPath = `${scriptVersion}/config/webpackDevServer.config.js`; const webpackConfig = require(webpackConfigPath); const devServerConfig = require(devServerConfigPath); + // override config in memory -require.cache[require.resolve(webpackConfigPath)].exports = - isOldScript ? overrides.webpack(webpackConfig, process.env.NODE_ENV) : (env) => overrides.webpack(webpackConfig(env), env); +require.cache[require.resolve(webpackConfigPath)].exports = isWebpackFactory + ? (env) => overrides.webpack(webpackConfig(env), env) + : overrides.webpack(webpackConfig, process.env.NODE_ENV); require.cache[require.resolve(devServerConfigPath)].exports = overrides.devServer(devServerConfig, process.env.NODE_ENV); // run original script -require(paths.scriptVersion + "/scripts/start"); \ No newline at end of file +require(`${scriptVersion}/scripts/start`);