From f406c22e997b2c4f01c3d8885ba4c20f3c08eb74 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Nov 2020 14:13:12 -0800 Subject: [PATCH] bundle the package in order to get the size for an entry point --- scripts/size_report/report_binary_size.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/scripts/size_report/report_binary_size.ts b/scripts/size_report/report_binary_size.ts index 4ace46a7ed4..4577cbcc60a 100644 --- a/scripts/size_report/report_binary_size.ts +++ b/scripts/size_report/report_binary_size.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { resolve } from 'path'; +import { resolve as pathResolve } from 'path'; import * as fs from 'fs'; import { execSync } from 'child_process'; import * as terser from 'terser'; @@ -25,6 +25,8 @@ import { RequestBody, RequestEndpoint } from './size_report_helper'; +import * as rollup from 'rollup'; +import commonjs from '@rollup/plugin-commonjs'; interface Report { sdk: string; @@ -38,7 +40,7 @@ interface BinarySizeRequestBody extends RequestBody { // CDN scripts function generateReportForCDNScripts(): Report[] { const reports = []; - const firebaseRoot = resolve(__dirname, '../../packages/firebase'); + const firebaseRoot = pathResolve(__dirname, '../../packages/firebase'); const pkgJson = require(`${firebaseRoot}/package.json`); const special_files = [ @@ -103,8 +105,16 @@ async function generateReportForNPMPackages(): Promise { for (const field of fields) { if (packageJson[field]) { - const filePath = `${path}/${packageJson[field]}`; - const rawCode = fs.readFileSync(filePath, 'utf-8'); + const filePath = pathResolve(path, packageJson[field]); + // Need to create a bundle and get the size of the bundle instead of reading the size of the file directly. + // It is because some packages might be split into multiple files in order to share code between entry points. + const bundle = await rollup.rollup({ + input: filePath, + plugins: [commonjs()] + }); + + const { output } = await bundle.generate({ format: 'es' }); + const rawCode = output[0].code; // remove comments and whitespaces, then get size const { code } = await terser.minify(rawCode, { @@ -122,7 +132,6 @@ async function generateReportForNPMPackages(): Promise { resolve(); }); - taskPromises.push(promise); } }