@@ -24,7 +24,22 @@ var paths = require('../config/paths');
24
24
rimrafSync ( paths . appBuild + '/*' ) ;
25
25
26
26
console . log ( 'Creating an optimized production build...' ) ;
27
- webpack ( config ) . run ( function ( err , stats ) {
27
+
28
+ var oldAssets ;
29
+ var compiler = webpack ( config , function ( err , stats ) {
30
+ oldAssets = stats . toJson ( ) . assets
31
+ . filter ( asset => / \. ( j s | c s s ) $ / . test ( asset . name ) )
32
+ . map ( asset => {
33
+ var fileContents = fs . readFileSync ( paths . appBuild + '/' + asset . name ) ;
34
+ var size = gzipSize ( fileContents ) ;
35
+ return {
36
+ name : path . basename ( asset . name ) ,
37
+ size : size
38
+ } ;
39
+ } ) ;
40
+ } ) ;
41
+
42
+ compiler . run ( function ( err , stats ) {
28
43
if ( err ) {
29
44
console . error ( 'Failed to create a production build. Reason:' ) ;
30
45
console . error ( err . message || err ) ;
@@ -41,11 +56,27 @@ webpack(config).run(function(err, stats) {
41
56
. map ( asset => {
42
57
var fileContents = fs . readFileSync ( paths . appBuild + '/' + asset . name ) ;
43
58
var size = gzipSize ( fileContents ) ;
59
+ var sizeDiffLabel = '' ;
60
+
61
+ for ( var i = oldAssets . length - 1 ; i >= 0 ; -- i ) {
62
+ var oldAsset = oldAssets [ i ] ;
63
+ if ( oldAsset . name === asset . name ) {
64
+ var sizeDiff = asset . size - oldAsset . size ;
65
+ if ( sizeDiff !== 0 ) {
66
+ sizeDiffLabel = ' (' +
67
+ ( sizeDiff < 0 ? '-' : '+' ) +
68
+ filesize ( Math . abs ( sizeDiff ) ) +
69
+ ')' ;
70
+ }
71
+ break ;
72
+ }
73
+ }
74
+
44
75
return {
45
76
folder : path . join ( 'build' , path . dirname ( asset . name ) ) ,
46
77
name : path . basename ( asset . name ) ,
47
78
size : size ,
48
- sizeLabel : filesize ( size )
79
+ sizeLabel : filesize ( size ) + sizeDiffLabel
49
80
} ;
50
81
} ) ;
51
82
assets . sort ( ( a , b ) => b . size - a . size ) ;
0 commit comments