Skip to content

Commit 9bf4e92

Browse files
authored
fix: stringify stats using streaming approach (#2190)
1 parent 0e37183 commit 9bf4e92

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

packages/webpack-cli/lib/webpack-cli.js

+16-13
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ const path = require('path');
22
const packageExists = require('./utils/package-exists');
33
const webpack = packageExists('webpack') ? require('webpack') : undefined;
44
const webpackMerge = require('webpack-merge');
5-
const { writeFileSync, existsSync } = require('fs');
5+
const { createWriteStream, existsSync } = require('fs');
66
const { options: coloretteOptions, yellow } = require('colorette');
7+
const { stringifyStream: createJsonStringifyStream } = require('@discoveryjs/json-ext');
78

89
const logger = require('./utils/logger');
910
const { cli, flags } = require('./utils/cli-flags');
@@ -485,21 +486,23 @@ class WebpackCLI {
485486
const foundStats = compiler.compilers
486487
? { children: compiler.compilers.map(getStatsOptionsFromCompiler) }
487488
: getStatsOptionsFromCompiler(compiler);
489+
const handleWriteError = (error) => {
490+
logger.error(error);
491+
process.exit(2);
492+
};
488493

489494
if (args.json === true) {
490-
process.stdout.write(JSON.stringify(stats.toJson(foundStats)) + '\n');
495+
createJsonStringifyStream(stats.toJson(foundStats))
496+
.on('error', handleWriteError)
497+
.pipe(process.stdout)
498+
.on('error', handleWriteError)
499+
.on('close', () => process.stdout.write('\n'));
491500
} else if (typeof args.json === 'string') {
492-
const JSONStats = JSON.stringify(stats.toJson(foundStats));
493-
494-
try {
495-
writeFileSync(args.json, JSONStats);
496-
497-
logger.success(`stats are successfully stored as json to ${args.json}`);
498-
} catch (error) {
499-
logger.error(error);
500-
501-
process.exit(2);
502-
}
501+
createJsonStringifyStream(stats.toJson(foundStats))
502+
.on('error', handleWriteError)
503+
.pipe(createWriteStream(args.json))
504+
.on('error', handleWriteError)
505+
.on('close', () => logger.success(`stats are successfully stored as json to ${args.json}`));
503506
} else {
504507
const printedStats = stats.toString(foundStats);
505508

packages/webpack-cli/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"lib"
2828
],
2929
"dependencies": {
30+
"@discoveryjs/json-ext": "^0.5.0",
3031
"@webpack-cli/info": "^1.1.0",
3132
"@webpack-cli/serve": "^1.1.0",
3233
"colorette": "^1.2.1",

0 commit comments

Comments
 (0)