Options

minify() is asynchronous and returns a promise resolving to the minified content. All examples below use ESM import, which is the only module system node-minify supports.

Concatenate Files

In order to concatenate files, simply pass in an array with the compressor no-compress.

import { minify } from '@node-minify/core';
import { noCompress } from '@node-minify/no-compress';

await minify({
  compressor: noCompress,
  input: ['foo.js', 'foo2.js', 'foo3.js'],
  output: 'bar.js'
});

Using wildcards

import { minify } from '@node-minify/core';
import { gcc } from '@node-minify/google-closure-compiler';

await minify({
  compressor: gcc,
  input: 'public/**/*.js',
  output: 'bar.js'
});

Using wildcards with $1 output

This option will not merge the files.

import { minify } from '@node-minify/core';
import { terser } from '@node-minify/terser';

await minify({
  compressor: terser,
  input: 'public/**/*.js',
  output: '$1.min.js'
});

If you have 3 files file1.js, file2.js and file3.js; those files will be outputed as file1.min.js, file2.min.js and file3.min.js

If you want to save those files in same directory than source, you can use replaceInPlace option.

import { minify } from '@node-minify/core';
import { terser } from '@node-minify/terser';

await minify({
  compressor: terser,
  input: 'public/**/*.js',
  output: '$1.min.js',
  replaceInPlace: true
});

Using public folder

publicFolder allow you to specify an input and output folder.

It avoids you to specify the folder for each file.

import { minify } from '@node-minify/core';
import { gcc } from '@node-minify/google-closure-compiler';

await minify({
  compressor: gcc,
  publicFolder: './public/',
  input: ['foo.js', 'foo2.js'],
  output: 'bar.js'
});

Allowing Empty Output

When minifying files that contain only comments (e.g., license headers in CSS), the minifier may produce empty output. By default, this throws a validation error. Use allowEmptyOutput to skip writing the file instead.

import { minify } from '@node-minify/core';
import { cleanCss } from '@node-minify/clean-css';

await minify({
  compressor: cleanCss,
  input: 'styles-with-only-comments.css',
  output: 'styles.min.css',
  allowEmptyOutput: true // Skip writing if result is empty
});

When allowEmptyOutput: true:

  • Empty results are silently skipped (no file written, no error)
  • Source maps are also skipped when code is empty
  • Returns empty string "" for in-memory mode
  • Original file is preserved when using replaceInPlace

Max Buffer Size

Some compressors spawn a child process. buffer caps how much output that process may produce before it is killed. The default is 1000 * 1024 bytes, which is enough for most files; raise it when minifying very large inputs.

import { minify } from '@node-minify/core';
import { gcc } from '@node-minify/google-closure-compiler';

await minify({
  compressor: gcc,
  input: 'foo.js',
  output: 'bar.js',
  buffer: 1000 * 1024
});

Timeout

timeout limits how long a compressor may run, in milliseconds.

import { minify } from '@node-minify/core';
import { gcc } from '@node-minify/google-closure-compiler';

await minify({
  compressor: gcc,
  input: 'foo.js',
  output: 'bar.js',
  timeout: 30000
});