UNPKG

1.4 kBJavaScriptView Raw
1const camelcase = require('camelcase');
2const merge = require('merge-options');
3const { LoaderOptionsPlugin, optimize } = require('webpack');
4
5const { MinChunkSizePlugin, LimitChunkCountPlugin } = optimize;
6
7module.exports = {
8 apply(argv, options) {
9 let plugins = [];
10
11 if (options.plugins) {
12 plugins = plugins.concat(options.plugins);
13 }
14
15 const { flags } = module.exports;
16 const keys = Object.keys(flags);
17
18 for (const key of keys) {
19 const arg = camelcase(key);
20 const flag = flags[key];
21 const value = argv[arg];
22
23 if (value) {
24 const plugin = flag.apply(value);
25 plugins.unshift(plugin);
26 }
27 }
28
29 return merge(options, plugins.length ? { plugins } : {});
30 },
31
32 flags: {
33 'optimize-max-chunks': {
34 apply: (value) =>
35 new LimitChunkCountPlugin({ maxChunks: parseInt(value, 10) }),
36 desc: 'Try to keep the chunk count below a limit',
37 type: 'number',
38 },
39 'optimize-min-chunk-size': {
40 apply: (value) =>
41 new MinChunkSizePlugin({ minChunkSize: parseInt(value, 10) }),
42 desc: 'Try to keep the chunk size above a limit',
43 type: 'number',
44 },
45 'optimize-minimize': {
46 apply: () => new LoaderOptionsPlugin({ minimize: true }),
47 desc: 'Minimize javascript and switches loaders to minimizing',
48 type: 'boolean',
49 },
50 },
51
52 name: 'Optimization',
53};