UNPKG

1.59 kBJavaScriptView Raw
1import chalk from "chalk";
2import prettyBytes from "pretty-bytes";
3export class SizePlugin {
4 getColorFromSize(size) {
5 const megaByte = size / 1e6;
6 if (megaByte > 2) {
7 return "red";
8 }
9 else if (megaByte > 1) {
10 return "yellow";
11 }
12 else if (megaByte > 0.5) {
13 return "cyan";
14 }
15 return "green";
16 }
17 async printAssetsSize(data) {
18 const { assets } = data;
19 const renderedChunks = [];
20 for (const filename of Object.keys(assets)) {
21 const asset = assets[filename];
22 const size = asset.size();
23 const color = this.getColorFromSize(size);
24 renderedChunks.push({
25 filename,
26 formattedSize: chalk[color].bold(prettyBytes(size)),
27 color,
28 size
29 });
30 }
31 let wrapColumn = 0;
32 for (const rendered of renderedChunks) {
33 wrapColumn = Math.max(wrapColumn, rendered.formattedSize.length);
34 }
35 console.log(` - ${chalk.gray("Asset sizes after build")}`);
36 for (const rendered of renderedChunks) {
37 const padding = " ".repeat(wrapColumn - rendered.formattedSize.length);
38 console.log(` ${padding}${rendered.formattedSize} ${rendered.filename}`);
39 }
40 }
41 apply(compiler) {
42 compiler.hooks.afterEmit.tapPromise("AssetsSizePlugin", compilation => this.printAssetsSize(compilation));
43 }
44}
45//# sourceMappingURL=sizePlugin.js.map
\No newline at end of file