Webpack plugin that integrates Terser JavaScript minifier for code optimization and compression
—
Built-in minification implementations for different JavaScript minifiers, each with specific optimization capabilities and performance characteristics.
Default minification function using the Terser JavaScript minifier for comprehensive code optimization.
/**
* Minifies JavaScript using Terser
* @param input - Object mapping filenames to source code
* @param sourceMap - Optional source map input
* @param minimizerOptions - Terser-specific options
* @param extractComments - Comment extraction configuration
* @returns Promise resolving to minification result
*/
static terserMinify(
input: Input,
sourceMap?: SourceMapInput,
minimizerOptions?: TerserOptions,
extractComments?: ExtractCommentsOptions
): Promise<MinimizedResult>;Usage Examples:
const TerserPlugin = require('terser-webpack-plugin');
// Using default terser minifier (implicit)
new TerserPlugin();
// Explicit terser configuration
new TerserPlugin({
minify: TerserPlugin.terserMinify,
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log'],
},
mangle: {
reserved: ['$', 'jQuery'],
},
format: {
comments: false,
},
},
});
// Direct function usage
const result = await TerserPlugin.terserMinify(
{ 'main.js': 'function test() { console.log("hello"); }' },
undefined,
{ compress: { drop_console: true } }
);Minification function using UglifyJS for JavaScript code compression and optimization.
/**
* Minifies JavaScript using UglifyJS
* @param input - Object mapping filenames to source code
* @param sourceMap - Optional source map input
* @param minimizerOptions - UglifyJS-specific options
* @param extractComments - Comment extraction configuration
* @returns Promise resolving to minification result
*/
static uglifyJsMinify(
input: Input,
sourceMap?: SourceMapInput,
minimizerOptions?: UglifyJSOptions,
extractComments?: ExtractCommentsOptions
): Promise<MinimizedResult>;Usage Examples:
const TerserPlugin = require('terser-webpack-plugin');
// Using UglifyJS minifier
new TerserPlugin({
minify: TerserPlugin.uglifyJsMinify,
terserOptions: {
compress: {
drop_console: true,
},
mangle: true,
output: {
beautify: false,
comments: false,
},
},
});Minification function using SWC (Speedy Web Compiler) for fast JavaScript/TypeScript minification.
/**
* Minifies JavaScript using SWC
* @param input - Object mapping filenames to source code
* @param sourceMap - Optional source map input
* @param minimizerOptions - SWC-specific options
* @returns Promise resolving to minification result
*/
static swcMinify(
input: Input,
sourceMap?: SourceMapInput,
minimizerOptions?: SWCOptions
): Promise<MinimizedResult>;Usage Examples:
const TerserPlugin = require('terser-webpack-plugin');
// Using SWC minifier
new TerserPlugin({
minify: TerserPlugin.swcMinify,
terserOptions: {
compress: true,
mangle: true,
},
});Minification function using ESBuild for extremely fast JavaScript/TypeScript minification.
/**
* Minifies JavaScript using ESBuild
* @param input - Object mapping filenames to source code
* @param sourceMap - Optional source map input
* @param minimizerOptions - ESBuild-specific options
* @returns Promise resolving to minification result
*/
static esbuildMinify(
input: Input,
sourceMap?: SourceMapInput,
minimizerOptions?: ESBuildOptions
): Promise<MinimizedResult>;Usage Examples:
const TerserPlugin = require('terser-webpack-plugin');
// Using ESBuild minifier
new TerserPlugin({
minify: TerserPlugin.esbuildMinify,
terserOptions: {
target: 'es2018',
minify: true,
legalComments: 'none',
},
});Create custom minification implementations by following the minifier interface.
/**
* Custom minification function interface
* @param input - Object mapping filenames to source code
* @param sourceMap - Optional source map input
* @param minifyOptions - Custom minifier options
* @param extractComments - Comment extraction configuration
* @returns Promise resolving to minification result
*/
interface MinimizerImplementation<T> {
(
input: Input,
sourceMap: SourceMapInput | undefined,
minifyOptions: MinimizerOptions<T>,
extractComments?: ExtractCommentsOptions
): Promise<MinimizedResult>;
getMinimizerVersion?(): string | undefined;
supportsWorkerThreads?(): boolean | undefined;
}Usage Examples:
const TerserPlugin = require('terser-webpack-plugin');
// Custom minifier function
const customMinify = async (input, sourceMap, options) => {
// Custom minification logic
const [[filename, code]] = Object.entries(input);
// Your custom minification implementation
const minifiedCode = yourCustomMinifier(code, options);
return {
code: minifiedCode,
map: sourceMap,
extractedComments: [],
};
};
// Add version and worker support info
customMinify.getMinimizerVersion = () => '1.0.0';
customMinify.supportsWorkerThreads = () => true;
// Use custom minifier
new TerserPlugin({
minify: customMinify,
terserOptions: {
// Your custom options
level: 'aggressive',
},
});Different minifiers have different worker thread capabilities:
// Worker thread support by minifier
TerserPlugin.terserMinify.supportsWorkerThreads(); // true
TerserPlugin.uglifyJsMinify.supportsWorkerThreads(); // true
TerserPlugin.swcMinify.supportsWorkerThreads(); // false
TerserPlugin.esbuildMinify.supportsWorkerThreads(); // falseGet version information for installed minifiers:
// Get minifier versions
TerserPlugin.terserMinify.getMinimizerVersion(); // e.g., "5.31.1"
TerserPlugin.uglifyJsMinify.getMinimizerVersion(); // e.g., "3.18.0"
TerserPlugin.swcMinify.getMinimizerVersion(); // e.g., "1.3.102"
TerserPlugin.esbuildMinify.getMinimizerVersion(); // e.g., "0.19.11"interface Input {
[file: string]: string;
}
interface MinimizedResult {
code: string;
map?: SourceMapInput;
errors?: (string | Error)[];
warnings?: (string | Error)[];
extractedComments?: string[];
}
type MinimizerOptions<T> = PredefinedOptions<T> & T;
interface PredefinedOptions<T> {
module?: boolean | string;
ecma?: number | string;
}
type SourceMapInput = any; // From @jridgewell/trace-mapping
type ExtractCommentsOptions =
| boolean
| string
| RegExp
| ExtractCommentsFunction
| ExtractCommentsObject;Install with Tessl CLI
npx tessl i tessl/npm-terser-webpack-plugin