Prints bundle sizes in build script log (#9900)
* Prints bundle size with flags * Add "gzipped" to cspell.json * Print esm bundle size * Remove gzipped size from log
This commit is contained in:
1 parent
67613d23b2
commit
cb6a977733
3 files changed
+38
-6
No files matched your search
@@ -120,6 +120,7 @@
|
|||||||
"npm-run-all": "4.1.5",
|
"npm-run-all": "4.1.5",
|
||||||
"path-browserify": "1.0.1",
|
"path-browserify": "1.0.1",
|
||||||
"prettier": "2.2.1",
|
"prettier": "2.2.1",
|
||||||
|
"pretty-bytes": "5.4.1",
|
||||||
"rimraf": "3.0.2",
|
"rimraf": "3.0.2",
|
||||||
"rollup": "2.35.1",
|
"rollup": "2.35.1",
|
||||||
"rollup-plugin-node-globals": "1.4.0",
|
"rollup-plugin-node-globals": "1.4.0",
|
||||||
|
|||||||
+32
-6
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
|
const readline = require("readline");
|
||||||
const chalk = require("chalk");
|
const chalk = require("chalk");
|
||||||
const execa = require("execa");
|
const execa = require("execa");
|
||||||
const minimist = require("minimist");
|
const minimist = require("minimist");
|
||||||
@@ -40,17 +41,18 @@ for (const { color, text } of statusConfig) {
|
|||||||
status[text] = chalk[color].black(padStatusText(text));
|
status[text] = chalk[color].black(padStatusText(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
function fitTerminal(input) {
|
function fitTerminal(input, suffix = "") {
|
||||||
const columns = Math.min(process.stdout.columns || 40, 80);
|
const columns = Math.min(process.stdout.columns || 40, 80);
|
||||||
const WIDTH = columns - maxLength + 1;
|
const WIDTH = columns - maxLength + 1;
|
||||||
if (input.length < WIDTH) {
|
if (input.length < WIDTH) {
|
||||||
input += chalk.dim(".").repeat(WIDTH - input.length - 1);
|
const repeatCount = WIDTH - input.length - 1 - suffix.length;
|
||||||
|
input += chalk.dim(".").repeat(repeatCount) + suffix;
|
||||||
}
|
}
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createBundle(bundleConfig, cache, options) {
|
async function createBundle(bundleConfig, cache, options) {
|
||||||
const { output, target } = bundleConfig;
|
const { output, target, format, type } = bundleConfig;
|
||||||
process.stdout.write(fitTerminal(output));
|
process.stdout.write(fitTerminal(output));
|
||||||
try {
|
try {
|
||||||
const { cached, skipped } = await bundler(bundleConfig, cache, options);
|
const { cached, skipped } = await bundler(bundleConfig, cache, options);
|
||||||
@@ -65,17 +67,41 @@ async function createBundle(bundleConfig, cache, options) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const file = path.join("dist", output);
|
||||||
|
const content = fs.readFileSync(file, "utf8");
|
||||||
|
|
||||||
// Files including U+FFEE can't load in Chrome Extension
|
// Files including U+FFEE can't load in Chrome Extension
|
||||||
// `prettier-chrome-extension` https://github.com/prettier/prettier-chrome-extension
|
// `prettier-chrome-extension` https://github.com/prettier/prettier-chrome-extension
|
||||||
// details https://github.com/prettier/prettier/pull/8534
|
// details https://github.com/prettier/prettier/pull/8534
|
||||||
if (target === "universal") {
|
if (target === "universal") {
|
||||||
const file = path.join("dist", output);
|
|
||||||
const content = fs.readFileSync(file, "utf8");
|
|
||||||
if (content.includes("\ufffe")) {
|
if (content.includes("\ufffe")) {
|
||||||
throw new Error("Bundled umd file should not have U+FFFE character.");
|
throw new Error("Bundled umd file should not have U+FFFE character.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options["print-size"]) {
|
||||||
|
// Clear previous line
|
||||||
|
readline.clearLine(process.stdout, 0);
|
||||||
|
readline.cursorTo(process.stdout, 0, null);
|
||||||
|
|
||||||
|
const prettyBytes = require("pretty-bytes");
|
||||||
|
const getSizeText = (file) => prettyBytes(fs.statSync(file).size);
|
||||||
|
const sizeTexts = [getSizeText(file, content)];
|
||||||
|
if (
|
||||||
|
type !== "core" &&
|
||||||
|
format !== "esm" &&
|
||||||
|
bundleConfig.bundler !== "webpack" &&
|
||||||
|
target === "universal"
|
||||||
|
) {
|
||||||
|
const esmFile = path.join("dist/esm", output.replace(".js", ".mjs"));
|
||||||
|
const esmContent = fs.readFileSync(esmFile, "utf8");
|
||||||
|
sizeTexts.push(`esm ${getSizeText(esmFile, esmContent)}`);
|
||||||
|
}
|
||||||
|
process.stdout.write(
|
||||||
|
fitTerminal(output, sizeTexts.join(", ").concat(" "))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
console.log(status.DONE);
|
console.log(status.DONE);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(status.FAIL + "\n");
|
console.log(status.FAIL + "\n");
|
||||||
@@ -153,6 +179,6 @@ async function run(params) {
|
|||||||
|
|
||||||
run(
|
run(
|
||||||
minimist(process.argv.slice(2), {
|
minimist(process.argv.slice(2), {
|
||||||
boolean: ["purge-cache", "playground"],
|
boolean: ["purge-cache", "playground", "print-size"],
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@@ -5912,6 +5912,11 @@ prettier@2.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
|
||||||
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
|
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
|
||||||
|
|
||||||
|
pretty-bytes@5.4.1:
|
||||||
|
version "5.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b"
|
||||||
|
integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==
|
||||||
|
|
||||||
pretty-format@^26.1.0:
|
pretty-format@^26.1.0:
|
||||||
version "26.1.0"
|
version "26.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.1.0.tgz#272b9cd1f1a924ab5d443dc224899d7a65cb96ec"
|
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.1.0.tgz#272b9cd1f1a924ab5d443dc224899d7a65cb96ec"
|
||||||
|
|||||||
Reference in new issue
Block a user