From 712af0c4897978c538a863de0f19567f3c592ced Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Fri, 20 Aug 2021 15:51:02 +0200 Subject: [PATCH 1/2] Write webpack stats using a streaming JSON stringify, and omit chunks to save space --- lib/core-server/package.json | 1 + lib/core-server/src/utils/output-stats.ts | 15 +++++++++++---- lib/core-server/typings.d.ts | 1 + package.json | 1 + yarn.lock | 9 +++++++++ 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/core-server/package.json b/lib/core-server/package.json index e4eb460333af..9e035ac1f4d1 100644 --- a/lib/core-server/package.json +++ b/lib/core-server/package.json @@ -40,6 +40,7 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { + "@discoveryjs/json-ext": "^0.5.3", "@storybook/builder-webpack4": "6.4.0-alpha.30", "@storybook/core-client": "6.4.0-alpha.30", "@storybook/core-common": "6.4.0-alpha.30", diff --git a/lib/core-server/src/utils/output-stats.ts b/lib/core-server/src/utils/output-stats.ts index e2d049cde730..d701947f75ce 100644 --- a/lib/core-server/src/utils/output-stats.ts +++ b/lib/core-server/src/utils/output-stats.ts @@ -1,10 +1,10 @@ +import { stringifyStream } from '@discoveryjs/json-ext'; +import { logger } from '@storybook/node-logger'; import chalk from 'chalk'; +import fs from 'fs-extra'; import path from 'path'; -import { logger } from '@storybook/node-logger'; import { Stats } from 'webpack'; -import fs from 'fs-extra'; - export async function outputStats(directory: string, previewStats?: any, managerStats?: any) { if (previewStats) { const filePath = await writeStats(directory, 'preview', previewStats as Stats); @@ -18,6 +18,13 @@ export async function outputStats(directory: string, previewStats?: any, manager export const writeStats = async (directory: string, name: string, stats: Stats) => { const filePath = path.join(directory, `${name}-stats.json`); - await fs.outputFile(filePath, JSON.stringify(stats.toJson(), null, 2), 'utf8'); + const { chunks, ...data } = stats.toJson(); // omit chunks, which is about half of the total data + await new Promise((resolve, reject) => { + stringifyStream(data, null, 2) + .on('error', reject) + .pipe(fs.createWriteStream(filePath)) + .on('error', reject) + .on('finish', resolve); + }); return filePath; }; diff --git a/lib/core-server/typings.d.ts b/lib/core-server/typings.d.ts index 94f3fdaa2538..58a757a9613a 100644 --- a/lib/core-server/typings.d.ts +++ b/lib/core-server/typings.d.ts @@ -7,6 +7,7 @@ declare module '@storybook/theming/paths'; declare module '@storybook/ui/paths'; declare module 'better-opn'; declare module '@storybook/ui'; +declare module '@discoveryjs/json-ext'; declare module 'file-system-cache' { export interface Options { diff --git a/package.json b/package.json index 20a9a07a012b..bfb03df6eee0 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "@babel/preset-typescript": "^7.12.7", "@babel/runtime": "^7.12.5", "@compodoc/compodoc": "^1.1.14", + "@discoveryjs/json-ext": "^0.5.3", "@emotion/snapshot-serializer": "^0.8.2", "@nicolo-ribaudo/chokidar-2": "^2.1.8", "@nrwl/cli": "12.3.4", diff --git a/yarn.lock b/yarn.lock index aba0ee323bca..67cd46e2fcaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4092,6 +4092,13 @@ __metadata: languageName: node linkType: hard +"@discoveryjs/json-ext@npm:^0.5.3": + version: 0.5.3 + resolution: "@discoveryjs/json-ext@npm:0.5.3" + checksum: 73789df18a61dfd91d839b95c403af9ba32b897c5b419d9a724de588099ce6cefc379ada7617a77dad967b6a026927faa65f55154205cfe88da8c0fca3da2986 + languageName: node + linkType: hard + "@ember-data/rfc395-data@npm:^0.0.4": version: 0.0.4 resolution: "@ember-data/rfc395-data@npm:0.0.4" @@ -7990,6 +7997,7 @@ __metadata: version: 0.0.0-use.local resolution: "@storybook/core-server@workspace:lib/core-server" dependencies: + "@discoveryjs/json-ext": ^0.5.3 "@storybook/builder-webpack4": 6.4.0-alpha.30 "@storybook/builder-webpack5": 6.4.0-alpha.30 "@storybook/core-client": 6.4.0-alpha.30 @@ -8556,6 +8564,7 @@ __metadata: "@babel/runtime": ^7.12.5 "@compodoc/compodoc": ^1.1.14 "@cypress/webpack-preprocessor": ^5.7.0 + "@discoveryjs/json-ext": ^0.5.3 "@emotion/snapshot-serializer": ^0.8.2 "@nicolo-ribaudo/chokidar-2": ^2.1.8 "@nrwl/cli": 12.3.4 From 174692c45fc6fbf5135152bc814aab396991c85f Mon Sep 17 00:00:00 2001 From: Gert Hengeveld Date: Wed, 25 Aug 2021 15:32:01 +0200 Subject: [PATCH 2/2] No need for json-ext devDep in root --- package.json | 1 - yarn.lock | 1 - 2 files changed, 2 deletions(-) diff --git a/package.json b/package.json index bfb03df6eee0..20a9a07a012b 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,6 @@ "@babel/preset-typescript": "^7.12.7", "@babel/runtime": "^7.12.5", "@compodoc/compodoc": "^1.1.14", - "@discoveryjs/json-ext": "^0.5.3", "@emotion/snapshot-serializer": "^0.8.2", "@nicolo-ribaudo/chokidar-2": "^2.1.8", "@nrwl/cli": "12.3.4", diff --git a/yarn.lock b/yarn.lock index 67cd46e2fcaa..ed3c90977b01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8564,7 +8564,6 @@ __metadata: "@babel/runtime": ^7.12.5 "@compodoc/compodoc": ^1.1.14 "@cypress/webpack-preprocessor": ^5.7.0 - "@discoveryjs/json-ext": ^0.5.3 "@emotion/snapshot-serializer": ^0.8.2 "@nicolo-ribaudo/chokidar-2": ^2.1.8 "@nrwl/cli": 12.3.4