Skip to content

Commit 6372ca2

Browse files
authored
feat: Mock react-scripts 'config' folder (#593)
* feat: Add `config` folder with `paths.js`, `webpack.config.js` and `webpackDevServer.config.js` * fix: Remove duplicated `paths` override from `overrides/webpack.js` * fix: `paths` overrides also in `config/webpack.config.js` and `config/webpackDevServer.config.js`
1 parent 36375e3 commit 6372ca2

File tree

11 files changed

+97
-81
lines changed

11 files changed

+97
-81
lines changed

config/paths.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('../overrides/paths');

config/webpack.config.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// override paths in memory
2+
require('../overrides/paths');
3+
4+
module.exports = require('../overrides/webpack');

config/webpackDevServer.config.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// override paths in memory
2+
require('../overrides/paths');
3+
4+
module.exports = require('../overrides/devServer');

overrides/devServer.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const { scriptVersion } = require('../scripts/utils/paths');
2+
const overrides = require('../config-overrides');
3+
4+
const devServerConfigPath = `${scriptVersion}/config/webpackDevServer.config.js`;
5+
const devServerConfig = require(devServerConfigPath);
6+
7+
// override config in memory
8+
require.cache[require.resolve(devServerConfigPath)].exports =
9+
overrides.devServer(devServerConfig, process.env.NODE_ENV);
10+
11+
module.exports = require(devServerConfigPath);

overrides/jest.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const path = require('path');
2+
const paths = require('./paths');
3+
const overrides = require('../config-overrides');
4+
const rewireJestConfig = require('../scripts/utils/rewireJestConfig');
5+
const createJestConfigPath = `${paths.scriptVersion}/scripts/utils/createJestConfig`;
6+
7+
// hide overrides in package.json for CRA's original createJestConfig
8+
const packageJson = require(paths.appPackageJson);
9+
const jestOverrides = packageJson.jest;
10+
delete packageJson.jest;
11+
// load original createJestConfig
12+
const createJestConfig = require(createJestConfigPath);
13+
// run original createJestConfig
14+
const config = createJestConfig(
15+
relativePath => path.resolve(paths.appPath, 'node_modules', paths.scriptVersion, relativePath),
16+
path.resolve(paths.appSrc, '..'),
17+
false
18+
);
19+
// restore overrides for rewireJestConfig
20+
packageJson.jest = jestOverrides;
21+
// override createJestConfig in memory
22+
require.cache[require.resolve(createJestConfigPath)].exports =
23+
() => overrides.jest(rewireJestConfig(config));
24+
// Passing the --scripts-version on to the original test script can result
25+
// in the test script rejecting it as an invalid option. So strip it out of
26+
// the command line arguments before invoking the test script.
27+
if (paths.customScriptsIndex > -1) {
28+
process.argv.splice(paths.customScriptsIndex, 2);
29+
}
30+
31+
module.exports = require(createJestConfigPath);

overrides/paths.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const paths = require('../scripts/utils/paths');
2+
const overrides = require('../config-overrides');
3+
4+
const pathsConfigPath = `${paths.scriptVersion}/config/paths.js`;
5+
const pathsConfig = require(pathsConfigPath);
6+
7+
// extend paths with overrides
8+
const extendedPaths = Object.assign({}, paths, overrides.paths(pathsConfig, process.env.NODE_ENV));
9+
10+
// override paths in memory
11+
require.cache[require.resolve(pathsConfigPath)].exports =
12+
extendedPaths;
13+
14+
module.exports = require(pathsConfigPath);

overrides/webpack.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const semver = require('semver');
2+
3+
const { scriptVersion } = require('../scripts/utils/paths');
4+
const overrides = require('../config-overrides');
5+
const scriptPkg = require(`${scriptVersion}/package.json`);
6+
7+
// CRA 2.1.2 switched to using a webpack config factory
8+
// https://github.com/facebook/create-react-app/pull/5722
9+
// https://github.com/facebook/create-react-app/releases/tag/v2.1.2
10+
const isWebpackFactory = semver.gte(scriptPkg && scriptPkg.version, '2.1.2');
11+
const webpackFactoryEnvSuffix = process.env.NODE_ENV === 'production' ? '.prod' : '.dev';
12+
13+
const webpackConfigPath = `${scriptVersion}/config/webpack.config${!isWebpackFactory ? webpackFactoryEnvSuffix : ''}`;
14+
const webpackConfig = require(webpackConfigPath);
15+
16+
// override config in memory
17+
require.cache[require.resolve(webpackConfigPath)].exports = isWebpackFactory
18+
? (env) => overrides.webpack(webpackConfig(env), env)
19+
: overrides.webpack(webpackConfig, process.env.NODE_ENV);
20+
21+
module.exports = require(webpackConfigPath);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"/config-overrides.js",
3535
"/assets",
3636
"/bin",
37+
"/overrides",
3738
"/scripts"
3839
]
3940
}

scripts/build.js

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,12 @@
11
process.env.NODE_ENV = 'production';
22

3-
const semver = require('semver');
4-
53
const { scriptVersion } = require('./utils/paths');
6-
const overrides = require('../config-overrides');
7-
const scriptPkg = require(`${scriptVersion}/package.json`);
8-
9-
const pathsConfigPath = `${scriptVersion}/config/paths.js`;
10-
const pathsConfig = require(pathsConfigPath);
114

125
// override paths in memory
13-
require.cache[require.resolve(pathsConfigPath)].exports =
14-
overrides.paths(pathsConfig, process.env.NODE_ENV);
15-
16-
// CRA 2.1.2 switched to using a webpack config factory
17-
// https://github.com/facebook/create-react-app/pull/5722
18-
// https://github.com/facebook/create-react-app/releases/tag/v2.1.2
19-
const isWebpackFactory = semver.gte(scriptPkg && scriptPkg.version, '2.1.2');
20-
21-
const webpackConfigPath = `${scriptVersion}/config/webpack.config${!isWebpackFactory ? '.prod' : ''}`;
22-
const webpackConfig = require(webpackConfigPath);
6+
require('../overrides/paths');
237

248
// override config in memory
25-
require.cache[require.resolve(webpackConfigPath)].exports = isWebpackFactory
26-
? (env) => overrides.webpack(webpackConfig(env), env)
27-
: overrides.webpack(webpackConfig, process.env.NODE_ENV);
9+
require('../overrides/webpack');
2810

2911
// run original script
3012
require(`${scriptVersion}/scripts/build`);

scripts/start.js

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,13 @@
11
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
22

3-
const semver = require('semver');
4-
53
const { scriptVersion } = require('./utils/paths');
6-
const overrides = require('../config-overrides');
7-
const scriptPkg = require(`${scriptVersion}/package.json`);
8-
9-
const pathsConfigPath = `${scriptVersion}/config/paths.js`;
10-
const pathsConfig = require(pathsConfigPath);
114

125
// override paths in memory
13-
require.cache[require.resolve(pathsConfigPath)].exports =
14-
overrides.paths(pathsConfig, process.env.NODE_ENV);
15-
16-
// CRA 2.1.2 switched to using a webpack config factory
17-
// https://github.com/facebook/create-react-app/pull/5722
18-
// https://github.com/facebook/create-react-app/releases/tag/v2.1.2
19-
const isWebpackFactory = semver.gte(scriptPkg && scriptPkg.version, '2.1.2');
20-
21-
const webpackConfigPath = `${scriptVersion}/config/webpack.config${!isWebpackFactory ? '.dev' : ''}`;
22-
const devServerConfigPath = `${scriptVersion}/config/webpackDevServer.config.js`;
23-
const webpackConfig = require(webpackConfigPath);
24-
const devServerConfig = require(devServerConfigPath);
6+
require('../overrides/paths');
257

268
// override config in memory
27-
require.cache[require.resolve(webpackConfigPath)].exports = isWebpackFactory
28-
? (env) => overrides.webpack(webpackConfig(env), env)
29-
: overrides.webpack(webpackConfig, process.env.NODE_ENV);
30-
31-
require.cache[require.resolve(devServerConfigPath)].exports =
32-
overrides.devServer(devServerConfig, process.env.NODE_ENV);
9+
require('../overrides/webpack');
10+
require('../overrides/devServer');
3311

3412
// run original script
3513
require(`${scriptVersion}/scripts/start`);

0 commit comments

Comments
 (0)