diff --git a/.gitignore b/.gitignore index 5185cb1..2e0dbed 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ build dist package-lock.json yarn.lock +.vscode \ No newline at end of file diff --git a/package.json b/package.json index 157630f..aed683a 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "asyncro": "^3.0.0", "autoprefixer": "^9.0.0", "babel-polyfill": "^6.26.0", + "brotli-size": "^0.0.2", "camelcase": "^5.0.0", "chalk": "^2.4.0", "cssnano": "^4.0.0", diff --git a/src/index.js b/src/index.js index 944d790..503d036 100644 --- a/src/index.js +++ b/src/index.js @@ -15,6 +15,7 @@ import uglify from 'rollup-plugin-uglify'; import postcss from 'rollup-plugin-postcss'; import alias from 'rollup-plugin-strict-alias'; import gzipSize from 'gzip-size'; +import brotliSize from 'brotli-size'; import prettyBytes from 'pretty-bytes'; import shebangPlugin from 'rollup-plugin-preserve-shebang'; import typescript from 'rollup-plugin-typescript2'; @@ -133,13 +134,19 @@ export default async function microbundle(options) { } } + function formatSize(size, filename, type) { + const pretty = prettyBytes(size); + const color = size < 5000 ? 'green' : size > 40000 ? 'red' : 'yellow'; + const MAGIC_INDENTATION = type === 'br' ? 13 : 10; + return `${' '.repeat(MAGIC_INDENTATION - pretty.length)}${chalk[color]( + pretty, + )}: ${chalk.white(basename(filename))}.${type}`; + } + async function getSizeInfo(code, filename) { - let size = await gzipSize(code); - let prettySize = prettyBytes(size); - let color = size < 5000 ? 'green' : size > 40000 ? 'red' : 'yellow'; - return `${' '.repeat(10 - prettySize.length)}${chalk[color]( - prettySize, - )}: ${chalk.white(basename(filename))}`; + const gzip = formatSize(await gzipSize(code), filename, 'gz'); + const brotli = formatSize(brotliSize.sync(code), filename, 'br'); + return gzip + '\n' + brotli; } if (options.watch) { diff --git a/test/__snapshots__/index.test.js.snap b/test/__snapshots__/index.test.js.snap index e1c6140..d77b6b0 100644 --- a/test/__snapshots__/index.test.js.snap +++ b/test/__snapshots__/index.test.js.snap @@ -20,9 +20,12 @@ basic Build \\"basicLib\\" to dist: -211 B: basic-lib.js -211 B: basic-lib.mjs -292 B: basic-lib.umd.js" +211 B: basic-lib.js.gz +154 B: basic-lib.js.br +211 B: basic-lib.mjs.gz +155 B: basic-lib.mjs.br +292 B: basic-lib.umd.js.gz +228 B: basic-lib.umd.js.br" `; exports[`fixtures basic-css 1`] = ` @@ -46,9 +49,12 @@ basic-css Build \\"basicCss\\" to dist: -107 B: basic-css.js -107 B: basic-css.mjs -188 B: basic-css.umd.js" +107 B: basic-css.js.gz +60 B: basic-css.js.br +107 B: basic-css.mjs.gz +61 B: basic-css.mjs.br +188 B: basic-css.umd.js.gz +135 B: basic-css.umd.js.br" `; exports[`fixtures basic-ts 1`] = ` @@ -74,9 +80,12 @@ basic-ts Build \\"basicLibTs\\" to dist: -104 B: basic-lib-ts.js -97 B: basic-lib-ts.mjs -180 B: basic-lib-ts.umd.js" +104 B: basic-lib-ts.js.gz +76 B: basic-lib-ts.js.br +97 B: basic-lib-ts.mjs.gz +73 B: basic-lib-ts.mjs.br +180 B: basic-lib-ts.umd.js.gz +137 B: basic-lib-ts.umd.js.br" `; exports[`fixtures basic-tsx 1`] = ` @@ -100,9 +109,12 @@ basic-tsx Build \\"basicLibTsx\\" to dist: -221 B: basic-lib-tsx.js -221 B: basic-lib-tsx.mjs -295 B: basic-lib-tsx.umd.js" +221 B: basic-lib-tsx.js.gz +179 B: basic-lib-tsx.js.br +221 B: basic-lib-tsx.mjs.gz +193 B: basic-lib-tsx.mjs.br +295 B: basic-lib-tsx.umd.js.gz +236 B: basic-lib-tsx.umd.js.br" `; exports[`fixtures basic-with-cwd 1`] = ` @@ -127,9 +139,12 @@ basic-with-cwd Build \\"basic\\" to dist: -211 B: basic.js -211 B: basic.mjs -287 B: basic.umd.js" +211 B: basic.js.gz +154 B: basic.js.br +211 B: basic.mjs.gz +155 B: basic.mjs.br +287 B: basic.umd.js.gz +224 B: basic.umd.js.br" `; exports[`fixtures custom-source 1`] = ` @@ -152,9 +167,12 @@ custom-source Build \\"customSource\\" to dist: -211 B: custom-source.js -211 B: custom-source.mjs -293 B: custom-source.umd.js" +211 B: custom-source.js.gz +154 B: custom-source.js.br +211 B: custom-source.mjs.gz +155 B: custom-source.mjs.br +293 B: custom-source.umd.js.gz +226 B: custom-source.umd.js.br" `; exports[`fixtures custom-source-with-cwd 1`] = ` @@ -179,9 +197,12 @@ custom-source-with-cwd Build \\"customSrc\\" to dist: -211 B: custom-src.js -211 B: custom-src.mjs -291 B: custom-src.umd.js" +211 B: custom-src.js.gz +154 B: custom-src.js.br +211 B: custom-src.mjs.gz +155 B: custom-src.mjs.br +291 B: custom-src.umd.js.gz +228 B: custom-src.umd.js.br" `; exports[`fixtures jsx 1`] = ` @@ -202,9 +223,12 @@ jsx Build \\"jsx\\" to dist: -211 B: jsx.js -212 B: jsx.mjs -283 B: jsx.umd.js" +211 B: jsx.js.gz +168 B: jsx.js.br +212 B: jsx.mjs.gz +170 B: jsx.mjs.br +283 B: jsx.umd.js.gz +230 B: jsx.umd.js.br" `; exports[`fixtures name-custom-amd 1`] = ` @@ -227,9 +251,12 @@ name-custom-amd Build \\"customNameAmd\\" to dist: -211 B: name-custom-amd.js -211 B: name-custom-amd.mjs -295 B: name-custom-amd.umd.js" +211 B: name-custom-amd.js.gz +154 B: name-custom-amd.js.br +211 B: name-custom-amd.mjs.gz +155 B: name-custom-amd.mjs.br +295 B: name-custom-amd.umd.js.gz +230 B: name-custom-amd.umd.js.br" `; exports[`fixtures name-custom-cli 1`] = ` @@ -252,9 +279,12 @@ name-custom-cli Build \\"nameCustomCli\\" to dist: -211 B: name-custom.js -211 B: name-custom.mjs -294 B: name-custom.umd.js" +211 B: name-custom.js.gz +154 B: name-custom.js.br +211 B: name-custom.mjs.gz +155 B: name-custom.mjs.br +294 B: name-custom.umd.js.gz +231 B: name-custom.umd.js.br" `; exports[`fixtures no-pkg 1`] = ` @@ -276,9 +306,12 @@ no-pkg Build \\"noPkg\\" to dist: -211 B: no-pkg.js -211 B: no-pkg.mjs -288 B: no-pkg.umd.js" +211 B: no-pkg.js.gz +154 B: no-pkg.js.br +211 B: no-pkg.mjs.gz +155 B: no-pkg.mjs.br +288 B: no-pkg.umd.js.gz +228 B: no-pkg.umd.js.br" `; exports[`fixtures no-pkg-name 1`] = ` @@ -301,7 +334,10 @@ no-pkg-name Build \\"noPkgName\\" to dist: -211 B: no-pkg-name.js -211 B: no-pkg-name.mjs -292 B: no-pkg-name.umd.js" +211 B: no-pkg-name.js.gz +154 B: no-pkg-name.js.br +211 B: no-pkg-name.mjs.gz +155 B: no-pkg-name.mjs.br +292 B: no-pkg-name.umd.js.gz +230 B: no-pkg-name.umd.js.br" `;