Skip to content

MaksymLeiber/MintJS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MintJS (Terser CLI)

GitHub: MaksymLeiber/MintJS

Node Version License

Быстрый минификатор 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>

Опции CLI

-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.

About

Быстрый минификатор/обфускатор JS с кэшем

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published