Обновление до Astro v4
Это руководство поможет вам перейти с Astro v3 на Astro v4.
Вам нужно обновить старый проект до v3? Смотрите наше руководство по миграции старых проектов.
Нужно посмотреть документацию по v3? Посетите этот сайт старая версия документации (не поддерживаемый снимок v3.6).
Обновление Astro
Заголовок раздела Обновление AstroОбновите версию Astro и всех официальных интеграций вашего проекта до последних версий с помощью менеджера пакетов.
# Обновление Astro и официальных интеграцийnpx @astrojs/upgrade
# Обновление Astro и официальных интеграцийpnpm dlx @astrojs/upgrade
# Обновление Astro и официальных интеграцийyarn dlx @astrojs/upgrade
Вы также можете обновить свои интеграции Astro вручную, если это необходимо, и вам также может понадобиться обновить другие зависимости в вашем проекте.
После обновления Astro до последней версии вам может не потребоваться вносить какие-либо изменения в ваш проект!
Но если вы заметите ошибки или неожиданное поведение, пожалуйста, проверьте ниже, что изменилось и что может потребовать обновления в вашем проекте.
Astro v4.0 включает потенциально разрушающие изменения, а также удаление некоторых ранее устаревших функций.
Если после обновления до версии 4.0 ваш проект работает не так, как ожидалось, ознакомьтесь с этим руководством, чтобы получить обзор всех изменений и инструкции по обновлению вашей кодовой базы.
Полную информацию о выпуске смотрите в журнале изменений.
Удалены экспериментальные флаги Astro v4.0
Заголовок раздела Удалены экспериментальные флаги Astro v4.0Удалите экспериментальный флаг devOverlay
и переместите любую конфигурацию i18n
на верхний уровень в astro.config.mjs
:
import { defineConfig } from 'astro/config';
export default defineConfig({ experimental: { devOverlay: true, i18n: { defaultLocale: "en", locales: ["en", "fr", "pt-br", "es"], } }, i18n: { defaultLocale: "en", locales: ["en", "fr", "pt-br", "es"], },})
Эти конфигурации, i18n
и переименованная devToolbar
, теперь доступны в Astro v4.0.
Подробнее об этих двух интересных функциях и многом другом читайте в посте v4.0 в Блоге!
Обновления
Заголовок раздела ОбновленияЛюбые крупные обновления зависимостей Astro могут привести к изменениям в вашем проекте.
Обновлено: Vite 5.0
Заголовок раздела Обновлено: Vite 5.0В Astro v3.0 Vite 4 использовался в качестве сервера разработки и производственного бандлера.
Astro v4.0 переходит с Vite 4 на Vite 5.
Что делать?
Заголовок раздела Что делать?Если вы используете специфические для Vite плагины, конфигурации или API, проверьте руководство по миграции Vite на наличие изменений и обновите свой проект при необходимости. В самом Astro никаких изменений нет.
Обновлено: зависимости unified, remark и rehype
Заголовок раздела Обновлено: зависимости unified, remark и rehypeВ Astro v3.x для обработки Markdown и MDX использовался unified v10 и связанные с ним совместимые пакеты remark/rehype.
Astro v4.0 обновляет unified до v11 и другие пакеты remark/rehype до последней версии.
Что делать?
Заголовок раздела Что делать?Если вы использовали пользовательские пакеты remark/rehype, обновите их до последней версии с помощью менеджера пакетов, чтобы убедиться, что они поддерживают unified v11. Используемые вами пакеты можно найти в файле astro.config.mjs
.
При использовании активно обновляемых пакетов не должно произойти никаких существенных изменений, но некоторые пакеты могут быть еще не совместимы с unified v11. Перед развертыванием визуально проверьте свои Markdown/MDX-страницы, чтобы убедиться, что ваш сайт работает так, как нужно.
Разрушающие изменения
Заголовок раздела Разрушающие измененияСледующие изменения считаются разрушающими изменениями в Astro. Разрушающие изменения могут обеспечивать или не обеспечивать временную обратную совместимость, и вся документация обновляется, чтобы ссылаться только на текущий, поддерживаемый код.
Если вам нужно обратиться к документации по проекту v3.x, вы можете просмотреть этот (не поддерживаемый) снимок документации до выхода v4.0.
Переименовано: entrypoint
(API интеграций)
Заголовок раздела Переименовано: entrypoint (API интеграций)В Astro v3.x свойство API интеграций injectRoute
, указывающее точку входа в маршрут, называлось entryPoint
.
В Astro v4.0 это свойство переименовано в entrypoint
, чтобы соответствовать другим API Astro. Свойство entryPoint
устарело, но будет продолжать работать и выводить в журнал предупреждение с предложением обновить код.
Что мне делать?
Заголовок раздела Что мне делать?Если у вас есть интеграции, использующие API injectRoute
, переименуйте свойство entryPoint
в entrypoint
. Если вы автор библиотеки, которая хочет поддерживать и Astro 3, и Astro 4, вы можете указать и entryPoint
, и entrypoint
, и в этом случае предупреждение не будет регистрироваться.
injectRoute({ pattern: '/fancy-dashboard', entryPoint: '@fancy/dashboard/dashboard.astro' entrypoint: '@fancy/dashboard/dashboard.astro'});
Изменено: сигнатура app.render
в API интеграций
Заголовок раздела Изменено: сигнатура app.render в API интеграцийВ Astro v3.0 метод app.render()
принимал routeData
и locals
как отдельные, необязательные аргументы.
В версии Astro v4.0 сигнатура метода app.render()
была изменена. Теперь эти два свойства доступны в одном объекте. Объект и эти два свойства по-прежнему необязательны.
Что делать?
Заголовок раздела Что делать?Если вы поддерживаете адаптер, текущая сигнатура будет работать до следующей основной версии. Чтобы перейти на новую сигнатуру, передавайте routeData
и locals
как свойства объекта, а не как несколько независимых аргументов.
app.render(request, routeData, locals)app.render(request, { routeData, locals })
Изменено: адаптеры теперь должны указывать поддерживаемые функции
Заголовок раздела Изменено: адаптеры теперь должны указывать поддерживаемые функцииВ Astro v3.x от адаптеров не требовалось указывать поддерживаемые ими функции.
Astro v4.0 требует, чтобы адаптеры передавали свойство supportedAstroFeatures{}
для указания списка поддерживаемых ими функций. Это свойство больше не является необязательным.
Что мне делать?
Заголовок раздела Что мне делать?Авторам адаптеров необходимо передавать свойство supportedAstroFeatures{}
, чтобы указать список поддерживаемых ими функций.
export default function createIntegration() { return { name: '@matthewp/my-adapter', hooks: { 'astro:config:done': ({ setAdapter }) => { setAdapter({ name: '@matthewp/my-adapter', serverEntrypoint: '@matthewp/my-adapter/server.js', supportedAstroFeatures: { staticOutput: 'stable' } }); }, }, };}
Удалено: свойство path
языка Shiki
Заголовок раздела Удалено: свойство path языка ShikiВ Astro v3.x язык Shiki, переданный в markdown.shikiConfig.langs
, автоматически преобразовывался в язык, совместимый с Shikiji. Shikiji - это внутренний инструментарий, используемый Astro для подсветки синтаксиса.
В Astro v4.0 удалена поддержка свойства path
для языка Shiki, которое вызывало путаницу при настройке. Оно заменено импортом, который может быть передан в langs
напрямую.
Что делать?
Заголовок раздела Что делать?Вместо этого следует импортировать JSON-файл языка и передать его в опцию.
import customLang from './custom.tmLanguage.json'
export default defineConfig({ markdown: { shikiConfig: { langs: [ { path: '../../custom.tmLanguage.json' }, customLang, ], }, },})
Утратило актуальность
Заголовок раздела Утратило актуальностьСледующие устаревшие функции больше не поддерживаются и не документируются. Пожалуйста, обновите свой проект соответствующим образом.
Некоторые устаревшие функции могут временно продолжать работать, пока не будут полностью удалены. Другие могут не иметь никакого эффекта или выдавать ошибку, побуждающую вас обновить код.
Утратило актуальность: handleForms
для событий submit
Анимаций Переходов
Заголовок раздела Утратило актуальность: handleForms для событий submit Анимаций ПереходовВ Astro v3.x проекты, использующие компонент <ViewTransitions />
, должны были отказаться от обработки событий submit
для элементов form
. Это делалось путем передачи свойства handleForms
.
Astro v4.0 обрабатывает события submit
для элементов form
по умолчанию, когда используются <ViewTransitions />
. Свойство handleForms
было устаревшим и больше не имеет никакого значения.
Что делать?
Заголовок раздела Что делать?Удалите свойство handleForms
из компонента ViewTransitions
. В нем больше нет необходимости.
---import { ViewTransitions } from "astro:transitions";---<html> <head> <ViewTransitions handleForms /> </head> <body> <!-- здесь всякие штуки --> </body></html>