Bundle Size Reporter is a command line tool to measure and keep track of your website initial load files size.
It reads local build file sizes by patterns defined in config file, prints them as a simple text report into console, and creates a local text file.
HTML files:
- index.html: 107KB / 22KB
JS files:
- app-[hash].js: 239KB / 78KB
- framework-[hash].js: 26KB / 10KB
- component---src-page-templates-post-list-post-list-tsx-[hash].js: 17KB / 5KB
- commons-[hash].js: 17KB / 6KB
- webpack-runtime-[hash].js: 14KB / 4KB
Group total: 313KB / 103KB
JSON files:
- page-data.json: 29KB / 12KB
- 2737273111.json: 6KB / 2KB
- app-data.json: 0KB / 0KB
Group total: 35KB / 14KB
TOTAL: 455KB / 139KB
It can also compare changes between two builds. Comparison helps to track bundle size changes during the development process.
npm install -D @bundle-size-reporter/cli
Create bsr.config.json
file in the package/root folder. Here is a sample configuration:
{
"analyze": {
"input": {
"path": "dist"
},
"groups": [
{
"key": "html",
"globs": ["index.html"],
"label": "HTML"
},
{
"key": "js",
"globs": ["assets/index-*.js"],
"label": "JS"
},
{
"key": "css",
"globs": ["assets/index-*.css"],
"label": "CSS"
}
],
"output": {
"path": "bundle-size-stats.json"
},
"normalizeFilename": "^.+?\\W+([\\d\\w]{8,32})\\.[\\d\\w]{2,5}$",
"filenameHashLabel": "[hash]"
},
"print": {
"output": {
"path": "bundle-size-report.txt"
}
}
}
type: string required
Path to the folder with an application build to read and analyze files from. All file groups will be resolved relatively to this folder.
type: Object[] required
Defines a list of file groups we want to include into the report. You can use a single group for all files or add as many groups as you wish - i.e. group them by file type as html, js and css.
type: string required
Unique identifier for the group.
type: string required
Glob pattern defining a list of files for the group.
type: string
Text label for the group of files to be used in the report.
Group key
will be used when not set.
type: string
default value: 'bundle-size-stats.json'
Json report filename. Not to be confused with a text report file.
type: string
default value: empty string
String to be used to replace content based hashes in file names.
So that main-absch24.js
becomes main-[hash].js
in report files, and we can compare
essentially same files between two different builds.
type: RegExp
Regular expression which is used to find content-based hashes in filenames.
Must have a
capturing group
with a string to be replaced with a filenameHashLabel
.
Only first capturing group will be used.
type: string
Filename for the text format report file.
Simple text, almost the same as npx run print
command output.
npx bsr analyze
- read files by groups defined in config file and save stats into a json filenpx bsr print
- print a bundle size report into a terminal out of stats file created by theanalyze
command above. Text report file is created only ifoutput=report.txt
argument is supplied or whenprint.output.path
is set in the config file.npx bsr autorun
- sequentially run both commands above. To save text report into a file provide areport
argument to the command or haveprint.output.path
is set in the config file.
To see full list of arguments for any CLI command, run it with a --help
argument,
i.e.: npx bsr print --help
.
Json formatted stats file contains a list of files which matched group globs from
config file, and is used as intermediary between analyze
and print
commands.
It also allows to compare changes between two different builds of the same website with a following command:
npx bsr print bundle-size-stats.json --compare-with bundle-size-stats-previous.json
.
Stats file contains file sizes for a particular build and does not keep comparison data.