Astro 5.4

Автор
Matt Kane

Astro 5.4: оптимизация удалённых изображений в Markdown, усиленная безопасность dev/preview серверов, RegExp для Vercel ISR excludes и многое другое!

🖼️ Идеальный релиз для вас:

Чтобы обновить существующий проект, используйте CLI @astrojs/upgrade. Или обновите вручную:

# Рекомендуется:
npx @astrojs/upgrade
# Manual:
npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

Remote image optimization in Markdown

Сервис изображений Astro уже оптимизировал локальные Markdown-изображения. Теперь то же для удалённых!

Раньше синтаксис ![Houston](https://images.unsplash.com/photo-1530089711124-9ca31fb9e863) с удалёнными изображениями проходил без обработки — в отличие от компонента Image, без оптимизации для CMS и внешних источников.

В Astro 5.4 сервис изображений автоматически обрабатывает и оптимизирует удалённые изображения в Markdown и MDX. Все преимущества оптимизации Astro без изменения способа написания контента.

Функция включена по умолчанию — существующие удалённые изображения в Markdown и MDX оптимизируются автоматически. Для отказа для конкретных изображений используйте HTML <img> вместо Markdown.

Изображения в public/ по-прежнему не обрабатываются — обычное поведение Astro.

Спасибо PolyWolf за этот вклад!

Experimental responsive image support in Markdown

Ранее экспериментальные адаптивные изображения полностью поддерживались в компонентах Image и Picture. В Astro 5.4 поддержка расширена на Markdown и MDX!

При experimental.responsiveImages в конфиге Astro генерирует адаптивные изображения в Markdown и MDX с правильными свойствами и стилями.

Снова спасибо PolyWolf!

Allowlist hosts for dev and preview servers

Для безопасности Astro 5.4 добавляет опцию ограничения hostname, на которые отвечают dev и preview серверы.

Новая опция server.allowedHosts — список разрешённых hostname. Проверяется заголовок Host входящих запросов. Защита от DNS rebinding атак, например GHSA-vg6x-rcgg-rjx6.

astro.config.mjs
import {defineConfig} from "astro/config";
export default defineConfig({
server: {
allowedHosts: ['hello.world.example.local', 'hello.example.local']
}
})

Или в CLI:

astro dev --allowed-hosts=hello.world.example.local,hello.example.local
astro preview --allowed-hosts=hello.world.example.local,hello.example.local

Используйте только домены под вашим контролем. Сторонние домены — риск безопасности.

Подробности реализации — в документации Vite.

RegExp support for Vercel ISR excludes

При Incremental Static Regeneration (ISR) с адаптером Vercel больше гибкости в определении маршрутов, исключаемых из ISR-кеша.

Раньше каждый маршрут в isr.exclude перечислялся явно — неудобно при множестве SSR-маршрутов:

astro.config.mjs
import vercel from '@astrojs/vercel';
export default defineConfig({
output: 'server',
adapter: vercel({
isr: {
exclude: [
'/api/users',
'/api/posts',
'/api/comments',
// ... many more API routes
]
}
})
});

Теперь регулярные выражения для паттерн-исключений:

astro.config.mjs
import vercel from '@astrojs/vercel';
export default defineConfig({
output: 'server',
adapter: vercel({
isr: {
exclude: [
'/preview', // Specific route
'/auth/[page]', // Dynamic route
/^\/api\/.+/, // RegExp: all routes starting with /api/
]
}
})
});

Проще управлять ISR-исключениями в масштабе.

Спасибо Slawek Kolodziej!

New config helpers and build options

Astro 5.4 добавляет API для программной работы с Astro — особенно для тестов и скриптов.

Configuration helpers

Два хелпера из astro/config:

  • mergeConfig: слияние частичных конфигураций поверх базовой по правилам updateConfig для интеграций.
  • validateConfig: проверка валидности конфигурации Astro и заполнение дефолтов.

Полезно авторам интеграций и скриптам, манипулирующим конфигурацией.

Programmatic build options

API build принимает второй опциональный аргумент BuildOptions:

  • devOutput: при true — dev-подобная сборка. По умолчанию false.
  • teardownCompiler: завершать WASM компилятор после сборки. По умолчанию true.

Больше контроля при программных сборках — тесты и кастомные пайплайны.

Bug fixes

Как всегда, с релиза 5.3 мы усердно исправляли проблемы. Все детали — в changelog.

Thanks

Спасибо всем контрибьюторам, включая Emanuele Stoppa, Luiz Ferraz, Sarah Rainsberger, HiDeoo, Yan Thomas, PolyWolf, Slawek Kolodziej, и многих других.

Ждём, что вы построите с Astro 5.4! Вопросы и комментарии — в Astro Discord.