Fix asset size comparison for multi build stats (#3514)

If create-react-app project is ejected and webpack configuration is
modified to multi build setup FileSizeReporter would fail.

In those situations `webpackStats` parameter would contain stats array
for each build. This fix will try to access stats and then falls back
to using plaing webpackStats object.
This commit is contained in:
Juhamatti Niemelä
2018-01-09 17:13:59 +02:00
committed by Dan Abramov
parent bef40eeb84
commit d61a3313f6

View File

@@ -25,21 +25,29 @@ function printFileSizesAfterBuild(
) { ) {
var root = previousSizeMap.root; var root = previousSizeMap.root;
var sizes = previousSizeMap.sizes; var sizes = previousSizeMap.sizes;
var assets = webpackStats var assets = (webpackStats.stats || [webpackStats])
.toJson() .map(stats =>
.assets.filter(asset => /\.(js|css)$/.test(asset.name)) stats
.map(asset => { .toJson()
var fileContents = fs.readFileSync(path.join(root, asset.name)); .assets.filter(asset => /\.(js|css)$/.test(asset.name))
var size = gzipSize(fileContents); .map(asset => {
var previousSize = sizes[removeFileNameHash(root, asset.name)]; var fileContents = fs.readFileSync(path.join(root, asset.name));
var difference = getDifferenceLabel(size, previousSize); var size = gzipSize(fileContents);
return { var previousSize = sizes[removeFileNameHash(root, asset.name)];
folder: path.join(path.basename(buildFolder), path.dirname(asset.name)), var difference = getDifferenceLabel(size, previousSize);
name: path.basename(asset.name), return {
size: size, folder: path.join(
sizeLabel: filesize(size) + (difference ? ' (' + difference + ')' : ''), path.basename(buildFolder),
}; path.dirname(asset.name)
}); ),
name: path.basename(asset.name),
size: size,
sizeLabel:
filesize(size) + (difference ? ' (' + difference + ')' : '')
};
})
)
.reduce((single, all) => all.concat(single), []);
assets.sort((a, b) => b.size - a.size); assets.sort((a, b) => b.size - a.size);
var longestSizeLabelLength = Math.max.apply( var longestSizeLabelLength = Math.max.apply(
null, null,