Utility for reduce configuration. One config file for development, test and production. Work with a webpack-merge.
{
development: {
stats: {
colors: true,
warnings: true,
},
},
module: {
rules: [
{
include: [paths.dir.app],
use: [
{
loader: 'css-loader',
options: {
modules: true,
development: {
minimize: false,
},
}
},
],
},
],
},
plugins: [
new Dotenv(config.dotenv),
{development: () => {
const HardSourceWebpackPlugin = require('hard-source-webpack-plugin')
return [
new HardSourceWebpackPlugin(),
]
}},
{production: () => [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.HashedModuleIdsPlugin(),
]},
],
}
result for development:
{
stats: {
colors: true,
warnings: true,
},
module: {
rules: [
{
include: [paths.dir.app],
use: [
{
loader: 'css-loader',
options: {
modules: true,
minimize: false,
}
},
],
},
],
},
plugins: [
new Dotenv(config.dotenv),
new HardSourceWebpackPlugin(),
],
}
{
presets: ['@babel/preset-env'],
plugins: [
[
'emotion',
{
hoist: true,
development: {
sourceMap: true,
hoist: false,
},
},
],
'react-hot-loader/babel',
{ development: ['@babel/plugin-transform-react-jsx-source'] },
{
production: [
'transform-react-remove-prop-types',
],
},
],
}
result for production:
{
presets: ['@babel/preset-env'],
plugins: [
[
'emotion',
{
hoist: true,
},
],
'react-hot-loader/babel',
'transform-react-remove-prop-types',
],
}
yarn add config-reducer
const configReducer = require('config-reducer')
const commonConfig = {
development: {
stats: {
colors: true,
warnings: true,
},
},
// ....
}
const result = configReducer(commonConfig, process.env.NODE_ENV, [
'development',
'production',
])
module.exports = api => {
const babelConfig = {
presets: ['@babel/preset-env', '@babel/preset-react'],
// ...
}
return configReducer(babelConfig, api.env(), [
'development',
'production',
'test',
])
}
configReducer(input, reducer, cleanup = true)
- input - array/object
- reducer - string
- cleanup - boolean/string/array of string
Input examples:
[{ development: [] }]
[{ development: () => [] }]
{{ development: {} }}
{{ development: () => {} }}
- array/object reducer
- reducer in reducer / nested reducers
- alias ex: test = _test