Skip to content

Commit f841ade

Browse files
committed
feature #300 Allow to replace options in configuration callbacks (Lyrkan)
This PR was squashed before being merged into the master branch (closes #300). Discussion ---------- Allow to replace options in configuration callbacks This PR closes #298 by using the return value of callback functions (for loaders/plugins) as options if it is an object. For instance: ```js Encore.configureUglifyJsPlugin((options) => { return { ...options, beautify: true }; }); ``` Commits ------- 3dfc787 Revert a forgotten 'let' to a 'const' ef992c1 Replace duplicated 'options callback' logic by an utility method ecb623c Allow to replace options in configuration callbacks
2 parents 4c48ce4 + 3dfc787 commit f841ade

36 files changed

+391
-120
lines changed

lib/config-generator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ class ConfigGenerator {
223223
if (this.webpackConfig.useVueLoader) {
224224
rules.push({
225225
test: /\.vue$/,
226-
use: vueLoaderUtil.getLoaders(this.webpackConfig, this.webpackConfig.vueLoaderOptionsCallback)
226+
use: vueLoaderUtil.getLoaders(this.webpackConfig)
227227
});
228228
}
229229

lib/loaders/babel.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
const loaderFeatures = require('../features');
13+
const applyOptionsCallback = require('../utils/apply-options-callback');
1314

1415
/**
1516
* @param {WebpackConfig} webpackConfig
@@ -67,12 +68,7 @@ module.exports = {
6768
}
6869
}
6970

70-
// allow for babel config to be controlled
71-
webpackConfig.babelConfigurationCallback.apply(
72-
// use babelConfig as the this variable
73-
babelConfig,
74-
[babelConfig]
75-
);
71+
babelConfig = applyOptionsCallback(webpackConfig.babelConfigurationCallback, babelConfig);
7672
}
7773

7874
return [

lib/loaders/coffee-script.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
const loaderFeatures = require('../features');
13+
const applyOptionsCallback = require('../utils/apply-options-callback');
1314

1415
/**
1516
* @param {WebpackConfig} webpackConfig
@@ -26,16 +27,10 @@ module.exports = {
2627
}
2728
};
2829

29-
// allow options to be configured
30-
webpackConfig.coffeeScriptConfigurationCallback.apply(
31-
options,
32-
[options]
33-
);
34-
3530
return [
3631
{
3732
loader: 'coffee-loader',
38-
options: options,
33+
options: applyOptionsCallback(webpackConfig.coffeeScriptConfigurationCallback, options)
3934
},
4035
];
4136
}

lib/loaders/css.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
const loaderFeatures = require('../features');
13+
const applyOptionsCallback = require('../utils/apply-options-callback');
1314

1415
/**
1516
* @param {WebpackConfig} webpackConfig
@@ -42,16 +43,9 @@ module.exports = {
4243
sourceMap: webpackConfig.useSourceMaps
4344
};
4445

45-
// allow options to be configured
46-
webpackConfig.postCssLoaderOptionsCallback.apply(
47-
// use config as the this variable
48-
postCssLoaderOptions,
49-
[postCssLoaderOptions]
50-
);
51-
5246
cssLoaders.push({
5347
loader: 'postcss-loader',
54-
options: postCssLoaderOptions
48+
options: applyOptionsCallback(webpackConfig.postCssLoaderOptionsCallback, postCssLoaderOptions)
5549
});
5650
}
5751

lib/loaders/less.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const cssLoader = require('./css');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -25,18 +26,11 @@ module.exports = {
2526
sourceMap: webpackConfig.useSourceMaps
2627
};
2728

28-
// allow options to be configured
29-
webpackConfig.lessLoaderOptionsCallback.apply(
30-
// use config as the this variable
31-
config,
32-
[config]
33-
);
34-
3529
return [
3630
...cssLoader.getLoaders(webpackConfig, ignorePostCssLoader),
3731
{
3832
loader: 'less-loader',
39-
options: config
33+
options: applyOptionsCallback(webpackConfig.lessLoaderOptionsCallback, config)
4034
},
4135
];
4236
}

lib/loaders/sass.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const cssLoader = require('./css');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -35,21 +36,14 @@ module.exports = {
3536
});
3637
}
3738

38-
let config = Object.assign({}, sassOptions, {
39+
const config = Object.assign({}, sassOptions, {
3940
// needed by the resolve-url-loader
4041
sourceMap: (true === webpackConfig.sassOptions.resolveUrlLoader) || webpackConfig.useSourceMaps
4142
});
4243

43-
// allow options to be configured
44-
webpackConfig.sassLoaderOptionsCallback.apply(
45-
// use config as the this variable
46-
config,
47-
[config]
48-
);
49-
5044
sassLoaders.push({
5145
loader: 'sass-loader',
52-
options: config,
46+
options: applyOptionsCallback(webpackConfig.sassLoaderOptionsCallback, config)
5347
});
5448

5549
return sassLoaders;

lib/loaders/stylus.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const cssLoader = require('./css');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -25,18 +26,11 @@ module.exports = {
2526
sourceMap: webpackConfig.useSourceMaps
2627
};
2728

28-
// allow options to be configured
29-
webpackConfig.stylusLoaderOptionsCallback.apply(
30-
// use config as the this variable
31-
config,
32-
[config]
33-
);
34-
3529
return [
3630
...cssLoader.getLoaders(webpackConfig, ignorePostCssLoader),
3731
{
3832
loader: 'stylus-loader',
39-
options: config
33+
options: applyOptionsCallback(webpackConfig.stylusLoaderOptionsCallback, config)
4034
},
4135
];
4236
}

lib/loaders/typescript.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const babelLoader = require('./babel');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -26,11 +27,7 @@ module.exports = {
2627
};
2728

2829
// allow for ts-loader config to be controlled
29-
webpackConfig.tsConfigurationCallback.apply(
30-
// use config as the this variable
31-
config,
32-
[config]
33-
);
30+
config = applyOptionsCallback(webpackConfig.tsConfigurationCallback, config);
3431

3532
// fork-ts-checker-webpack-plugin integration
3633
if (webpackConfig.useForkedTypeScriptTypeChecking) {

lib/loaders/vue.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ const sassLoaderUtil = require('./sass');
1515
const lessLoaderUtil = require('./less');
1616
const babelLoaderUtil = require('./babel');
1717
const extractText = require('./extract-text');
18+
const applyOptionsCallback = require('../utils/apply-options-callback');
1819

1920
/**
2021
* @param {WebpackConfig} webpackConfig
21-
* @param {function} vueLoaderOptionsCallback
2222
* @return {Array} of loaders to use for Vue files
2323
*/
2424
module.exports = {
25-
getLoaders(webpackConfig, vueLoaderOptionsCallback) {
25+
getLoaders(webpackConfig) {
2626
loaderFeatures.ensurePackagesExist('vue');
2727

2828
/*
@@ -117,16 +117,14 @@ module.exports = {
117117
};
118118
}
119119

120-
let options = {
120+
const options = {
121121
loaders: loaders
122122
};
123-
// allow the options to be mutated via a callback
124-
vueLoaderOptionsCallback(options);
125123

126124
return [
127125
{
128126
loader: 'vue-loader',
129-
options: options
127+
options: applyOptionsCallback(webpackConfig.vueLoaderOptionsCallback, options)
130128
}
131129
];
132130
}

lib/plugins/clean.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const CleanWebpackPlugin = require('clean-webpack-plugin');
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* Updates plugins array passed adding CleanWebpackPlugin instance
@@ -30,15 +31,10 @@ module.exports = function(plugins, webpackConfig) {
3031
verbose: false,
3132
};
3233

33-
webpackConfig.cleanWebpackPluginOptionsCallback.apply(
34-
cleanWebpackPluginOptions,
35-
[cleanWebpackPluginOptions]
36-
);
37-
3834
plugins.push({
3935
plugin: new CleanWebpackPlugin(
4036
webpackConfig.cleanWebpackPluginPaths,
41-
cleanWebpackPluginOptions
37+
applyOptionsCallback(webpackConfig.cleanWebpackPluginOptionsCallback, cleanWebpackPluginOptions)
4238
),
4339
priority: PluginPriorities.CleanWebpackPlugin
4440
});

lib/plugins/define.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const webpack = require('webpack');
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {Array} plugins
@@ -24,13 +25,10 @@ module.exports = function(plugins, webpackConfig) {
2425
}
2526
};
2627

27-
webpackConfig.definePluginOptionsCallback.apply(
28-
definePluginOptions,
29-
[definePluginOptions]
30-
);
31-
3228
plugins.push({
33-
plugin: new webpack.DefinePlugin(definePluginOptions),
29+
plugin: new webpack.DefinePlugin(
30+
applyOptionsCallback(webpackConfig.definePluginOptionsCallback, definePluginOptions)
31+
),
3432
priority: PluginPriorities.DefinePlugin
3533
});
3634
};

lib/plugins/extract-text.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const ExtractTextPlugin = require('extract-text-webpack-plugin');
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {Array} plugins
@@ -45,13 +46,10 @@ module.exports = function(plugins, webpackConfig) {
4546
allChunks: false
4647
};
4748

48-
webpackConfig.extractTextPluginOptionsCallback.apply(
49-
extractTextPluginOptions,
50-
[extractTextPluginOptions]
51-
);
52-
5349
plugins.push({
54-
plugin: new ExtractTextPlugin(extractTextPluginOptions),
50+
plugin: new ExtractTextPlugin(
51+
applyOptionsCallback(webpackConfig.extractTextPluginOptionsCallback, extractTextPluginOptions)
52+
),
5553
priority: PluginPriorities.ExtractTextWebpackPlugin
5654
});
5755
};

lib/plugins/forked-ts-types.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,19 @@
1111

1212
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); // eslint-disable-line
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
1718
* @return {void}
1819
*/
1920
module.exports = function(webpackConfig) {
20-
let config = {};
21-
22-
// allow for ts-loader config to be controlled
23-
webpackConfig.forkedTypeScriptTypesCheckOptionsCallback.apply(
24-
// use config as the this variable
25-
config,
26-
[config]
27-
);
21+
const config = {};
2822

2923
webpackConfig.addPlugin(
30-
new ForkTsCheckerWebpackPlugin(config),
24+
new ForkTsCheckerWebpackPlugin(
25+
applyOptionsCallback(webpackConfig.forkedTypeScriptTypesCheckOptionsCallback, config)
26+
),
3127
PluginPriorities.ForkTsCheckerWebpackPlugin
3228
);
3329
};

lib/plugins/friendly-errors.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const missingPostCssConfigTransformer = require('../friendly-errors/transformers
1616
const missingPostCssConfigFormatter = require('../friendly-errors/formatters/missing-postcss-config');
1717
const vueUnactivatedLoaderTransformer = require('../friendly-errors/transformers/vue-unactivated-loader-error');
1818
const vueUnactivatedLoaderFormatter = require('../friendly-errors/formatters/vue-unactivated-loader-error');
19+
const applyOptionsCallback = require('../utils/apply-options-callback');
1920

2021
/**
2122
* @param {WebpackConfig} webpackConfig
@@ -39,10 +40,7 @@ module.exports = function(webpackConfig) {
3940
}
4041
};
4142

42-
webpackConfig.friendlyErrorsPluginOptionsCallback.apply(
43-
friendlyErrorsPluginOptions,
44-
[friendlyErrorsPluginOptions]
43+
return new FriendlyErrorsWebpackPlugin(
44+
applyOptionsCallback(webpackConfig.friendlyErrorsPluginOptionsCallback, friendlyErrorsPluginOptions)
4545
);
46-
47-
return new FriendlyErrorsWebpackPlugin(friendlyErrorsPluginOptions);
4846
};

lib/plugins/loader-options.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const webpack = require('webpack');
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {Array} plugins
@@ -35,13 +36,10 @@ module.exports = function(plugins, webpackConfig) {
3536
}
3637
};
3738

38-
webpackConfig.loaderOptionsPluginOptionsCallback.apply(
39-
loaderOptionsPluginOptions,
40-
[loaderOptionsPluginOptions]
41-
);
42-
4339
plugins.push({
44-
plugin: new webpack.LoaderOptionsPlugin(loaderOptionsPluginOptions),
40+
plugin: new webpack.LoaderOptionsPlugin(
41+
applyOptionsCallback(webpackConfig.loaderOptionsPluginOptionsCallback, loaderOptionsPluginOptions)
42+
),
4543
priority: PluginPriorities.LoaderOptionsPlugin
4644
});
4745
};

0 commit comments

Comments
 (0)