-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
60 lines (54 loc) · 1.71 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
.BundleAnalyzerPlugin;
module.exports = (api, projectOptions) => {
api.registerCommand('analyze', {
description: 'analyze output with Webpack Bundle Analyzer',
usage: 'vue-cli-service analyze'
},
async (args, rawArgs) => {
const { build } = api.service.commands
args.report = true;
args["report-json"] = true;
const mergedOptions = Object.assign({
analyzerMode: 'server',
openAnalyzer: true
},
(projectOptions.pluginOptions || {}).bundleAnalyzer || {},
getArgsOptions(args)
);
if (args.verbose) {
console.info(mergedOptions);
}
api.chainWebpack(webpackConfig => {
webpackConfig
.plugin("bundleAnalyzer")
.use(BundleAnalyzerPlugin)
.init(Plugin => new Plugin(mergedOptions));
});
return await build.fn(args, rawArgs);
}
);
}
function getArgsOptions(args) {
const argsOptions = {
analyzerMode: args.analyzerMode,
analyzerHost: args.analyzerHost,
analyzerPort: !!args.analyzerPort ? Number.parseInt(args.analyzerPort) : undefined,
reportFilename: args.reportFilename,
reportTitle: args.reportTitle,
defaultSizes: args.defaultSizes,
openAnalyzer: !!args.openAnalyzer ? args.openAnalyzer === 'true' : undefined,
generateStatsFile: !!args.generateStatsFile ? args.generateStatsFile === 'true' : undefined,
statsFilename: args.statsFilename,
logLevel: args.logLevel,
};
for (const [key, value] of Object.entries(argsOptions)) {
if (value === undefined) {
delete argsOptions[key];
}
}
return argsOptions;
}
module.exports.defaultModes = {
analyze: 'production'
}