nuckty
EN
Все разделы →

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 определяет проект.