Skip to content

Справочник ​

Архитектура ​

Один 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.

Разработка ​

bash
git clone https://github.com/macrulezru/mediatoolz.git
cd mediatoolz
npm install
npm test

Тесты работают с настоящими временными папками и настоящими изображениями, поэтому ловят то, что не поймал бы мок. Команды для остального:

bash
npm run build       # tsc -> dist/, и веб-интерфейс
npm run typecheck   # tsc --noEmit, и интерфейс
npm run lint        # eslint .
npm run format      # prettier --check .

Лицензия ​

MIT — см. LICENSE.