Bundling and Minification

Vite 8 25,978 builds with Rolldown 181,166 , a Rust port of Rollup 141,981 that bundles and minifies in one pass, so there is nothing to configure: npm 2,036 run build already tree-shakes, minifies and hashes filenames. To see what that pass is worth, rebuild with npx vite build --minify false. Both builds transformed the same 668 modules; the brotli column comes from Node's zlib.brotliCompressSync over the emitted files, which is what a CDN sends.

Bytes emitted for one entry chunk, with and without minification (Vite 8.3.0)
Build Raw gzip brotli
vite build 603,289 180,604 151,886
vite build --minify false 1,543,569 329,054 259,318
Reduction 61% 45% 41%

Minification wins 61% of the raw bytes but only 41% of the transferred bytes, because gzip and brotli already compress repeated identifiers. The raw figure still matters: it is what the engine parses and compiles after decompression. Compress at the edge, not in the build — every serious CDN negotiates brotli.

rollup-plugin-visualizer 2,424 (https://github.com/btd/rollup-plugin-visualizer 2,424 ) (MIT) turns the build metadata into a treemap of which module contributed which bytes. npm i -D rollup-plugin-visualizer, add visualizer({ filename: 'stats.html' }) to plugins, and open the report it writes into the project root; it works unchanged on Rolldown. Here the chart route owns 336 kB of the 603 kB bundle — the number that motivates the rest of this section.