Гайд по Astro 3.0: от статических страниц до полнофункционального SSR

freeCodeCamp.org 178 тыс. 1 ч 16 мин 4 мин 29.09.2023
Главное

Веб-разработка переживает ренессанс фреймворков, ориентированных на производительность, и Astro занимает в этом процессе центральное место. В рамках подробного обучающего курса от freeCodeCamp.org популярный инструктор и спикер Джеймс Кью Квик (James Q Quick) разбирает возможности Astro 3.0. По его мнению, это один из самых захватывающих инструментов для создания быстрых сайтов с акцентом на контент: блогов, лендингов и технической документации.

🚀 Начало работы и философия Astro 0:00

Astro позиционируется как универсальный фреймворк «all-in-one». Основная идея заключается в том, чтобы доставлять пользователю как можно меньше JavaScript, обеспечивая при этом высокую скорость загрузки . Джеймс Квик подчеркивает, что Astro идеально подходит для сайтов, где контент превалирует над сложной интерактивностью.

Для старта проекта рекомендуется использовать команду:

Критически важным техническим требованием является версия Node.js. Автор напоминает, что для работы установщика Astro версии 3 требуется Node.js 18 или выше . Для управления версиями он рекомендует использовать NVM (Node Version Manager). При создании проекта Houston (маскот Astro) предложит выбрать шаблон: пустой, с примерами файлов или готовый блог .

📂 Структура проекта и магия .astro файлов 6:51

Структура Astro проекта интуитивно понятна тем, кто работал с современными JS-фреймворками, но имеет свои особенности:

Ключевой элемент системы — компоненты с расширением .astro. Они состоят из двух частей:

  1. Code Fence (Frontmatter): блок между тройными тире ---, где пишется JavaScript или TypeScript. Этот код выполняется только на сервере во время сборки или запроса .
  2. HTML-шаблон: идет сразу после блока JavaScript.

Джеймс объясняет концепцию «слотов» (<slot />) в макетах (layouts). Это механизм инъекции контента страницы внутрь общей оболочки (шапки, подвала) . Также Astro поддерживает типизацию пропсов (props) через интерфейсы TypeScript, что делает разработку более предсказуемой .

🎨 Стилизация и интеграция Tailwind CSS 10:24

По умолчанию стили в Astro-компонентах изолированы (scoped). Это означает, что CSS, написанный внутри компонента, не затронет другие части сайта . Однако для глобальных стилей предусмотрена директива is:global.

Джеймс Квик отдает предпочтение Tailwind CSS и демонстрирует, насколько просто интегрировать сторонние инструменты в Astro с помощью встроенных команд :

📚 Коллекции контента: лучший способ управления данными 27:53

Одной из самых мощных функций Astro, по мнению Джеймса, являются Content Collections (Коллекции контента). Это строго типизированный способ управления локальными Markdown или MDX файлами .

Процесс настройки выглядит так:

  1. Файлы создаются в src/content/[название_коллекции]/.
  2. В файле src/content/config.ts описывается схема данных с использованием библиотеки Zod .
  3. Zod позволяет проверять наличие обязательных полей (автор, дата, заголовок) и типов данных прямо на этапе разработки .

Джеймс утверждает, что это лучший опыт работы с контентом, который он когда-либо видел на любой платформе . Для получения данных используется функция getCollection(), которая возвращает массив объектов с данными фронтматтера и содержимым .

🛠 Динамические маршруты и рендеринг контента 41:04

Для создания страниц под каждый пост в блоге используются динамические маршруты. Файл с названием вида [slug].astro позволяет генерировать страницы на лету .

Основные этапы:

  1. getStaticPaths(): функция, которая сообщает Astro, какие именно страницы нужно сгенерировать заранее .
  2. render(): метод для преобразования Markdown в HTML-компонент .

Для оформления текста из Markdown автор советует плагин Tailwind CSS Typography. После его установки достаточно добавить класс prose к обертке контента, чтобы заголовки, списки и цитаты автоматически получили красивые стили .

🖼 Оптимизация изображений и View Transitions 48:13

Astro включает мощный компонент <Image /> для автоматической оптимизации. Вместо стандартного тега <img> Джеймс рекомендует использовать его, так как он :

Интересной фишкой версии 3.0 стала поддержка View Transitions API. Добавление всего одной строки кода — компонента <ViewTransitions /> в head макета — позволяет создавать плавные анимации перехода между страницами, имитируя поведение одностраничного приложения (SPA) .

🌐 SSG против SSR: когда переходить на сервер 59:31

По умолчанию Astro работает как генератор статических сайтов (SSG). Весь HTML создается во время сборки и развертывается на CDN . Однако фреймворк поддерживает и серверный рендеринг (SSR).

Различия по мнению автора:

Для включения SSR в конфиге нужно изменить параметр output: 'server' и добавить адаптер для хостинга (Netlify или Vercel) . Также возможен гибридный режим, где часть страниц статические, а часть — динамические .

🛡 API-роуты и аутентификация 1:09:03

Astro позволяет создавать полноценные API-эндпоинты. Если создать файл .ts в папке pages, он будет работать как обработчик запросов GET, POST и других .

Джеймс демонстрирует создание POST-запроса, который принимает JSON и возвращает данные обратно. По словам гостя, это открывает двери для создания полнофункциональных приложений с аутентификацией, где сессии пользователей отслеживаются через куки . В своем полном курсе он показывает интеграцию с базой данных Xata для хранения профилей пользователей.

💬 Цитаты

«Astro — это универсальный веб-фреймворк для создания быстрых сайтов, ориентированных на контент.»

Джеймс Кью Квик 00:00

«Коллекции контента — это, на мой взгляд, лучший опыт работы с контентом (Markdown/MDX), который я когда-либо видел.»

Джеймс Кью Квик 29:00
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Frontmatter
Блок метаданных в начале файла (обычно Markdown или Astro), ограниченный тройными тире.
SSR (Server-Side Rendering)
Метод отрисовки веб-страниц на сервере в момент запроса пользователя.
SSG (Static Site Generation)
Процесс создания HTML-страниц во время сборки проекта, а не во время запроса.
Zod
Библиотека для декларативного описания и валидации схем данных в TypeScript.
Slug
Часть URL-адреса, которая идентифицирует конкретную страницу в человекочитаемом виде.
📊 Цифры
🗓 Хронология
  1. Сентябрь 2023 Выход версии Astro 3.0, которая обсуждается в данном курсе.
⚖️ Другая сторона
Технологии и IT Astro JavaScript Tailwind CSS SSR Content Collections