@@ -30,40 +30,60 @@ function validateRuntimeConfig(runtimeConfig) {
3030class WebpackConfig {
3131 constructor ( runtimeConfig ) {
3232 validateRuntimeConfig ( runtimeConfig ) ;
33+
3334 this . runtimeConfig = runtimeConfig ;
34- this . outputPath = null ;
35- this . publicPath = null ;
36- this . manifestKeyPrefix = null ;
3735 this . entries = new Map ( ) ;
3836 this . styleEntries = new Map ( ) ;
3937 this . plugins = [ ] ;
38+ this . loaders = [ ] ;
39+
40+ // Global settings
41+ this . outputPath = null ;
42+ this . publicPath = null ;
43+ this . manifestKeyPrefix = null ;
44+ this . sharedCommonsEntryName = null ;
45+ this . providedVariables = { } ;
46+ this . configuredFilenames = { } ;
47+
48+ // Features/Loaders flags
4049 this . useVersioning = false ;
4150 this . useSourceMaps = false ;
51+ this . cleanupOutput = false ;
52+ this . useImagesLoader = true ;
53+ this . useFontsLoader = true ;
4254 this . usePostCssLoader = false ;
43- this . postCssLoaderOptionsCallback = function ( ) { } ;
44- this . useSassLoader = false ;
45- this . sassLoaderOptionsCallback = function ( ) { } ;
46- this . sassOptions = {
47- resolve_url_loader : true
48- } ;
4955 this . useLessLoader = false ;
50- this . lessLoaderOptionsCallback = function ( ) { } ;
51- this . cleanupOutput = false ;
52- this . sharedCommonsEntryName = null ;
53- this . providedVariables = { } ;
54- this . babelConfigurationCallback = function ( ) { } ;
56+ this . useSassLoader = false ;
5557 this . useReact = false ;
5658 this . useVueLoader = false ;
57- this . vueLoaderOptionsCallback = ( ) => { } ;
58- this . loaders = [ ] ;
5959 this . useTypeScriptLoader = false ;
60- this . tsConfigurationCallback = function ( ) { } ;
6160 this . useForkedTypeScriptTypeChecking = false ;
61+
62+ // Features/Loaders options
63+ this . sassOptions = {
64+ resolve_url_loader : true
65+ } ;
66+
67+ // Features/Loaders options callbacks
68+ this . postCssLoaderOptionsCallback = ( ) => { } ;
69+ this . sassLoaderOptionsCallback = ( ) => { } ;
70+ this . lessLoaderOptionsCallback = ( ) => { } ;
71+ this . babelConfigurationCallback = ( ) => { } ;
72+ this . vueLoaderOptionsCallback = ( ) => { } ;
73+ this . tsConfigurationCallback = ( ) => { } ;
74+
75+ // Plugins options
76+ this . cleanWebpackPluginPaths = [ '**/*' ] ;
77+
78+ // Plugins callbacks
79+ this . cleanWebpackPluginOptionsCallback = ( ) => { } ;
80+ this . definePluginOptionsCallback = ( ) => { } ;
81+ this . extractTextPluginOptionsCallback = ( ) => { } ;
6282 this . forkedTypeScriptTypesCheckOptionsCallback = ( ) => { } ;
63- this . useImagesLoader = true ;
64- this . useFontsLoader = true ;
65- this . configuredFilenames = { } ;
66- this . manifestPluginOptionsCallback = function ( ) { } ;
83+ this . friendlyErrorsPluginOptionsCallback = ( ) => { } ;
84+ this . loaderOptionsPluginOptionsCallback = ( ) => { } ;
85+ this . manifestPluginOptionsCallback = ( ) => { } ;
86+ this . uglifyJsPluginOptionsCallback = ( ) => { } ;
6787 }
6888
6989 getContext ( ) {
@@ -118,6 +138,51 @@ class WebpackConfig {
118138 this . manifestKeyPrefix = manifestKeyPrefix ;
119139 }
120140
141+ configureCleanWebpackPlugin ( paths = [ '**/*' ] , cleanWebpackPluginOptionsCallback = ( ) => { } ) {
142+ if ( ! Array . isArray ( paths ) ) {
143+ throw new Error ( 'Argument 1 to configureCleanWebpackPlugin() must be an Array' ) ;
144+ }
145+
146+ if ( typeof cleanWebpackPluginOptionsCallback !== 'function' ) {
147+ throw new Error ( 'Argument 2 to configureCleanWebpackPlugin() must be a callback function' ) ;
148+ }
149+
150+ this . cleanWebpackPluginPaths = paths ;
151+ this . cleanWebpackPluginOptionsCallback = cleanWebpackPluginOptionsCallback ;
152+ }
153+
154+ configureDefinePlugin ( definePluginOptionsCallback = ( ) => { } ) {
155+ if ( typeof definePluginOptionsCallback !== 'function' ) {
156+ throw new Error ( 'Argument 1 to configureDefinePlugin() must be a callback function' ) ;
157+ }
158+
159+ this . definePluginOptionsCallback = definePluginOptionsCallback ;
160+ }
161+
162+ configureExtractTextPlugin ( extractTextPluginOptionsCallback = ( ) => { } ) {
163+ if ( typeof extractTextPluginOptionsCallback !== 'function' ) {
164+ throw new Error ( 'Argument 1 to configureExtractTextPlugin() must be a callback function' ) ;
165+ }
166+
167+ this . extractTextPluginOptionsCallback = extractTextPluginOptionsCallback ;
168+ }
169+
170+ configureFriendlyErrorsPlugin ( friendlyErrorsPluginOptionsCallback = ( ) => { } ) {
171+ if ( typeof friendlyErrorsPluginOptionsCallback !== 'function' ) {
172+ throw new Error ( 'Argument 1 to configureFriendlyErrorsPlugin() must be a callback function' ) ;
173+ }
174+
175+ this . friendlyErrorsPluginOptionsCallback = friendlyErrorsPluginOptionsCallback ;
176+ }
177+
178+ configureLoaderOptionsPlugin ( loaderOptionsPluginOptionsCallback = ( ) => { } ) {
179+ if ( typeof loaderOptionsPluginOptionsCallback !== 'function' ) {
180+ throw new Error ( 'Argument 1 to configureLoaderOptionsPlugin() must be a callback function' ) ;
181+ }
182+
183+ this . loaderOptionsPluginOptionsCallback = loaderOptionsPluginOptionsCallback ;
184+ }
185+
121186 configureManifestPlugin ( manifestPluginOptionsCallback = ( ) => { } ) {
122187 if ( typeof manifestPluginOptionsCallback !== 'function' ) {
123188 throw new Error ( 'Argument 1 to configureManifestPlugin() must be a callback function' ) ;
@@ -126,6 +191,14 @@ class WebpackConfig {
126191 this . manifestPluginOptionsCallback = manifestPluginOptionsCallback ;
127192 }
128193
194+ configureUglifyJsPlugin ( uglifyJsPluginOptionsCallback = ( ) => { } ) {
195+ if ( typeof uglifyJsPluginOptionsCallback !== 'function' ) {
196+ throw new Error ( 'Argument 1 to configureUglifyJsPlugin() must be a callback function' ) ;
197+ }
198+
199+ this . uglifyJsPluginOptionsCallback = uglifyJsPluginOptionsCallback ;
200+ }
201+
129202 /**
130203 * Returns the value that should be used as the publicPath,
131204 * which can be overridden by enabling the webpackDevServer
0 commit comments