UNPKG

3.34 kBSource Map (JSON)View Raw
1{"version":3,"file":"sizePlugin.js","sourceRoot":"","sources":["../../sizePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,cAAc,CAAC;AAGvC,MAAM,OAAO,UAAU;IACrB,gBAAgB,CAAC,IAAY;QAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC;QAE5B,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;aAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;YACvB,OAAO,QAAQ,CAAC;SACjB;aAAM,IAAI,QAAQ,GAAG,GAAG,EAAE;YACzB,OAAO,MAAM,CAAC;SACf;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAqC;QACzD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,MAAM,cAAc,GAKf,EAAE,CAAC;QAER,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAA8B,CAAC;YAC5D,MAAM,IAAI,GAAI,KAAa,CAAC,IAAI,EAAE,CAAC;YAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE1C,cAAc,CAAC,IAAI,CAAC;gBAClB,QAAQ;gBACR,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACnD,KAAK;gBACL,IAAI;aACL,CAAC,CAAC;SACJ;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE;YACrC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;SAClE;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE;YACrC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,GAAG,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC9E;IACH,CAAC;IAED,KAAK,CAAC,QAA0B;QAC9B,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE,CACpE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAClC,CAAC;IACJ,CAAC;CACF","sourcesContent":["import chalk from \"chalk\";\r\nimport prettyBytes from \"pretty-bytes\";\r\nimport webpack from \"webpack\";\r\n\r\nexport class SizePlugin {\r\n getColorFromSize(size: number) {\r\n const megaByte = size / 1e6;\r\n\r\n if (megaByte > 2) {\r\n return \"red\";\r\n } else if (megaByte > 1) {\r\n return \"yellow\";\r\n } else if (megaByte > 0.5) {\r\n return \"cyan\";\r\n }\r\n return \"green\";\r\n }\r\n\r\n async printAssetsSize(data: webpack.compilation.Compilation) {\r\n const { assets } = data;\r\n\r\n const renderedChunks: Array<{\r\n filename: string;\r\n size: number;\r\n color: string;\r\n formattedSize: string;\r\n }> = [];\r\n\r\n for (const filename of Object.keys(assets)) {\r\n const asset = assets[filename] as webpack.compilation.Asset;\r\n const size = (asset as any).size();\r\n\r\n const color = this.getColorFromSize(size);\r\n\r\n renderedChunks.push({\r\n filename,\r\n formattedSize: chalk[color].bold(prettyBytes(size)),\r\n color,\r\n size\r\n });\r\n }\r\n\r\n let wrapColumn = 0;\r\n for (const rendered of renderedChunks) {\r\n wrapColumn = Math.max(wrapColumn, rendered.formattedSize.length);\r\n }\r\n\r\n console.log(` - ${chalk.gray(\"Asset sizes after build\")}`);\r\n for (const rendered of renderedChunks) {\r\n const padding = \" \".repeat(wrapColumn - rendered.formattedSize.length);\r\n console.log(` ${padding}${rendered.formattedSize} ${rendered.filename}`);\r\n }\r\n }\r\n\r\n apply(compiler: webpack.Compiler) {\r\n compiler.hooks.afterEmit.tapPromise(\"AssetsSizePlugin\", compilation =>\r\n this.printAssetsSize(compilation)\r\n );\r\n }\r\n}\r\n"]}
\No newline at end of file