nuckty-ext-command-convert-images
Кодирование изображений в AVIF и WebP. Команда nuckty convert-images обходит исходные изображения и создаёт файлы AVIF и WebP рядом с оригиналами. При сборке движок копирует готовые файлы.
Тип
command — добавляет команду convert-images через env.commands.
Зачем это отдельная команда
Движок не кодирует изображения сам: при сборке он копирует готовые image.avif и image.webp, лежащие рядом с оригиналом. Готовить эти файлы — задача автора контента, и решает её эта команда.
Отдельный шаг кодирования позволяет повторным сборкам использовать готовые варианты. Запускайте команду при появлении новых или изменённых изображений. Сборка копирует подготовленные файлы по content-hash; хранить ли их в репозитории контента, решает проект.
Что делает
Команда сканирует PNG/JPEG и кодирует оба формата из оригинала. WebP сохраняется, только если он меньше оригинала. AVIF должен быть меньше созданного WebP, а если WebP не создан — меньше оригинала. Качество постепенно снижается; вариант, не достигший цели даже при качестве 1, не сохраняется. sharp входит только в зависимости этого расширения.
Кэш по содержимому
convert-images.json в корне сканирования хранит полный MD5 оригинала, размеры вариантов и признак завершения. Пропуск требует завершённой записи и непустых обычных файлов для записанных вариантов рядом с исходником. Старые записи без признака завершения перекодируются. Если политика проекта требует хранить варианты и кэш в репозитории, сохраните их самостоятельно; команда не делает коммитов.
Некорректный кэш и коллизии выходных имён отклоняются до записи. Варианты заменяются через временные файлы после успешного кодирования; успешно созданный WebP может сохраниться при ошибке AVIF.
Опции
nuckty convert-images [contentDir] [--dry-run] [--force]
| Опция | Действие |
|---|---|
contentDir | Корень сканирования. По умолчанию — текущий каталог. |
--dry-run | Показать, что было бы закодировано, без записи файлов. |
--force | Перекодировать даже файлы, которые есть в кэше. |
Начальные уровни качества заданы в коде команды: PNG — AVIF 50 и WebP 90; JPEG — AVIF 50 и WebP 90.
Установка
Пример продолжает быстрый старт со стандартным обработчиком nuckty-ext-block-root. Добавьте новое расширение в ext глобального config/config-nuckty.ts, сохранив остальные записи. Если обработчик документа собственный, оставьте его вместо nuckty-ext-block-root.
Установите подготовленный пакет из каталога packages/ распакованного стартового проекта:
npm install --save-dev ./packages/nuckty-ext-command-convert-images-1.0.0-beta1.tgz
import { defineNucktyConfig } from 'nuckty';
export default defineNucktyConfig({
targets: { main: { configDir: 'config/', outDir: 'site/' } },
ext: ['nuckty-ext-block-root', 'nuckty-ext-command-convert-images'],
});
Пакет sharp входит только в зависимости этого расширения — движок его не подключает.
Где запускать
Из корня сайта, где расширение установлено и подключено, передайте путь к контенту: npx nuckty convert-images external/content. По умолчанию сканируется текущий каталог. Сборка использует готовые варианты; необходимость запускать конвертацию в CI определяет проект.