Generate minified bundle
npx @tessl/cli install tessl/npm-rollup--plugin-terser@0.4.0@rollup/plugin-terser is a Rollup plugin that provides JavaScript code minification using the Terser minifier. It integrates seamlessly with Rollup's build pipeline to generate optimized, minified bundles with optional multi-threading support for improved build performance.
npm install @rollup/plugin-terser --save-devimport terser from '@rollup/plugin-terser';For CommonJS:
const terser = require('@rollup/plugin-terser');import terser from '@rollup/plugin-terser';
export default {
input: 'src/index.js',
output: {
dir: 'output',
format: 'cjs'
},
plugins: [terser()]
};With configuration options:
import terser from '@rollup/plugin-terser';
export default {
input: 'src/index.js',
output: {
dir: 'output',
format: 'cjs'
},
plugins: [
terser({
compress: {
drop_console: true
},
mangle: {
reserved: ['MyClass']
},
maxWorkers: 4,
nameCache: {}
})
]
};The plugin is built around several key components:
Creates a Rollup plugin instance configured for JavaScript minification.
// External type imports (from rollup and terser packages)
import type { Plugin, RenderedChunk, NormalizedOutputOptions } from 'rollup';
import type { MinifyOptions } from 'terser';
/**
* A Rollup plugin to generate a minified output bundle.
*
* @param options - Plugin options extending Terser's MinifyOptions
* @returns Plugin instance
*/
export default function terser(options?: Options): Plugin;Configuration interface extending Terser's standard minification options.
interface Options extends MinifyOptions {
/** Name cache for consistent variable naming across chunks */
nameCache?: Record<string, any>;
/** Maximum number of worker threads to use for parallel processing */
maxWorkers?: number;
}The Options interface extends Terser's MinifyOptions, which includes all standard Terser configuration options such as:
compress: Compression options for dead code eliminationmangle: Variable name mangling optionsoutput: Output formatting optionssourceMap: Source map generation settingstoplevel: Top-level scope manglingmodule: ES module-specific optimizationsThe returned plugin instance includes:
interface TerserPlugin {
/** Plugin identifier */
name: 'terser';
/** Processes each chunk through the minifier */
renderChunk(
code: string,
chunk: RenderedChunk,
outputOptions: NormalizedOutputOptions
): Promise<string | { code: string; map: any }>;
/** Returns number of workers used in the last operation */
readonly numOfWorkersUsed: number;
}The plugin automatically applies format-specific optimizations:
module: true for ES module optimizationstoplevel: true for top-level scope minificationsourcemap: trueWhen maxWorkers is specified or multiple chunks are processed:
The nameCache option enables consistent variable naming across chunks:
The plugin handles errors gracefully:
import terser from '@rollup/plugin-terser';
export default {
input: 'src/index.js',
output: { file: 'dist/bundle.min.js', format: 'iife' },
plugins: [terser()]
};import terser from '@rollup/plugin-terser';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.min.js',
format: 'iife',
sourcemap: true
},
plugins: [
terser({
compress: {
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log']
},
mangle: {
reserved: ['MyLibrary', 'API']
},
output: {
comments: false
},
maxWorkers: 4
})
]
};import terser from '@rollup/plugin-terser';
const nameCache = {};
export default {
input: ['src/main.js', 'src/worker.js'],
output: {
dir: 'dist',
format: 'es'
},
plugins: [
terser({
nameCache,
mangle: true,
maxWorkers: 2
})
]
};