Astro 4.6

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

После короткого перерыва после launch week вышел Astro 4.6 — мы вернулись к обычному графику! В релизе — новая ручная стратегия i18n-маршрутизации, экспериментальная CSRF-защита, новая функция dev toolbar и многое другое.

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

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

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

Manual routing strategy for internationalization

Astro 4.6 представляет ручную стратегию i18n-маршрутизации — полный контроль над маршрутизацией интернационализированного сайта, когда стандартная стратегия не подходит.

Для включения установите i18n.routing в astro.config.mjs в manual:

astro.config.mjs
import { defineConfig } from "astro/config";
export default defineConfig({
i18n: {
locales: ["en", "fr"],
defaultLocale: "fr",
routing: "manual",
},
});

Затем добавьте middleware для обработки маршрутизации:

src/middleware.ts
import { defineMiddleware } from "astro:middleware";
import { redirectToDefaultLocale } from "astro:i18n";
// Example middleware that redirects all requests to the default locale apart for the /about page
export const onRequest = defineMiddleware(async (context, next) => {
if (context.url.startsWith("/about")) {
return next();
} else {
return redirectToDefaultLocale(context, 302);
}
});

Альтернативно — импортируйте логику middleware Astro через новую функцию middleware из astro:i18n и расширяйте стандартную стратегию:

src/middleware.js
import { defineMiddleware, sequence } from "astro:middleware";
import { middleware } from "astro:i18n"; // Astro's own i18n routing middleware
export const userMiddleware = defineMiddleware(() => {
// Your custom middleware logic here
});
export const onRequest = sequence(
userMiddleware,
middleware({
redirectToDefaultLocale: false,
prefixDefaultLocale: true
})
)

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

Ability to move the dev toolbar

Astro 4.6 позволяет перемещать dev toolbar в разные позиции внизу экрана. Полезно, если sticky header перекрывает toolbar, или если хотите другое расположение. Toolbar должен помогать, а не мешать! Спасибо Ming-jun Lu за этот запрошенный вклад!

Experimental: Support for CSRF protection

Astro 4.6 добавляет экспериментальную частичную поддержку CSRF-защиты. Функция под экспериментальным флагом и может измениться в будущих релизах.

Для включения установите experimental.security.csrfProtection в astro.config.mjs:

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

При включении Astro проверяет, что заголовок «origin», передаваемый современными браузерами, совпадает с URL каждого Request. Иначе — ответ 403 Forbidden.

Функция доступна только для страниц с on-demand рендерингом (SSR).

Cookies improvements

Благодаря Farzard хелпер удаления cookies (Astro.cookies.delete) теперь позволяет задавать больше атрибутов cookie, а не только path и domain. Небольшое, но полезное улучшение!

Deprecated support for older versions of Node.js

В соответствии с политикой поддержки Node.js эта версия Astro прекращает поддержку:

  • Node.js 18 ниже 18.17.1
  • Node.js 19 (нечётная версия)
  • Node.js 20 ниже 20.3.0.

Решение принято после взвешенного рассмотрения — мы считаем, что это сделает Astro стабильнее и безопаснее для всех.

Устаревшие версии Node.js можно использовать до следующего major-релиза Astro (v5), но при установке могут появляться предупреждения, а отдельные функции — работать не так, как ожидается.

Bug Fixes

Как обычно, Astro 4.6 включает исправления и улучшения, не вошедшие в этот пост! Полные release notes.