Skip to content

Commit fa460b9

Browse files
committed
allow extending webpack config
1 parent bfcc00b commit fa460b9

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Diff for: config/paths.js

+3
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ module.exports = {
7373
yarnLockFile: resolveApp('yarn.lock'),
7474
testsSetup: resolveModule(resolveApp, 'src/setupTests'),
7575
proxySetup: resolveApp('src/setupProxy.js'),
76+
webpackSetup: resolveApp('webpack.config.js'),
7677
appNodeModules: resolveApp('node_modules'),
7778
appWebpackCache: resolveApp('node_modules/.cache'),
7879
appTsBuildInfoFile: resolveApp('node_modules/.cache/tsconfig.tsbuildinfo'),
@@ -98,6 +99,7 @@ module.exports = {
9899
yarnLockFile: resolveApp('yarn.lock'),
99100
testsSetup: resolveModule(resolveApp, 'src/setupTests'),
100101
proxySetup: resolveApp('src/setupProxy.js'),
102+
webpackSetup: resolveApp('webpack.config.js'),
101103
appNodeModules: resolveApp('node_modules'),
102104
appWebpackCache: resolveApp('node_modules/.cache'),
103105
appTsBuildInfoFile: resolveApp('node_modules/.cache/tsconfig.tsbuildinfo'),
@@ -136,6 +138,7 @@ if (
136138
yarnLockFile: resolveOwn(`${templatePath}/yarn.lock`),
137139
testsSetup: resolveModule(resolveOwn, `${templatePath}/src/setupTests`),
138140
proxySetup: resolveOwn(`${templatePath}/src/setupProxy.js`),
141+
webpackSetup: resolveApp(`${templatePath}/webpack.config.js`),
139142
appNodeModules: resolveOwn('node_modules'),
140143
appWebpackCache: resolveOwn('node_modules/.cache'),
141144
appTsBuildInfoFile: resolveOwn('node_modules/.cache/tsconfig.tsbuildinfo'),

Diff for: config/webpack.config.js

+17-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const sassModuleRegex = /\.module\.(scss|sass)$/;
8282

8383
// This is the production and development configuration.
8484
// It is focused on developer experience, fast rebuilds, and a minimal bundle.
85-
module.exports = function (webpackEnv) {
85+
const baseConfigFactory = function (webpackEnv) {
8686
const isEnvDevelopment = webpackEnv === 'development';
8787
const isEnvProduction = webpackEnv === 'production';
8888
const shouldExtractCss = isEnvProduction && extractCss;
@@ -650,3 +650,19 @@ module.exports = function (webpackEnv) {
650650
performance: false,
651651
};
652652
};
653+
654+
module.exports = function (webpackEnv) {
655+
const baseConfig = baseConfigFactory(webpackEnv);
656+
657+
if (fs.existsSync(paths.webpackSetup)) {
658+
const customSetup = require(paths.webpackSetup);
659+
660+
if (typeof customSetup !== 'function') {
661+
throw new Error('Custom webpack config file must export a function that accepts `env` as first parameter and `defaultConfig` as second');
662+
}
663+
664+
return customSetup(webpackEnv, baseConfig);
665+
}
666+
667+
return baseConfig;
668+
};

0 commit comments

Comments
 (0)