How do you build and analyse a JavaScript library bundle?
Library builds differ from app builds: you usually bundle to ESM and CommonJS, externalise peer dependencies such as React or Vue so consumers do not get duplicates, generate type declarations, and avoid bundling polyfills. Rollup is the classic choice because its output is clean and tree-shakeable, and tools like tsup, unbuild and Vite's library mode wrap it with sensible defaults. Configure exports with conditions for import, require and types, set sideEffects: false when true, and keep entry points minimal so consumers only pull what they use.
{
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"sideEffects": false
}
For analysis, webpack-bundle-analyzer and rollup-plugin-visualizer show a treemap of module sizes. Common findings are a library imported wholesale, duplicated versions, all moment locales, or lodash pulling everything. Fix with per-function imports, aliasing to lighter alternatives, manualChunks for vendors, and checking duplicates with npm ls. Always measure gzipped or brotli sizes, not raw bytes.