Image Kit
1.4.1
2026-10-03
- Исправлено: в
vite devплагин мог бесконечно перегенерировать изображения. Горячее обновление запускалоgenerate()для любого изменившегося файла-изображения, включая файлы, которые самgenerate()писал вoutput, а приincremental: falseкаждый проход перезаписывал их и запускал следующий — сотни запусков в секунду. Теперь горячее обновление запускается только для изображения внутриinputи никогда для изображения внутриoutput, а проходы не накладываются друг на друга: изменения, пришедшие во время работы, объединяются в один повторный запуск. См. Vite-плагин. - Исправлено: папка
outputвнутриinputпропускается при сканированииinputи больше не подаётся обратно как исходные изображения. - Исправлено: dev-сервер больше не перезагружает страницу на каждый сгенерированный файл; манифест плейсхолдеров следит только за папками из
placeholders.dirs. - Исправлено: огромный SVG (например, 30000×30000) ронял
?placeholderна лимите пикселей sharp. Теперь размер читается из собственныхwidth/height/viewBoxфайла, а цвет считается по небольшому рендеру. - Исправлено: битый SVG ронял всю сборку на
?placeholder. Теперь плагин предупреждает и возвращает объявленный размер (или пустой объект); битое растровое изображение по-прежнему падает. - Изменено:
?blurhashи?thumbhashдля SVG печатают предупреждение, что у вектора есть только цвет, и указывают на?placeholder, вместо молчаливого возврата пустой строки.
1.4.0
2026-10-01
- Плейсхолдеры для папок целиком.
npx vue-image-kit placeholders --dir public/imagesсчитает каждое изображение папки, рекурсивно, и добавляет его в манифест под тем URL, по которому оно отдаётся. Поэтому изображение, чейsrcсобирается во время выполнения (:src="category.image"), тоже получает плейсхолдер.--dir src/img=/assets/imgзадаёт папку, которая отдаётся с другого URL, а--urlдобавляет одно удалённое или CDN-изображение без--remote. Подробнее — в разделе Папки и URL. - Плагин Vite собирает такой же манифест сам. С
vueImageKit({ generate: false, placeholders: { dirs: [...] } })он доступен как виртуальный модульvirtual:vue-image-kit/placeholders, пересобирается при изменении файла в этих папках и кешируется между сборками. Подробнее — в разделе Манифест плейсхолдеров из папок. - Модуль Nuxt регистрирует всё сам.
vueImageKit: { placeholders: { dirs: [...] } }добавляет плагин Vite и передаёт манифест каждому<VImage>— запускать команду и добавлять запись вvite.pluginsне нужно. Прежняя строковая форма, путь к файлу манифеста, работает как раньше, аmanifestобъединяет такой файл с остальным. Подробнее — в разделе Опции модуля. - Новые импорты Vite, которые считают только плейсхолдер и не пишут файлы.
import placeholder from './photo.jpg?placeholder'возвращает{ blurhash, placeholderColor, width, height }— это пропсы самого<VImage>, поэтому достаточно<VImage v-bind="placeholder" />.?placeholder=thumbhashвозвращает ThumbHash вместо BlurHash,?placeholder=color— только доминирующий цвет и размер, а новый импорт?blurhash— только строку BlurHash, как?thumbhash. Они работают и черезimport.meta.glob(..., { query: '?placeholder' }). - Новая опция
generate: falseу плагина Vite. С ней плагин больше не обрабатывает всю папкуinputпри старте и при горячих обновлениях, а только отвечает на импорты?vik,?placeholder,?blurhash,?thumbhashи на виртуальный манифест. Папкаinputможет не существовать. Подробнее — в разделе Только плейсхолдеры, без изменения размеров. - Хеши можно настраивать:
--components 4x3(компоненты BlurHash),--sample 100(размер, до которого изображение уменьшается перед расчётом) и--color dominant|averageу команды, а такжеtuning: { components, sample, color }в файле конфигурации, плагине Vite и модуле Nuxt. При смене настроек кеш сбрасывается. Подробнее — в разделе Настройка хешей. - Плагин Vite кеширует плейсхолдеры в том же файле, что и команда
placeholders, поэтому повторная сборка читает только изменившиеся изображения. v-lazy-imgиuseBackgroundImage()читают манифест плейсхолдеров. Если у них нет своегоplaceholder, пока изображение грузится, они показывают декодированное размытие и доминирующий цвет записи для своегоsrc, а командаplaceholdersзаполняет манифест для их статических использований. Подробнее — в разделе v-lazy-img и useBackgroundImage().?thumbhashи?blurhashтеперь считают значения так же, как командаplaceholders— BlurHash поверх белого фона, ThumbHash с вписыванием в 100×100, — так что одно и то же изображение получает один и тот же хеш в обоих случаях.