| Change | Before (v9) | After (v10) |
|---|---|---|
| Module system | CommonJS + ESM | ESM only |
| Async pattern | Callbacks + Promises | Async/Await only |
| Exports | Default exports | Named exports |
| Node.js | Node 18+ | Node 20+ (Node 22 recommended) |
Node-minify v10 is ESM-only. Update your package.json and imports.
{
"type": "module"
}// ❌ Before (CommonJS)
const minify = require('@node-minify/core');
const terser = require('@node-minify/terser');
// ✅ After (ESM)
import { minify } from '@node-minify/core';
import { terser } from '@node-minify/terser';All packages now use named exports.
// ❌ Before
import minify from '@node-minify/core';
import terser from '@node-minify/terser';
// ✅ After
import { minify } from '@node-minify/core';
import { terser } from '@node-minify/terser';import { minify } from '@node-minify/core';
// JavaScript compressors
import { babelMinify } from '@node-minify/babel-minify';
import { gcc } from '@node-minify/google-closure-compiler';
import { terser } from '@node-minify/terser';
import { uglifyJs } from '@node-minify/uglify-js';
import { uglifyEs } from '@node-minify/uglify-es';
// CSS compressors
import { cleanCss } from '@node-minify/clean-css';
import { crass } from '@node-minify/crass';
import { cssnano } from '@node-minify/cssnano';
import { csso } from '@node-minify/csso';
import { sqwish } from '@node-minify/sqwish';
// HTML compressor
import { htmlMinifier } from '@node-minify/html-minifier';
// Other
import { yui } from '@node-minify/yui';
import { jsonMinify } from '@node-minify/jsonminify';
import { noCompress } from '@node-minify/no-compress';Callbacks are removed. Use async/await or promises.
// ❌ Before (callback)
minify({
compressor: terser,
input: 'src/*.js',
output: 'dist/bundle.js',
callback: function(err, min) {
if (err) console.error(err);
console.log(min);
}
});
// ❌ Before (sync - removed)
const result = minify.sync({
compressor: terser,
input: 'src/*.js',
output: 'dist/bundle.js'
});
// ✅ After (async/await)
const result = await minify({
compressor: terser,
input: 'src/*.js',
output: 'dist/bundle.js'
});
// ✅ After (promise)
minify({
compressor: terser,
input: 'src/*.js',
output: 'dist/bundle.js'
}).then(result => {
console.log(result);
}).catch(err => {
console.error(err);
});- Minimum: Node 20
- Recommended: Node 22
Update your .nvmrc or CI configuration accordingly.
The html-minifier package was replaced with html-minifier-next due to security vulnerabilities. No code changes required—the API remains the same.
const minify = require('@node-minify/core');
const terser = require('@node-minify/terser');
minify({
compressor: terser,
input: 'src/*.js',
output: 'dist/bundle.js',
callback: function(err, min) {
if (err) {
console.error('Error:', err);
return;
}
console.log('Minified:', min);
}
});import { minify } from '@node-minify/core';
import { terser } from '@node-minify/terser';
try {
const result = await minify({
compressor: terser,
input: 'src/*.js',
output: 'dist/bundle.js'
});
console.log('Minified:', result);
} catch (err) {
console.error('Error:', err);
}The CLI now requires ESM-compatible Node.js. Usage remains the same:
node-minify --compressor terser --input 'src/*.js' --output dist/bundle.jsnode-minify was splitted into small packages.
- uninstall old version
npm remove node-minify
- install the
corepackage
npm install @node-minify/core
- install the compressor
npm install @node-minify/uglify-js
- usage
const minify = require('@node-minify/core');
const uglifyJS = require('@node-minify/uglify-js');
minify({
compressor: uglifyJS,
input: 'foo.js',
output: 'bar.js',
callback: function(err, min) {}
});yui-js and yui-css was removed, a type option must be use instead
var compressor = require('node-minify');
compressor.minify({
compressor: 'yui-js',
input: 'foo.js',
output: 'bar.js',
callback: function(err, min) {}
});var compressor = require('node-minify');
compressor.minify({
compressor: 'yui-css',
input: 'foo.css',
output: 'bar.css',
callback: function(err, min) {}
});const minify = require('@node-minify/core');
const yui = require('@node-minify/yui');
minify({
compressor: yui,
type: 'js',
input: 'foo.js',
output: 'bar.js',
callback: function(err, min) {}
});const minify = require('@node-minify/core');
const yui = require('@node-minify/yui');
minify({
compressor: yui,
type: 'css',
input: 'foo.css',
output: 'bar.css',
callback: function(err, min) {}
});- No need to instantiate anymore
new compressor.minify() to compressor.minify()
- type was renamed to compressor
{ type: 'gcc' } to { compressor: 'gcc' }
- fileIn was renamed to input
{ fileIn: 'foo.js' } to { input: 'foo.js' }
- fileOut was renamed to output
{ fileOut: 'bar.js' } to { output: 'bar.js' }
var compressor = require('node-minify');
new compressor.minify({
type: 'gcc',
fileIn: 'public/js/base.js',
fileOut: 'public/js-dist/base-min-gcc.js',
callback: function(err, min) {}
});var compressor = require('node-minify');
compressor.minify({
compressor: 'gcc',
input: 'foo.js',
output: 'bar.js',
callback: function(err, min) {}
});