Куда поместить изображения с помощью Svelte Kit
Я использую Svelte некоторое время, и теперь я перешел на Svelte Kit, чтобы добавить несколько страниц. Я хочу добавить несколько изображений на свой сайт, но я не знаю, куда их поместить. В Svelte я бы просто вставил их
public/images
но нет
public
папка со Svelte Kit (я установил его с помощью
npm init svelte@next my-app
если это имеет значение). Вставил бы я их
static
?
Спасибо!
3 ответа
Я рекомендую размещать изображения под , а не . Например, вы можете сделатьsrc/lib/images
илиsrc/lib/assets
папку и положить их туда.
Причина в производительности:
Для файлов, импортированных из любого места подsrc
, во время компиляции Vite добавляет хэш к имени файла.myImage.png
может закончиться какmyImage-a89cfcb3.png
. Хэш основан на содержимом изображения. Поэтому, если вы измените изображение, оно получит новый хэш. Это позволяет серверу отправлять браузеру срок действия кэша с очень большим сроком действия, поэтому браузер может кэшировать его навсегда или до тех пор, пока он не изменится. Это истечение срока действия кеша на основе ключа, который, по IMO, является лучшим: кэшируется ровно столько, сколько нужно. (Отправляет ли сервер на самом деле правильные заголовки кэширования в ответе, может зависеть от того, какой адаптер SvelteKit вы используете и на каком хосте вы находитесь.)
Напротив, изображения ниже не имеют хэша, добавленного к их имени. Вы можете использоватьstatic
каталог для таких вещей, какrobots.txt
которые должны иметь определенное имя файла. Поскольку имя файла остается неизменным даже при изменении его содержимого, эти файлы по необходимости в конечном итоге имеютcache-control
значение, которое включаетmax-age=0, must-revalidate
иetag
, что означает, что даже если браузер кеширует изображение, ему все равно приходится обращаться к серверу, чтобы проверить правильность кэшированного изображения. Это замедляет каждое изображение на вашем сайте.
Использование:
При размещении изображений подsrc/lib
, вы ссылаетесь на них следующим образом:
<script>
import img from '$lib/images/img.png';
</script>
<img src={img} alt="Image" />
Я рекомендую упростить, добавив в ваш проект svelte-preprocess-import-assets , который автоматизирует процесс импорта изображений и очищает ваш код. Вы пишете следующее, и он генерирует приведенный выше код:
<img src="$lib/images/img.png" alt="Image" />
Поскольку Sveltekit использует Vitejs , на официальном веб-сайтеVitejs упоминается простое решение (нажмите здесь).
Сначала внутри тега script:
<script>
const imgUrl = new URL('./img.png', import.meta.url).href
</script>
затем внутри вашего тега изображения просто используйте эту переменную,
<img src="{imgUrl}" alt="" />
или,
<div class=" h-screen w-full" style="background-image: url('{bgUrl}') ;">
</div>
Вы можете импортировать статические изображения из любого относительного пути.
есть также svelte-image.
«Svelte image — это препроцессор, который автоматизирует оптимизацию изображения с помощью Sharp.
Он анализирует вашimg
теги, оптимизирует или встраивает их и заменяетsrc
соответственно. (Внешние изображения не оптимизированы.)
Компонент изображения позволяетlazyloading
и показ нескольких размеров черезsrcset
.
Этот пакет в значительной степени вдохновленgatsby
изображение.
Спасибо @jkdoshi за отличный видеоурок по Svelte Image».
-https://github.com/matyunya/svelte-изображение