A

Rollup - The Library Bundler

rollup bundler esm libraries

Rollup

Rollup is a module bundler optimized for libraries and ES modules. It pioneered tree-shaking and produces clean, efficient bundles perfect for npm packages.

Key Features

  • Tree Shaking: Industry-leading dead code elimination
  • ES Modules: Native ESM output
  • Clean Output: Readable, minimal bundles
  • Plugin System: Extensive plugin ecosystem
  • Multiple Formats: ESM, CommonJS, UMD, IIFE

Installation

pnpm add -D rollup

Basic Configuration

// rollup.config.js
export default {
  input: 'src/index.js',
  output: [
    {
      file: 'dist/bundle.esm.js',
      format: 'esm',
    },
    {
      file: 'dist/bundle.cjs.js',
      format: 'cjs',
    },
  ],
};

TypeScript Support

pnpm add -D @rollup/plugin-typescript
import typescript from '@rollup/plugin-typescript';

export default {
  input: 'src/index.ts',
  output: {
    file: 'dist/bundle.js',
    format: 'esm',
  },
  plugins: [typescript()],
};

Common Plugins

Node Resolve

pnpm add -D @rollup/plugin-node-resolve
import resolve from '@rollup/plugin-node-resolve';

export default {
  plugins: [resolve()],
};

CommonJS

pnpm add -D @rollup/plugin-commonjs
import commonjs from '@rollup/plugin-commonjs';

export default {
  plugins: [commonjs()],
};

Terser (Minification)

pnpm add -D @rollup/plugin-terser
import terser from '@rollup/plugin-terser';

export default {
  plugins: [terser()],
};

Library Configuration

export default {
  input: 'src/index.ts',
  output: [
    {
      file: 'dist/index.esm.js',
      format: 'esm',
    },
    {
      file: 'dist/index.cjs.js',
      format: 'cjs',
    },
    {
      file: 'dist/index.umd.js',
      format: 'umd',
      name: 'MyLibrary',
    },
  ],
  external: ['react', 'react-dom'], // Don't bundle dependencies
  plugins: [
    resolve(),
    commonjs(),
    typescript(),
    terser(),
  ],
};

Watch Mode

# Watch for changes
rollup -c --watch
// rollup.config.js
export default {
  watch: {
    include: 'src/**',
    exclude: 'node_modules/**',
  },
};

Tree Shaking

Rollup automatically removes unused code:

// utils.js
export function used() {
  return 'I am used';
}

export function unused() {
  return 'I am not used';
}

// index.js
import { used } from './utils';
console.log(used());

// Output: only `used()` is included

Resources

Last updated: October 16, 2025