Доступен Astro 4.2! В релизе — новые экспериментальные функции, улучшения правил доступности, возможность для remark-плагинов настраивать оптимизацию изображений в Markdown и многое другое.
Основные новинки:
- (Экспериментально) Prerendering страниц через Speculation Rules API
- (Экспериментально) Переработанный приоритет маршрутов для injected routes
- Новая опция
redirectToDefaultLocale - Улучшенные правила доступности
- Настраиваемая оптимизация изображений в Markdown
Это первый релиз Astro, где почти все ключевые новинки — от сообщества; только одна — от core maintainer. Большая веха: Astro достаточно велик, чтобы у него было процветающее сообщество контрибьюторов. Спасибо всем, кто участвовал в релизе!
How to upgrade
Чтобы воспользоваться новинками, убедитесь, что у вас последняя версия Astro. Обновитесь до Astro 4.2 командой @astrojs/upgrade:
npx @astrojs/upgradeили командой вашего менеджера пакетов:
npm install astro@latestpnpm upgrade astro --latestyarn upgrade astro --latest(Experimental) Prerendering pages using the Speculation Rules API
Благодаря Ross Robino функция prefetch в Astro получила экспериментальную поддержку prerendering через Speculation Rules API (пока только Chromium). API позволяет prerender-ить страницы на клиенте и даже запускать client-side JavaScript на страницах, которые пользователь, вероятно, посетит следующими.
Добавьте в astro.config.mjs:
import { defineConfig } from 'astro/config';
// https://astro.build/configexport default defineConfig({ prefetch: true, experimental: { clientPrerender: true, },});Учитываются существующие опции prefetch, но теперь на клиенте prerender-ятся все ссылки с атрибутом data-astro-prefetch. Для браузеров без поддержки Speculation Rules API есть встроенный fallback.
Также можно использовать свойство document.prerendering в <script> для проверки prerendering:
<script> if (document.prerendering) { // prerendering is enabled }</script>Подробнее: документация experimental.clientPrerender.
(Experimental) Reworked routing priority for injected routes
Раньше маршруты через injectRoute() получали наивысший приоритет и сопоставлялись раньше остальных. Это вызывало трудноотлаживаемые проблемы с неожиданным сопоставлением маршрутов.
Мы долго не меняли это поведение из-за рисков в системе маршрутизации. Благодаря Luiz Ferraz Astro 4.2 приносит экспериментальный флаг — основу для улучшенной системы маршрутизации по умолчанию!
С флагом injected routes через injectRoute() и редиректы следуют тому же порядку приоритета, что и файловые маршруты. Более стабильные и предсказуемые правила для всех маршрутов проекта.
Попробуйте будущее Astro — добавьте experimental.globalRoutePriority в astro.config.mjs:
import { defineConfig } from 'astro/config';
// https://astro.build/configexport default defineConfig({ experimental: { globalRoutePriority: true, },});Также добавлено логирование коллизий маршрутов, когда два маршрута строят один URL.
Подробнее: документация experimental.globalRoutePriority.
New redirectToDefaultLocale config option
С появления интернационализации в Astro 4.0 часто просили отключить автоматический редирект корневого URL (/) на локаль по умолчанию при prefixDefaultLocale: true.
Теперь это возможно с опцией redirectToDefaultLocale:
import { defineConfig } from 'astro/config';
// https://astro.build/configexport default defineConfig({ i18n:{ defaultLocale: "en", locales: ["en", "fr"], routing: { prefixDefaultLocale: true, redirectToDefaultLocale: false } }});Редиректить или нет — решать вам. Опция включена по умолчанию.
Improved accessibility rules
Правила доступности в Astro Dev Toolbar с 4.0 стали точнее. Спасибо Oliver Speir за тщательное изучение WCAG! Ложные срабатывания в предыдущих релизах исправлены, дальнейшие улучшения в разработке.
Customizable image optimization in Markdown
Также от Oliver: remark-плагины теперь могут настраивать оптимизацию изображений в Markdown. Раньше каждое изображение через  использовало настройки Astro по умолчанию. Теперь плагины могут добавлять свойства к узлам image.
Пример плагина, устанавливающего width и height каждого изображения в 100:
import { visit } from "unist-util-visit";
export default function remarkPlugin() { return (tree) => { visit(tree, 'image', (node) => { node.data.hProperties = node.data.hProperties || {}; node.data.hProperties.width = "100"; node.data.hProperties.height = "100"; }); };}Пока только для Markdown; поддержка MDX планируется в будущем.
Bug Fixes
Как обычно, в релизе есть дополнительные исправления. Release notes.
