Astro 1.4.0

Автор
Matthew Phillips

Мы выпустили Astro 1.4.0:

Обновление: npm install astro@latest.

Astro.cookies

Пример кода с Astro.cookies

SSR-сайты читают и устанавливают cookies в Astro. Раньше чтение — парсинг заголовка cookie (Astro.request) библиотекой. Запись — сериализация в Set-Cookie.

Учитывая важность cookies в stateful и аутентифицированных приложениях, упрощённая абстракция облегчает работу.

С Astro.cookies чтение и запись через API, похожий на Map. В примере проверяем cookie prefs и задаём значение по умолчанию, затем используем в шаблоне.

См. документацию.

Strict dependency installation

В Astro с pnpm можно установить зависимости strict-алгоритмом. Astro выполняет код от вашего имени — раньше нужно было поднимать пакеты в корень.

Strict-установка корректнее: пакет импортирует только зависимости из своего package.json. И быстрее — Node.js ищет в меньшем числе папок.

Бесплатно в Astro 1.4.0 для новых проектов. Существующие могут убрать hoisting в .npmrc.

Better control over style ordering

В Astro 1.0 scoping перешёл на :where() — контроль специфичности через классы.

Мы не учли порядок стилей: стили в компоненте шли перед импортированными — ниже приоритет, чем у глобальных.

В 1.4.0 стили в Astro-компонентах идут после импортированных глобальных. Пример:

Title.astro

---
import "../styles/global-titles.css"
---
<h1>{Astro.props.title}</h1>
<style>
h1 {
color: aliceblue;
}
</style>

После сборки:

/src/styles/global-titles.css
h1 {
color: onyx;
}
/* /src/components/Title.astro */
h1:where(.astro-1234) {
color: aliceblue;
}

При одинаковой специфичности побеждает поздний селектор — scoped в Title.astro. h1 в компоненте — aliceblue, вне — onyx.

Лучшее из обоих миров: приоритет стилей Astro при равной специфичности, переопределение через большую специфичность.

Порядок CSS (от низшего к высшему):

  1. CSS в public/ как <link> в head.
  2. CSS во frontmatter, по порядку import (depth-first).
  3. CSS в <style> Astro.

Готовим полную документацию по порядку CSS и приоритету.

JSX support in Vue

Пример JSX-компонента на Vue

JSX и TSX с Vue integration. jsx: true включает @vitejs/plugin-vue-jsx со всеми опциями.


Спасибо участникам релиза. Исправления в core и интеграциях. См. release notes.