Astro 6.1

Автор
Fred Schott

Вышел Astro 6.1! Astro 6.1 даёт глобальный контроль над кодированием изображений с дефолтами Sharp по кодекам — настройте JPEG, WebP, AVIF и PNG один раз в конфиге Astro вместо каждого изображения.

Что нового в этом релизе:

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

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

Sharp codec-specific image defaults

Sharp, встроенный сервис изображений Astro, всегда поддерживал тонкие опции кодирования — mozjpeg для JPEG, effort для WebP и AVIF, уровни сжатия для PNG. Дефолты Sharp отлично подходят большинству проектов, но для единообразных настроек на большом числе изображений единственным вариантом была настройка каждого <Image /> отдельно.

Astro 6.1 добавляет image.service.config для установки дефолтов по кодекам один раз в конфиге Astro — они применяются ко всем изображениям при сборке:

astro.config.mjs
import { defineConfig } from 'astro/config';
export default defineConfig({
image: {
service: {
config: {
jpeg: { mozjpeg: true },
webp: { effort: 6, alphaQuality: 80 },
avif: { effort: 4, chromaSubsampling: '4:2:0' },
png: { compressionLevel: 9 },
},
},
},
});

Per-image quality по-прежнему имеет приоритет при установке, поэтому глобальные дефолты и per-image переопределения работают вместе без конфликтов. Полный список опций см. в справочнике конфигурации image service.

Advanced SmartyPants configuration

Если ваш Markdown-контент для неанглоязычной аудитории, вы, вероятно, замечали, что SmartyPants — библиотека Astro для автоматической типографической пунктуации — предполагает английские конвенции. Французские кавычки-ёлочки («»), немецкие кавычки („") или классическая обработка em-dash были недоступны без полного отключения SmartyPants.

Astro 6.1 открывает полную конфигурацию SmartyPants — можно настроить каждое преобразование отдельно:

astro.config.mjs
import { defineConfig } from 'astro/config';
export default defineConfig({
markdown: {
smartypants: {
dashes: 'oldschool',
openingQuotes: { double: '«', single: '‹' },
closingQuotes: { double: '»', single: '›' },
ellipses: 'unspaced',
quotes: false,
},
},
});

Полный список настроек см. в опциях retext-smartypants.

i18n fallback routes for integrations

Astro 6.1 экспонирует fallbackRoutes на каждом маршруте в хуке astro:routes:resolved, давая интеграциям доступ к дополнительным маршрутам, которые Astro генерирует для локалей без собственного контента при fallbackType: 'rewrite'.

{
'astro:routes:resolved': ({ routes }) => {
for (const route of routes) {
const fallbacks = route.fallbackRoutes.map((f) => f.pathname);
console.log(route.pathname, '->', fallbacks);
// '/about/' -> ['/fr/about/', '/de/about/']
}
}
}

Мы уже использовали это в @astrojs/sitemap, который теперь автоматически включает i18n fallback-страницы в sitemap. Раньше эти маршруты были невидимы для интеграций, и fallback-страницы молча отсутствовали в sitemap.

Подробнее о i18n fallback routing в документации Astro.

Other improvements

  • Плавнее view transitions на мобильных — клиентский роутер теперь пропускает анимации view transition, когда браузер уже даёт свой визуальный переход, например свайп в iOS Safari. Это устраняет двойную анимацию при навигации жестами назад и вперёд. (#16025)
  • Предупреждение о совместимости с Vite 8 — Astro теперь предупреждает при запуске dev-сервера, если Vite 8 обнаружен на top level проекта. Команда astro add cloudflare также автоматически добавляет "overrides": { "vite": "^7" } в package.json, предотвращая типичный краш при пакетах вроде @tailwindcss/vite. (#16062)
  • Исправления гидратации React — несколько исправлений ошибок гидратации React, включая условный рендеринг слотов и несоответствия experimentalReactChildren. (#15378, #15146)
  • CSRF-защита за reverse proxycheckOrigin теперь корректно читает X-Forwarded-Proto во время astro dev за TLS-terminating reverse proxy, предотвращая ложные 403 при отправке форм. (#16043)

Полный список исправлений и мелких улучшений см. в полном changelog.

Community

Команда Astro:

Alexander Niebuhr, Armand Philippot, Chris Swithinbank, Emanuele Stoppa, Erika, Florian Lefebvre, Fred Schott, HiDeoo, Luiz Ferraz, Matt Kane, Matthew Phillips, Reuben Tier, Sarah Rainsberger, and Yan Thomas.

Спасибо всем остальным контрибьюторам, которые помогли сделать Astro 6.1 возможным — кодом, документацией и улучшениями, включая:

0xRozier, Adam Matthiesen, Adam Page, Ahmad Yasser, AitorMT, Alex Dombroski, B Sai Thrishul, bashrocks, Ben Limmer, Bernd Strehl, Burra Karthikeya, Calvin Liang, chaegumi, Chase McCoy, Corbin Crutchley, Daniel Bodky, Daniil Sivak, Dario Piotrowicz, dataCenter430, Dawid Gaweł, Desel72, Em Poulter, Eveeifyeve, farshad, Felix Schneider, Felmon, fkatsuhiro, Giray, Gokhan Kurt, Greg L. Turnquist, hank00111, Haz, Jack Lukic, jahndan, Jason P. Cochrane, Jimmy, Junseong Park, Kedar Vartak, Kevin Z, Koji Wakamiya, Kumar Gautam, Kyle McLean, ld-web, Leif Marcus, Louis Escher, Martin Trapp, Matthew Justice, Natan Sągol, Oliver Speir, oliverlynch, Ossaid, paul valladares, Paweł Grzybek, pierreeurope, Rafael Yasuhide Sudo, Raymond Camden, Sakku 🦉, Sam Richard, Sanjaiyan Parthipan, Sebastian Beltran, Shinya Fujino, Sora, Tay, teinett, Thomas Bonnet, Tom Callahan, Tomasz Cz-Sokołow, Tristan Bessoussa, Vagno, vrabe, Will (liruifengv), xyamzw, Yevhen Amelin, マルコス, and もっちー