1+ /**
2+ * Copyright (c) 2015-present, Facebook, Inc.
3+ * All rights reserved.
4+ *
5+ * This source code is licensed under the BSD-style license found in the
6+ * LICENSE file in the root directory of this source tree. An additional grant
7+ * of patent rights can be found in the PATENTS file in the same directory.
8+ */
9+
10+ 'use strict' ;
11+
112var fs = require ( 'fs' ) ;
213var path = require ( 'path' ) ;
314var chalk = require ( 'chalk' ) ;
415var filesize = require ( 'filesize' ) ;
16+ var recursive = require ( 'recursive-readdir' ) ;
517var stripAnsi = require ( 'strip-ansi' ) ;
618var gzipSize = require ( 'gzip-size' ) . sync ;
7- // Print a detailed summary of build files.
8- function printFileSizesAfterBuild ( appBuild , stats , previousSizeMap ) {
9- var assets = stats
19+
20+ // Prints a detailed summary of build files.
21+ function printFileSizesAfterBuild ( webpackStats , previousSizeMap ) {
22+ var root = previousSizeMap . root ;
23+ var sizes = previousSizeMap . sizes ;
24+ var assets = webpackStats
1025 . toJson ( )
1126 . assets . filter ( asset => / \. ( j s | c s s ) $ / . test ( asset . name ) )
1227 . map ( asset => {
13- var fileContents = fs . readFileSync ( appBuild + '/' + asset . name ) ;
28+ var fileContents = fs . readFileSync ( path . join ( root , asset . name ) ) ;
1429 var size = gzipSize ( fileContents ) ;
15- var previousSize = previousSizeMap [ removeFileNameHash ( appBuild , asset . name ) ] ;
30+ var previousSize = sizes [ removeFileNameHash ( root , asset . name ) ] ;
1631 var difference = getDifferenceLabel ( size , previousSize ) ;
1732 return {
1833 folder : path . join ( 'build' , path . dirname ( asset . name ) ) ,
@@ -41,13 +56,13 @@ function printFileSizesAfterBuild(appBuild, stats, previousSizeMap) {
4156 chalk . cyan ( asset . name )
4257 ) ;
4358 } ) ;
44- } ;
59+ }
4560
46- function removeFileNameHash ( appBuild , fileName ) {
61+ function removeFileNameHash ( buildFolder , fileName ) {
4762 return fileName
48- . replace ( appBuild , '' )
63+ . replace ( buildFolder , '' )
4964 . replace ( / \/ ? ( .* ) ( \. \w + ) ( \. j s | \. c s s ) / , ( match , p1 , p2 , p3 ) => p1 + p3 ) ;
50- } ;
65+ }
5166
5267// Input: 1024, 2048
5368// Output: "(+1 KB)"
@@ -64,22 +79,32 @@ function getDifferenceLabel(currentSize, previousSize) {
6479 } else {
6580 return '' ;
6681 }
67- } ;
82+ }
6883
69- function measureFileSizesBeforeBuild ( appBuild , fileNames ) {
70- return ( fileNames || [ ] )
71- . filter ( fileName => / \. ( j s | c s s ) $ / . test ( fileName ) )
72- . reduce ( ( memo , fileName ) => {
73- var contents = fs . readFileSync ( fileName ) ;
74- var key = removeFileNameHash ( appBuild , fileName ) ;
75- memo [ key ] = gzipSize ( contents ) ;
76- return memo ;
77- } , { } ) ;
84+ function measureFileSizesBeforeBuild ( buildFolder ) {
85+ return new Promise ( resolve => {
86+ recursive ( buildFolder , ( err , fileNames ) => {
87+ var sizes ;
88+ if ( ! err && fileNames ) {
89+ sizes = fileNames
90+ . filter ( fileName => / \. ( j s | c s s ) $ / . test ( fileName ) )
91+ . reduce ( ( memo , fileName ) => {
92+ var contents = fs . readFileSync ( fileName ) ;
93+ var key = removeFileNameHash ( buildFolder , fileName ) ;
94+ memo [ key ] = gzipSize ( contents ) ;
95+ return memo ;
96+ } , { } ) ;
97+ }
98+ resolve ( {
99+ root : buildFolder ,
100+ sizes : sizes || { } ,
101+ } ) ;
102+ } ) ;
103+ } ) ;
78104}
79105
80106module . exports = {
81107 measureFileSizesBeforeBuild : measureFileSizesBeforeBuild ,
82- printFileSizesAfterBuild : printFileSizesAfterBuild
83- }
84-
108+ printFileSizesAfterBuild : printFileSizesAfterBuild ,
109+ } ;
85110
0 commit comments