В процессе сборки Vite преобразует статические ресурсы (изображения,
шрифты, иконки, аудиофайлы) в зависимости от их размера и настроек
проекта. Один из ключевых параметров, влияющих на это поведение, —
assetsInlineLimit. Он определяет порог, при котором файл не
выносится в отдельный ассет, а встраивается прямо в JavaScript или CSS в
виде Data URL.
При импорте файла-ресурса в коде:
import logo from './logo.png'
Vite анализирует размер файла и принимает решение:
assetsInlineLimit — ресурс
превращается в строку Data URL (обычно base64)dist/assetsПример итогового поведения:
const logo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
или
const logo = "/assets/logo.8f3a9c2d.png"
assetsInlineLimitКонфигурация задаётся в vite.config.js:
export default {
build: {
assetsInlineLimit: 4096
}
}
По умолчанию значение составляет 4096 байт (4 KB).
Это означает, что все ресурсы размером до 4 KB будут встроены в код как строки, а более крупные файлы будут вынесены в отдельные файлы сборки.
Vite делегирует финальную обработку ассетов Rollup-плагину
@rollup/plugin-url-подобного поведения, но с собственной
интеграцией. Процесс включает:
Определение типа файла (png, svg, woff2, mp3 и др.)
Проверку размера через assetsInlineLimit
Преобразование:
dist/assetsИнлайнинг применяется не только к import, но и к
следующим сценариям:
import icon from './icon.svg'
background-image: url('./bg.png');
const imgUrl = new URL('./image.png', import.meta.url).href
Во всех случаях действует единая логика определения размера.
При инлайне Vite использует Data URL:
data:image/png;base64,...
SVG может быть:
data:font/woff2;base64,...
data:audio/mpeg;base64,...
Инлайн-ресурсы уменьшают число сетевых обращений, что особенно полезно:
Base64 увеличивает размер примерно на 33% по сравнению с бинарными данными. Это может:
Отдельные файлы могут кэшироваться браузером независимо. Inline-ресурсы:
assetsInlineLimitПодбор значения зависит от характера приложения:
Используются, когда:
Подходит для большинства SPA:
Применяются в случаях:
Помимо глобального лимита, Vite позволяет управлять загрузкой ресурсов явно:
import imgUrl from './image.png?url'
import imgBase64 from './image.png?inline'
Эти суффиксы имеют приоритет над assetsInlineLimit.
Если файл не инлайнится, он попадает в сборку и получает имя:
dist/assets/logo.8f3a9c2d.png
Формат управляется через:
build: {
assetsInlineLimit: 4096,
rollupOptions: {
output: {
assetFileNames: 'assets/[name].[hash][extname]'
}
}
}
Инлайнинг полностью исключает участие этого механизма, так как файл не создаётся физически.
SVG является особым случаем:
При инлайне SVG увеличивает HTML/JS размер, но позволяет:
Шрифты чувствительны к размеру:
Причина:
В dev-режиме:
assetsInlineLimit всё равно учитывается логическиЭто означает, что даже в разработке можно увидеть Data URL вместо ссылки.
Инлайнинг влияет на:
Приводит к:
assetsInlineLimit: 0
Последствия:
Base64:
?inline только для критически важных
UI-элементовassetsInlineLimit является частью общей системы
обработки ресурсов, которая включает:
Именно на этом этапе определяется, станет ли ресурс: