/
showStats.js
92 lines (68 loc) · 1.54 KB
/
showStats.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import chalk from 'chalk';
class Logger {
log(msg, color = 'white', prefix = 'webpack') {
if (prefix) {
prefix = this._prefix(prefix, color);
}
console.log(`${prefix} ${msg}`);
}
warn(msg) {
this.log(msg, 'yellow', 'warning');
}
error(msg) {
this.log(msg, 'red', 'error');
}
ok(msg) {
this.log(msg, 'green', 'ok');
}
info(msg) {
this.log(msg, 'gray', 'info');
}
_prefix(str, color = 'white') {
return chalk.white('[', chalk[color](str), ']');
}
}
const logger = new Logger();
const showStats = (fatalError, stats, options = {}) => {
if (fatalError) {
throw fatalError;
}
options = Object.assign({
context: '',
hash: false,
version: false,
timings: false,
assets: false,
chunks: false,
chunkModules: false,
modules: false,
children: false,
cached: false,
reasons: false,
source: false,
errorDetails: false,
chunkOrigins: false,
modulesSort: false,
chunksSort: false,
assetsSort: false,
}, options);
let jsonStats = stats.toJson(options);
let {errors, warnings} = jsonStats;
for (let err of errors) {
for (let errLine of err.split('\n')) {
logger.error(errLine);
}
}
for (let warn of warnings) {
for (let warnLine of warn.split('\n')) {
logger.error(warnLine);
}
}
if (jsonStats.time) {
logger.info(`Build completed in ${jsonStats.time / 1000}s`);
}
if (jsonStats.version) {
logger.info(`Webpack version ${jsonStats.version}`);
}
};
export default showStats;