Skip to content

Commit be28c78

Browse files
committed
feat: env based config defaults
1 parent 8b61ab0 commit be28c78

File tree

11 files changed

+53
-45
lines changed

11 files changed

+53
-45
lines changed

lib/groups/basic.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class BasicGroup extends GroupHelper {
2424
}
2525
});
2626
if (this.opts.outputOptions['dev']) {
27-
this.opts.outputOptions['prod'] = false;
27+
this.opts.outputOptions['prod'] = undefined;
2828
}
2929
}
3030

lib/groups/output.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ const DEFAULT_FILENAME = 'bundle.js';
66
class OutputGroup extends GroupHelper {
77
constructor(options) {
88
super(options);
9+
this.opts = {
10+
options: {
11+
output: {},
12+
},
13+
};
914
}
1015

1116
parseDirectory(metaData) {
@@ -15,16 +20,8 @@ class OutputGroup extends GroupHelper {
1520
}
1621
}
1722

18-
parseFile() {}
19-
2023
resolveOptions() {
2124
const { args } = this;
22-
23-
this.opts = {
24-
options: {
25-
output: {},
26-
},
27-
};
2825
if (args) {
2926
const { output } = args;
3027
const outputInfo = path.parse(output);

lib/groups/stats.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@ class StatsGroup extends GroupHelper {
44
constructor(options) {
55
super(options);
66
}
7-
resolveOption(opt) {
8-
const key = Object.keys(opt)[0];
9-
if (key == 's') {
10-
opt[key]();
11-
return null;
12-
}
13-
return opt;
14-
}
157

168
resolveOptions() {
179
Object.keys(this.args).forEach(arg => {

lib/utils/cli-flags.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,15 @@ module.exports = {
161161
name: 'dev',
162162
alias: 'd',
163163
type: Boolean,
164-
defaultValue: false,
164+
defaultValue: undefined,
165165
group: BASIC_GROUP,
166166
description: 'Run development build',
167167
},
168168
{
169169
name: 'prod',
170170
alias: 'p',
171171
type: Boolean,
172-
defaultValue: true,
172+
defaultValue: undefined,
173173
group: BASIC_GROUP,
174174
description: 'Run production build',
175175
},
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const JsConfigWebpackPlugin = require('js-config-webpack-plugin');
33

44
module.exports = {
55
mode: 'production',
6-
6+
entry: './index.js',
77
plugins: [new JsConfigWebpackPlugin()],
88

99
optimization: {

lib/utils/zero-config.js

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
1-
function mergeObjectOrArrayConfig(defaults, config) {
2-
const merge = require('webpack-merge');
3-
if(Array.isArray(config)) {
4-
return config.map(arrayObject => merge(defaults, arrayObject));
1+
function getEnvFromOptionsAndMode(mode, optionsObject) {
2+
const optionsDevFlag = optionsObject.dev;
3+
const optionsProdFlag = optionsObject.prod;
4+
if(!optionsDevFlag && !optionsProdFlag && mode) {
5+
return mode;
6+
}
7+
else if(optionsProdFlag) {
8+
return 'production';
59
}
6-
return merge(defaults, config);
10+
else if(optionsDevFlag) {
11+
return 'development';
12+
}
13+
return 'production';
714
}
815

9-
module.exports = function(webpackObject, isDevMode) {
10-
if (!isDevMode) {
11-
const prodConfig = require('./prod-config');
12-
webpackObject.options = mergeObjectOrArrayConfig(prodConfig, webpackObject.options);
13-
} else {
14-
const devConfig = require('./dev-config');
15-
webpackObject.options = mergeObjectOrArrayConfig(devConfig, webpackObject.options);
16+
module.exports = function setDefaultConfigBasedOnEnvironment(webpackObject) {
17+
const merge = require('webpack-merge');
18+
if(Array.isArray(webpackObject.options)) {
19+
const newArrayConfigurations = webpackObject.options.map(arrayObject => {
20+
const modeFlag = arrayObject.mode;
21+
const defaultConfigType = getEnvFromOptionsAndMode(modeFlag, webpackObject.outputOptions);
22+
const defaultConfig = require(`./${defaultConfigType}-config`);
23+
const newConfig = merge(defaultConfig, arrayObject);
24+
newConfig.mode = defaultConfigType;
25+
return newConfig;
26+
});
27+
webpackObject.options = newArrayConfigurations;
28+
return webpackObject;
1629
}
30+
const modeFlag = webpackObject.options.mode;
31+
const defaultConfigType = getEnvFromOptionsAndMode(modeFlag, webpackObject.outputOptions);
32+
const defaultConfig = require(`./${defaultConfigType}-config`);
33+
const newConfig = merge(defaultConfig, webpackObject.options);
34+
newConfig.mode = defaultConfigType;
35+
webpackObject.options = newConfig;
1736
return webpackObject;
1837
};

lib/webpack-cli.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,7 @@ class WebpackCLI extends GroupHelper {
125125
}
126126
groupResult.options = webpackMerge(groupResult.options, e.options);
127127
});
128-
// TODO: Arrays needs to be searched for this first then default back to cli
129-
const isDevMode = groupResult.outputOptions['dev'];
130-
const wrappedConfig = require('./utils/zero-config')(groupResult, isDevMode);
128+
const wrappedConfig = require('./utils/zero-config')(groupResult);
131129
wrappedConfig.options = this.checkDefaults(wrappedConfig.options);
132130
return wrappedConfig;
133131
}

test/config/type/promise/promise-config.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const { resolve, sep } = require('path');
44
const { run, extractSummary } = require('../../../utils/test-utils');
55

66
describe('promise configuration', () => {
7-
it.skip('is able to understand a configuration file as a promise', done => {
7+
it('is able to understand a configuration file as a promise', done => {
88
const { stdout } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js')], false);
99
const summary = extractSummary(stdout);
1010
const outputDir = 'type/promise/binary';
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
/* eslint-disable @typescript-eslint/explicit-function-return-type */
22
module.exports = () => {
33
return new Promise(resolve => {
4-
resolve({
5-
entry: './a',
6-
output: {
7-
path: __dirname + '/binary',
8-
filename: 'promise.js',
9-
},
10-
});
4+
setTimeout(() => {
5+
resolve({
6+
entry: './a',
7+
output: {
8+
path: __dirname + '/binary',
9+
filename: 'promise.js',
10+
},
11+
});
12+
}, 5000);
1113
});
1214
};

0 commit comments

Comments
 (0)