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
+
1
12
var fs = require ( 'fs' ) ;
2
13
var path = require ( 'path' ) ;
3
14
var chalk = require ( 'chalk' ) ;
4
15
var filesize = require ( 'filesize' ) ;
16
+ var recursive = require ( 'recursive-readdir' ) ;
5
17
var stripAnsi = require ( 'strip-ansi' ) ;
6
18
var 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
10
25
. toJson ( )
11
26
. assets . filter ( asset => / \. ( j s | c s s ) $ / . test ( asset . name ) )
12
27
. map ( asset => {
13
- var fileContents = fs . readFileSync ( appBuild + '/' + asset . name ) ;
28
+ var fileContents = fs . readFileSync ( path . join ( root , asset . name ) ) ;
14
29
var size = gzipSize ( fileContents ) ;
15
- var previousSize = previousSizeMap [ removeFileNameHash ( appBuild , asset . name ) ] ;
30
+ var previousSize = sizes [ removeFileNameHash ( root , asset . name ) ] ;
16
31
var difference = getDifferenceLabel ( size , previousSize ) ;
17
32
return {
18
33
folder : path . join ( 'build' , path . dirname ( asset . name ) ) ,
@@ -41,13 +56,13 @@ function printFileSizesAfterBuild(appBuild, stats, previousSizeMap) {
41
56
chalk . cyan ( asset . name )
42
57
) ;
43
58
} ) ;
44
- } ;
59
+ }
45
60
46
- function removeFileNameHash ( appBuild , fileName ) {
61
+ function removeFileNameHash ( buildFolder , fileName ) {
47
62
return fileName
48
- . replace ( appBuild , '' )
63
+ . replace ( buildFolder , '' )
49
64
. replace ( / \/ ? ( .* ) ( \. \w + ) ( \. j s | \. c s s ) / , ( match , p1 , p2 , p3 ) => p1 + p3 ) ;
50
- } ;
65
+ }
51
66
52
67
// Input: 1024, 2048
53
68
// Output: "(+1 KB)"
@@ -64,22 +79,32 @@ function getDifferenceLabel(currentSize, previousSize) {
64
79
} else {
65
80
return '' ;
66
81
}
67
- } ;
82
+ }
68
83
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
+ } ) ;
78
104
}
79
105
80
106
module . exports = {
81
107
measureFileSizesBeforeBuild : measureFileSizesBeforeBuild ,
82
- printFileSizesAfterBuild : printFileSizesAfterBuild
83
- }
84
-
108
+ printFileSizesAfterBuild : printFileSizesAfterBuild ,
109
+ } ;
85
110
0 commit comments