Skip to content

Commit a66cfc5

Browse files
Ivan GodorogeaAndrew Luca
Ivan Godorogea
authored and
Andrew Luca
committed
Add hooks to be able to extend scripts configuration
1 parent 8b0dd54 commit a66cfc5

File tree

5 files changed

+48
-1
lines changed

5 files changed

+48
-1
lines changed

packages/react-scripts/config/env.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ if (!NODE_ENV) {
2222
);
2323
}
2424

25+
// @hook load dynamic environment variables
26+
const envJs = path.join(paths.appPath, 'config/env.js');
27+
if (fs.existsSync(envJs)) {
28+
require(envJs);
29+
}
30+
2531
// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
2632
const dotenvFiles = [
2733
`${paths.dotenv}.${NODE_ENV}.local`,

packages/react-scripts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "react-scripts",
2+
"name": "@winify/react-scripts",
33
"version": "3.4.0",
44
"description": "Configuration and scripts for Create React App.",
55
"repository": {

packages/react-scripts/scripts/build.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {
6262
// Generate configuration
6363
const config = configFactory('production');
6464

65+
// @hook override webpack config
66+
const webpackConfigOverride = path.join(
67+
paths.appPath,
68+
'config/webpack.config.override.js'
69+
);
70+
if (fs.existsSync(webpackConfigOverride)) {
71+
require(webpackConfigOverride)(config, 'production');
72+
}
73+
6574
// We require that you explicitly set browsers and do not fall back to
6675
// browserslist defaults.
6776
const { checkBrowsers } = require('react-dev-utils/browsersHelper');

packages/react-scripts/scripts/start.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,17 @@ checkBrowsers(paths.appPath, isInteractive)
109109
errors: errors =>
110110
devServer.sockWrite(devServer.sockets, 'errors', errors),
111111
};
112+
113+
// @hook override webpack config
114+
const path = require('path');
115+
const webpackConfigOverride = path.join(
116+
paths.appPath,
117+
'config/webpack.config.override.js'
118+
);
119+
if (fs.existsSync(webpackConfigOverride)) {
120+
require(webpackConfigOverride)(config, 'development');
121+
}
122+
112123
// Create a webpack compiler that is configured with custom messages.
113124
const compiler = createCompiler({
114125
appName,
@@ -132,6 +143,16 @@ checkBrowsers(paths.appPath, isInteractive)
132143
proxyConfig,
133144
urls.lanUrlForConfig
134145
);
146+
147+
// @hook override webpackDevServer config
148+
const serverConfigOverride = path.join(
149+
paths.appPath,
150+
'config/webpackDevServer.config.override.js'
151+
);
152+
if (fs.existsSync(serverConfigOverride)) {
153+
require(serverConfigOverride)(serverConfig, process.env.NODE_ENV);
154+
}
155+
135156
const devServer = new WebpackDevServer(compiler, serverConfig);
136157
// Launch WebpackDevServer.
137158
devServer.listen(port, HOST, err => {

packages/react-scripts/scripts/utils/createJestConfig.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
'use strict';
99

1010
const fs = require('fs');
11+
const path = require('path');
1112
const chalk = require('react-dev-utils/chalk');
1213
const paths = require('../../config/paths');
1314
const modules = require('../../config/modules');
@@ -146,5 +147,15 @@ module.exports = (resolve, rootDir, isEjecting) => {
146147
process.exit(1);
147148
}
148149
}
150+
151+
// @hook override webpack config
152+
const jestConfigOverride = path.join(
153+
paths.appPath,
154+
'config/jest.config.override.js'
155+
);
156+
if (fs.existsSync(jestConfigOverride)) {
157+
require(jestConfigOverride)(config);
158+
}
159+
149160
return config;
150161
};

0 commit comments

Comments
 (0)