Minifier of js, css, html and img files with CLI and programmatic interfaces
npx @tessl/cli install tessl/npm-minify@14.1.0Minify is a comprehensive minification tool for web assets including JavaScript, CSS, HTML, and image files. It provides both a command-line interface and a programmatic API, supporting multiple minifiers for JavaScript (putout, terser, esbuild, swc), CSS (clean-css, lightningcss), HTML minification via html-minifier, and CSS base64 image inlining. The tool offers maximum flexibility with configurable options via .minify.json files and supports multiple output formats and minification strategies.
npm install minify (global: npm install minify -g)import {minify} from 'npm:minify';import { minify } from "minify";For CommonJS:
const { minify } = require("minify");Individual minifier imports:
import { minify } from "minify";
// Access individual minifiers as properties
const jsMinified = await minify.js(source);
const cssMinified = await minify.css(source);
const htmlMinified = minify.html(source); // Synchronous
const autoMinified = await minify.auto(source);import { minify } from "minify";
// Minify a file by path (auto-detects type from extension)
const minifiedContent = await minify("./script.js");
console.log(minifiedContent);
// With custom options
const options = {
js: {
type: "terser",
terser: {
mangle: false
}
}
};
const result = await minify("./app.js", options);# Minify a file and output to console
minify script.js
# Minify and save to file
minify script.js > script.min.js
# Process stdin with specific type
cat script.js | minify --js
# Multiple files
minify *.js *.css *.htmlMinify is built around several key components:
Minifies JavaScript source code using configurable minifiers including putout (default), terser, esbuild, and swc.
function minify.js(source: string, userOptions?: MinifyOptions): Promise<string>;
interface MinifyOptions {
js?: {
type?: 'putout' | 'terser' | 'esbuild' | 'swc';
putout?: object;
terser?: object;
esbuild?: object;
swc?: object;
};
}Minifies CSS data using configurable CSS minifiers including lightningcss (default) and clean-css, with automatic base64 image inlining.
function minify.css(data: string, userOptions?: MinifyOptions): Promise<string>;
interface MinifyOptions {
css?: {
type?: 'lightningcss' | 'clean-css';
'clean-css'?: object;
};
img?: {
maxSize?: number;
};
}Minifies HTML data using html-minifier-next with comprehensive default settings for aggressive minification.
function minify.html(data: string, userOptions?: MinifyOptions): string;
interface MinifyOptions {
html?: {
removeComments?: boolean;
collapseWhitespace?: boolean;
removeAttributeQuotes?: boolean;
minifyJS?: boolean;
minifyCSS?: boolean;
// ... other html-minifier options
};
}Converts CSS images to base64 inline format for reduced HTTP requests. Typically used automatically during CSS minification.
function minify.img(name: string, data: string, userOptions?: MinifyOptions): Promise<string>;
interface MinifyOptions {
img?: {
maxSize?: number; // Default: 102400 (100KB)
};
}Automatically detects content format and applies the appropriate minifier. Tries multiple formats until one succeeds.
function minify.auto(data: string, options?: MinifyOptions): Promise<string>;Main minification function that processes files by extension (.js, .css, .html) and applies appropriate minifiers.
function minify(name: string, userOptions?: MinifyOptions): Promise<string>;Command-line interface supporting file processing, stdin/stdout, and various output formats.
Usage: minify [options] [files...]
Options:
-h, --help display this help and exit
-v, --version display version and exit
--js minify javascript from stdin
--css minify css from stdin
--html minify html from stdin
--auto auto detect format from stdinSupport for .minify.json configuration files with directory traversal for CLI usage. Configuration files are automatically loaded by the CLI tool only.
interface MinifyOptions {
js?: {
type?: 'putout' | 'terser' | 'esbuild' | 'swc';
putout?: PutoutOptions;
terser?: TerserOptions;
esbuild?: ESBuildOptions;
swc?: SWCOptions;
};
css?: {
type?: 'lightningcss' | 'clean-css';
'clean-css'?: CleanCSSOptions;
};
html?: HTMLMinifierOptions;
img?: {
maxSize?: number;
};
}
interface PutoutOptions {
quote?: string;
mangle?: boolean;
mangleClassNames?: boolean;
removeUnusedVariables?: boolean;
removeConsole?: boolean;
removeUselessSpread?: boolean;
}
interface HTMLMinifierOptions {
removeComments?: boolean;
removeCommentsFromCDATA?: boolean;
removeCDATASectionsFromCDATA?: boolean;
collapseWhitespace?: boolean;
collapseBooleanAttributes?: boolean;
removeAttributeQuotes?: boolean;
removeRedundantAttributes?: boolean;
useShortDoctype?: boolean;
removeEmptyAttributes?: boolean;
removeEmptyElements?: boolean;
removeOptionalTags?: boolean;
removeScriptTypeAttributes?: boolean;
removeStyleLinkTypeAttributes?: boolean;
minifyJS?: boolean;
minifyCSS?: boolean;
}Minify provides comprehensive error handling: