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
- Docs: rollupjs.org
- GitHub: rollup/rollup
- Plugins: github.com/rollup/plugins