Справочник
Архитектура
Один CLI-раннер на commander с двумя командами, image-hash и image-batch, и командой ui, которая запускает веб-интерфейс. Каждая команда самодостаточна: свой разбор флагов, свой модуль с логикой и свой рендер отчёта. Общие у них модуль вывода (баннер, цвет, выровненные таблицы), модель безопасности «сначала --dry-run» и загрузчик sharp.
sharp — обычная зависимость, так что npm ставит его готовый бинарник вместе с пакетом. Загружается он по-прежнему лениво, только когда есть что декодировать: сначала из-под mediatoolz, затем из проекта, затем из управляемой копии в ~/.mediatoolz/deps, которую команда предлагает создать, если ничего не найдено (--yes соглашается заранее). Алгоритмы хешей (hazehash, blurhash, thumbhash) — небольшие зависимости на чистом JavaScript; тяжёлое декодирование целиком на sharp.
image-batch планирует, прежде чем писать: для каждого исходника читаются настоящие размеры, вычисляются все размеры, форматы и имена файлов, обнаруживаются совпадения имён, и только потом файлы кодируются в ограниченном числе параллельных задач. Именно это позволяет --dry-run и предпросмотру в интерфейсе показывать настоящие числа и делает --replace безопасным: оригиналы сначала копируются в датированную папку с журналом, а файл заменяется, только если результат меньше.
Веб-интерфейс — небольшой локальный сервер (127.0.0.1, одноразовый токен) со страницей на Vue, собранной в пакет. Он вызывает те же функции, что и команды, поэтому интерфейс и командная строка не могут разойтись.
Сравнение
mediatoolz не заменяет конвейер изображений сборщика на этапе сборки и не является сервисом: это команда, которую вы запускаете на папке, когда нужен набор файлов, с правилами в конфигурации, которую можно переиспользовать. Плейсхолдеры, которые он делает, — те самые, что Vue Image Kit показывает, пока изображение загружается, а --emit пишет манифест, который читает этот пакет. Проверки кода, которые раньше жили рядом с этими командами, остались в DevToolz.
Разработка
git clone https://github.com/macrulezru/mediatoolz.git
cd mediatoolz
npm install
npm testТесты работают с настоящими временными папками и настоящими изображениями, поэтому ловят то, что не поймал бы мок. Команды для остального:
npm run build # tsc -> dist/, и веб-интерфейс
npm run typecheck # tsc --noEmit, и интерфейс
npm run lint # eslint .
npm run format # prettier --check .Лицензия
MIT — см. LICENSE.