Быстрый минификатор JavaScript-проектов на Node.js: рекурсивно ищет файлы, копирует исходники в out-директорию и генерирует минифицированные версии. Поддерживает .js, .mjs, .cjs, кэш по mtime, параллельную обработку и набор полезных флагов (баннеры, sourcemaps, обфускация).
- Рекурсивный обход каталогов с игнором (
node_modules,dist,build,.vite,coverage,miniи др.) - Поддержка расширений:
.js,.mjs,.cjs - Пропуск уже минифицированных файлов
*.min.* - Минификация через Terser
- Опциональная обфускация (
--obfuscate) - Опциональные source maps (
--sourcemap) - Сохранение лицензионных комментариев (
--keep-licenses) - Параллельная обработка (
--concurrency) - Простой кэш по времени модификации (ускоряет повторные запуски)
- Настраиваемый каталог вывода (
--out-dir) - Защита от больших файлов (лимит 50MB)
- Улучшенная диагностика ошибок
- Node.js >= 18
- terser (используется для минификации)
Установить локальные зависимости в корне проекта:
npm i# Базовый запуск (локально)
node minify.js <папка1> <папка2>-h, --help Показать справку
--obfuscate Включить агрессивное переименование (mangle toplevel)
--sourcemap Генерировать source map для *.min.js
--keep-licenses Сохранять лицензионные комментарии (/*! ... */)
--fail-on-error Выход с кодом 1, если при обработке были ошибки
--no-copy-original Не копировать исходники в out (оставлять только *.min.*)
--no-overwrite-if-bigger Не перезаписывать *.min.*, если он больше/не меньше исходника
--banner "текст" Добавить баннер в начало минифицированного файла
--banner-file <файл> Прочитать баннер из файла (перекрывает --banner)
--ecma <год> Уровень ECMAScript для Terser (по умолчанию: 2019)
--out-dir <dir> Каталог вывода (по умолчанию: mini)
--ignore <a,b,c> Доп. игнорируемые папки (через запятую)
--concurrency <n> Кол-во параллельных задач (по умолчанию: кол-во CPU, [2..8])
# Минификация без обфускации в каталог mini/
node minify.js src/assets/js
# С обфускацией и sourcemap, пользовательский каталог вывода
node minify.js --obfuscate --sourcemap --out-dir mini src js
# Игнор дополнительных папок и ограничение параллельности
node minify.js --ignore .cache,temp --concurrency 4 src
# Только минифицированные файлы без копий исходников
node minify.js --no-copy-original src
# Пропуск перезаписи, если минифицированный файл не уменьшился
node minify.js --no-overwrite-if-bigger src
# Баннер из строки
node minify.js --banner "/*! MyLib v1.2.3 | MIT */" src
# Баннер из файла
node minify.js --banner-file ./HEADER.txt src
# Строже в CI: падать при ошибках, выставить уровень ECMAScript и sourcemaps
node minify.js --fail-on-error --ecma 2020 --sourcemap src
# Несколько входных каталогов и свой out-dir (вне входов)
node minify.js --out-dir build/js src/js libs
# out-dir внутри входной папки: добавьте его в --ignore, чтобы исключить повторный обход
node minify.js --out-dir src/mini --ignore src/mini src
# Справка по опциям
node minify.js --help- Кэш хранится в
<out-dir>/.cache.jsonи основан на времени модификации файла (mtime) + активных опциях. - При неизменённом файле и тех же опциях файл пропускается (отмечается как «(кэш)» в логе).
- Изменение опций обнуляет кэш автоматически.
- Лицензии: при флаге
--keep-licensesсохраняются комментарии вида/*! ... */. - Source maps: при
--sourcemapкарта сохраняется рядом с*.min.*и добавляется ссылка//# sourceMappingURLв конец минифицированного файла. - Структура вывода: повторяет исходную структуру относительно
process.cwd(). - ESM: проект использует ESM ("type": "module").
- Код завершения: при
--fail-on-errorпроцесс завершится с кодом 1, если в каких-либо файлах произошли ошибки минификации. - Баннер:
--banner-fileимеет приоритет над--banner. Если баннер задан, он добавляется в начало минифицированного файла. - Безопасность: входные пути проверяются на выход за пределы проекта.
- Большие файлы: файлы свыше 50MB пропускаются с предупреждением.
- Диагностика: синтаксические ошибки выделяются отдельно от других ошибок минификации.
- Важно: если задаёте
--out-dirвнутри входной папки, добавьте этот каталог в--ignore, чтобы исключить повторный обход уже сгенерированных файлов.
MIT. См. файл LICENSE.