@@ -18,7 +18,13 @@ var stripAnsi = require('strip-ansi');
18
18
var gzipSize = require ( 'gzip-size' ) . sync ;
19
19
20
20
// Prints a detailed summary of build files.
21
- function printFileSizesAfterBuild ( webpackStats , previousSizeMap , buildFolder ) {
21
+ function printFileSizesAfterBuild (
22
+ webpackStats ,
23
+ previousSizeMap ,
24
+ buildFolder ,
25
+ maxBundleGzipSize ,
26
+ maxChunkGzipSize
27
+ ) {
22
28
var root = previousSizeMap . root ;
23
29
var sizes = previousSizeMap . sizes ;
24
30
var assets = webpackStats
@@ -41,21 +47,46 @@ function printFileSizesAfterBuild(webpackStats, previousSizeMap, buildFolder) {
41
47
null ,
42
48
assets . map ( a => stripAnsi ( a . sizeLabel ) . length )
43
49
) ;
50
+ var suggestBundleSplitting = false ;
44
51
assets . forEach ( asset => {
45
52
var sizeLabel = asset . sizeLabel ;
46
53
var sizeLength = stripAnsi ( sizeLabel ) . length ;
47
54
if ( sizeLength < longestSizeLabelLength ) {
48
55
var rightPadding = ' ' . repeat ( longestSizeLabelLength - sizeLength ) ;
49
56
sizeLabel += rightPadding ;
50
57
}
58
+ var isMainBundle = asset . name . indexOf ( 'main.' ) === 0 ;
59
+ var maxRecommendedSize = isMainBundle
60
+ ? maxBundleGzipSize
61
+ : maxChunkGzipSize ;
62
+ var isLarge = maxRecommendedSize && asset . size > maxRecommendedSize ;
63
+ if ( isLarge && path . extname ( asset . name ) === '.js' ) {
64
+ suggestBundleSplitting = true ;
65
+ }
51
66
console . log (
52
67
' ' +
53
- sizeLabel +
68
+ ( isLarge ? chalk . yellow ( sizeLabel ) : sizeLabel ) +
54
69
' ' +
55
70
chalk . dim ( asset . folder + path . sep ) +
56
71
chalk . cyan ( asset . name )
57
72
) ;
58
73
} ) ;
74
+ if ( suggestBundleSplitting ) {
75
+ console . log ( ) ;
76
+ console . log (
77
+ chalk . yellow ( 'The bundle size is significantly larger than recommended.' )
78
+ ) ;
79
+ console . log (
80
+ chalk . yellow (
81
+ 'Consider reducing it with code splitting: https://goo.gl/9VhYWB'
82
+ )
83
+ ) ;
84
+ console . log (
85
+ chalk . yellow (
86
+ 'You can also analyze the project dependencies: https://goo.gl/LeUzfb'
87
+ )
88
+ ) ;
89
+ }
59
90
}
60
91
61
92
function removeFileNameHash ( buildFolder , fileName ) {
0 commit comments