| name | node-minify |
| description | Compress JavaScript, CSS, HTML, JSON, and image files using node-minify library.
Use when: minifying/compressing assets, bundling JS/CSS files, optimizing images (WebP/AVIF),
concatenating files, or when user mentions "node-minify", "@node-minify", "minification".
Triggers: "minify", "compress JS/CSS", "bundle", "optimize images", "reduce file size".
|
node-minify
Lightweight Node.js minification library supporting JS, CSS, HTML, JSON, and images.
Installation
npm install @node-minify/core @node-minify/terser
Quick Start
import { minify } from "@node-minify/core";
import { terser } from "@node-minify/terser";
await minify({
compressor: terser,
input: "src/app.js",
output: "dist/app.min.js",
});
const result = await minify({
compressor: terser,
content: "const x = 1; const y = 2;",
});
Compressor Selection
| Type | Recommended | Alternatives |
|---|
| JS | terser (modern, fast) | esbuild (fastest), swc, oxc, uglify-js, google-closure-compiler (advanced optimizations, requires Java) |
| CSS | lightningcss (Rust, fastest) | esbuild, clean-css, cssnano, csso |
| HTML | html-minifier | minify-html |
| JSON | jsonminify | - |
| Images | sharp (WebP/AVIF) | svgo (SVG), imagemin (PNG/JPEG/GIF) |
| Utility | no-compress | Pass-through for concatenation without minification |
Deprecated (avoid): babel-minify, uglify-es, yui, crass, sqwish
API Reference
Settings (user input)
type Settings = {
compressor: Compressor;
input?: string | string[];
output?: string | string[];
content?: string | Buffer;
options?: Record<string, unknown>;
type?: "js" | "css";
publicFolder?: string;
replaceInPlace?: boolean;
silence?: boolean;
};
Return Value
minify() returns Promise<string> - the minified content.
Common Patterns
Glob/Wildcards
await minify({
compressor: terser,
input: "src/**/*.js",
output: "dist/bundle.min.js",
});
Multiple Files -> Multiple Outputs
await minify({
compressor: terser,
input: ["a.js", "b.js"],
output: "$1.min.js",
});
Source Maps
await minify({
compressor: terser,
input: "app.js",
output: "app.min.js",
options: { sourceMap: true },
});
CSS with esbuild
import { esbuild } from "@node-minify/esbuild";
await minify({
compressor: esbuild,
type: "css",
input: "styles.css",
output: "styles.min.css",
});
Image Optimization (WebP/AVIF)
import { sharp } from "@node-minify/sharp";
await minify({
compressor: sharp,
input: "image.png",
output: "image.webp",
options: { format: "webp", quality: 80 },
});
HTML Minification
import { htmlMinifier } from "@node-minify/html-minifier";
await minify({
compressor: htmlMinifier,
input: "index.html",
output: "index.min.html",
options: {
collapseWhitespace: true,
removeComments: true,
},
});
Compressor-Specific Notes
| Compressor | Notes |
|---|
esbuild | Requires type: "js" or type: "css" |
lightningcss | Uses Buffer internally, supports targets: { chrome: 95 } |
google-closure-compiler | Requires Java; advanced optimizations available |
yui | Deprecated; requires Java; needs type |
Error Handling
try {
await minify({ compressor: terser, input: "app.js", output: "app.min.js" });
} catch (err) {
if (err instanceof Error) {
console.error("Minification failed:", err.message);
}
}
CLI
npx node-minify --compressor terser --input src/app.js --output dist/app.min.js