1 | 'use strict'
|
2 |
|
3 | const merge = require('webpack-merge')
|
4 |
|
5 | const decorateOptions = require('./decorate-options')
|
6 | const commonConfigs = require('./common-configs')
|
7 | const electronConfigs = require('./electron-configs')
|
8 | const developmentConfigs = require('./development-configs')
|
9 | const productionConfigs = require('./production-configs')
|
10 | const generateLoaders = require('./generate-loaders')
|
11 | const generatePlugins = require('./generate-plugins')
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | module.exports = function webpackBase(options = {}) {
|
25 | const decoratedOptions = decorateOptions(options)
|
26 | const loaders = generateLoaders(decoratedOptions)
|
27 | const plugins = generatePlugins(decoratedOptions)
|
28 |
|
29 | const { development, production, electron } = decoratedOptions.flags
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | let configs = commonConfigs(decoratedOptions)
|
35 |
|
36 |
|
37 | if (electron) configs = merge(configs, electronConfigs())
|
38 | if (production) configs = merge(configs, productionConfigs(decoratedOptions))
|
39 | if (development) configs = merge(configs, developmentConfigs(decoratedOptions))
|
40 |
|
41 |
|
42 | const configuredLoaders = {}
|
43 | const configuredPlugins = {}
|
44 |
|
45 | const loadersSet = configs.module.rules
|
46 | configs.module.rules = []
|
47 | loadersSet.forEach((loaderName) => {
|
48 | if (options[loaderName] === false) return
|
49 |
|
50 | let loader
|
51 | if (typeof options[loaderName] === 'function') {
|
52 | loader = options[loaderName](loaders[loaderName]())
|
53 | } else {
|
54 | loader = loaders[loaderName](options[loaderName])
|
55 | }
|
56 | configs.module.rules.push(loader)
|
57 | configuredLoaders[loaderName] = loader
|
58 | })
|
59 |
|
60 | const pluginsSet = configs.plugins
|
61 | configs.plugins = []
|
62 | pluginsSet.forEach((pluginName) => {
|
63 | if (options[pluginName] === false) return
|
64 |
|
65 | const plugin = plugins[pluginName]
|
66 | configs.plugins.push(plugin)
|
67 | configuredPlugins[pluginName] = plugin
|
68 | })
|
69 |
|
70 | return { configs, loaders: configuredLoaders, plugins: configuredPlugins }
|
71 | }
|