Astro 4.3

Автор
Erika
Emanuele Stoppa
Matthew Phillips
Nate Moore
Bjorn Lu

Доступен Astro 4.3! В релизе — новая экспериментальная i18n-функция, улучшения работы с build output, типами props компонентов, изображениями в Markdown и многое другое.

Основные новинки:

How to upgrade

Чтобы воспользоваться новинками, убедитесь, что у вас последняя версия Astro. Обновитесь до Astro 4.3 командой @astrojs/upgrade:

npx @astrojs/upgrade

или командой вашего менеджера пакетов:

npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

Experimental: Add domain support for i18n

Astro 4.3 добавляет экспериментальную конфигурацию domains для i18n — разные домены или поддомены для разных локалей.

Например: example.com для английского, fr.example.com для французского, example.es для испанского. Включите флаг i18nDomains и сопоставьте локали с доменами через i18n.domains в astro.config.mjs:

astro.config.mjs
import {defineConfig} from "astro/config"
export default defineConfig({
site: "https://example.com",
output: "server", // required, with no prerendered pages
adapter: node({
mode: 'standalone',
}),
i18n: {
defaultLocaLe: 'en',
locales: ['en', 'es', 'pt_BR', 'pt', 'fr'],
domains: {
fr: "https://fr.example.com",
es: "https://example.es"
},
routing: {
prefixDefaultLocale: true,
}
},
experimental: {
i18nDomains: true
},
})

Функция требует полностью server-rendered сайт без prerendered страниц. Сейчас поддерживаются адаптеры @astrojs/node и @astrojs/vercel, совместимость с другими адаптерами в планах!

Подробнее: документация по интернационализации.

More control over your HTML file output

Новая опция build.formatpreserve — даёт больше контроля над HTML-файлами в production-сборке.

Текущие опции (file и directory) либо строят все HTML как файлы по имени маршрута (/about.html), либо как index.html во вложенных папках (/about/index.html). При file нельзя создать отдельные index-страницы (/about/index.html).

Вместо breaking change для file добавлен формат preserve — сохраняет структуру файловой системы в production:

  • about.astroabout.html
  • about/index.astroabout/index.html

Что видите — то и получаете! Лучшая совместимость с веб-серверами со строгими требованиями к структуре файлов.

Подробнее: справочник build.format.

Add ComponentProps type utility

Astro теперь экспортирует утилиту типа ComponentProps из astro/types — тип props Astro-компонента. Аналог React.ComponentProps или ComponentProps в Svelte.

Позволяет ссылаться на Props другого компонента, даже если он не экспортирует этот тип напрямую.

---
import type { ComponentProps } from 'astro/types';
import Button from "./Button.astro";
type MyButtonProps = ComponentProps<typeof Button>;
---

Fix using images in Markdown without a relative specifier

Раньше изображения в Markdown без относительного префикса (./ или ../) вызывали ошибку Astro.

Теперь стандартный синтаксис ![](img.png) работает для изображений в той же папке — относительный префикс не нужен!

Обновлять проект не обязательно — существующие изображения продолжат работать. Можно безопасно убрать относительные префиксы — как и задумано в спецификации Markdown!

![A cute dog](./dog.jpg)
![A cute dog](dog.jpg)
<!-- This dog lives in the same folder as my article! -->

Спасибо Oliver Speir за этот фикс!

Bug Fixes

Как обычно, в релизе есть дополнительные исправления. Release notes.