Astro 5.13

Автор
Sarah Rainsberger
Emanuele Stoppa

🍀 Astro 5.13: экспериментальные улучшения env variables, поддержка Chrome DevTools workspaces и многое другое!

В стартовом составе:

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

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

Experimental static import.meta.env

Переменные окружения сложны! astro:envтипобезопасная схема. Можно также process.env и import.meta.env — единственный способ до Astro 5.0, с логикой для старых версий.

Astro 5.13: флаг experimental.staticImportMetaEnv — поведение import.meta.env как у Vite. Заменяет rawEnvVariables. Станет дефолтом в Astro 6.0.

Сейчас непубличные import.meta.env заменяются на process.env; Astro может приводить типы ("true" → boolean). Флаг упрощает: без замены на process.env, без coercion — private vars всегда inline.

astro.config.mjs
import { defineConfig } from "astro/config";
export default defineConfig({
experimental: {
staticImportMetaEnv: true,
rawEnvValues: true
}
});

experimental static import.meta.env documentation. environment variables documentation.

Experimental Chrome DevTools workspace support

Chrome workspace folders сохраняют изменения из DevTools в код проекта — CSS без выхода из браузера!

Astro 5.13: chromeDevtoolsWorkspace — автоконфигурация workspace для проекта. Папка проекта как источник — подключите и редактируйте в Sources, сохраняется локально.

astro.config.mjs
import { defineConfig } from 'astro/config';
export default defineConfig({
experimental: {
chromeDevtoolsWorkspace: true
}
});

Chrome DevTools workspace feature documentation.

Multiple sitemaps

@astrojs/sitemap включал внешние страницы в sitemap-index.xml. Новая опция customSitemaps — внешние sitemap вместе с Astro-generated entries.

Полезно для multi-framework на одном домене (example.com/blog/sitemap.xml от другого фреймворка):

astro.config.mjs
import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';
export default defineConfig({
site: 'https://example.com',
integrations: [
sitemap({
customSitemaps: [
'https://example.com/blog/sitemap.xml',
'https://example.com/helpcenter/sitemap.xml'
]
})
]
});

@astrojs/sitemap configuration.

Спасибо Gourav Khunger!

Experimental hosted error pages

@astrojs/node@9.4.0: экспериментальная загрузка пререндеренных custom error pages с любого хоста.

По умолчанию Astro загружает 404 с того же хоста, что и запрос. experimentalErrorPageHost — когда error page на другом хосте (reverse proxy, container):

astro.config.mjs
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
export default defineConfig({
adapter: node({
experimentalErrorPageHost: 'http://localhost:4321'
})
});

@astrojs/node adapter docs.

Enum support in Astro DB tables

({ enum: ['happy', 'thrilled', 'over the moon'] }) — enum для text columns в Astro DB. Только для типов, без runtime validation.

astro.config.mjs
import { column, defineTable } from 'astro:db';
const UserTable = defineTable({
columns: {
id: column.number({ primaryKey: true }),
name: column.text(),
rank: column.text({ enum: ['user', 'mod', 'admin'] })
}
});
type UserTableInferInsert = {
id?: string;
name: string;
rank: "user" | "mod" | "admin";
}

Local support for Cloudflare KV

Cloudflare adapter: локальная поддержка Cloudflare Workers KV в astro dev. Drop-in для sessions. Можно подключить remote KV Namespace для production data в dev.

Bug fixes

С релиза 5.12changelog.

Community

Команда Astro:

Alexander Niebuhr, Ben Holmes, Caleb Jasik, Chris Swithinbank, Emanuele Stoppa, Erika, Florian Lefebvre, Fred Schott, Fuzzy, HiDeoo, Luiz Ferraz, Matt Kane, Matthew Phillips, Nate Moore, Reuben Tier, Sarah Rainsberger, and Yan Thomas

Спасибо Adam Matthiesen, Adrian Sieradzki, Aidan McAlister, Ariel K, Armand Philippot, Azushii, benosmac, Bjorn Lu, Brandon Ly, Brian Birtles, casungo, chaegumi, Coding in Public, ColoredCarrot, David Boyne, DNEK, Felix Schneider, Feng Yu, Gourav Khunger, Jacob Jenkins, Jacob Pretorius, Jat, Jonas Geiler, Junseong Park, Kayla Akyüz, Kian, knj, Kyosuke Nakamura, LEF, Louis Escher, Luke Eades, Martin Trapp, Mateusz Bocian, Matthew Justice, Michal Piechowiak, Oliver Speir, Paul Valladares, Pier Bover, pioupia, Rezix, Sebastian Beltran, Shinya Fujino, Souleimane Konate, Thomas Bonnet, Tiago Vilela, and vrabe