Учебник Nuxt для начинающих
Полный премиум-курс по Nuxt — мета-фреймворку над Vue, который превращает библиотеку для интерфейсов в полноценный фулстек-инструмент. Вы пройдёте путь от понимания серверного рендеринга до выката готового приложения в продакшен.
Сначала разберёмся, чем SSR отличается от SPA и как работает гидратация, затем освоим файловую маршрутизацию: динамические роуты, макеты и middleware. Дальше — компоненты и composables, обмен данными через props и события, SSR-безопасное состояние useState. Отдельный раздел посвящён получению данных: useFetch, useAsyncData и $fetch — когда какой нужен и как избежать двойных запросов.
Затем превратим Nuxt в фулстек: напишем серверный API на движке Nitro, разберём HTTP-методы, валидацию и безопасность. Финал — SEO через useSeoMeta, гибридный рендеринг через routeRules и деплой с пресетами Nitro на Node, Vercel или Netlify. Каждый урок снабжён ASCII-схемами и запускаемыми JS-врезками, моделирующими внутреннюю механику Nuxt.
Курс «Nuxt: фулстек на Vue» состоит из 6 разделов и 23 уроков: Введение: Nuxt, SSR и SPA, Страницы и маршрутизация, Компоненты и composables, Данные: useFetch и useAsyncData, Server API и Nitro и Деплой и SEO. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение: Nuxt, SSR и SPA
- Что такое Nuxt и зачем он Vue
Что такое Nuxt — мета-фреймворк над Vue: SSR, файловая маршрутизация, авто-импорты и Nitro. Зачем брать Nuxt вместо чистого Vue.
- SSR против SPA: два мира рендеринга
SSR против SPA в Nuxt: где рендерится HTML, как это влияет на скорость первой отрисовки, SEO и нагрузку. ASCII-схема потока запроса.
- Гидратация: как оживает страница
Гидратация в Nuxt: как сервер передаёт состояние клиенту через payload, что такое hydration mismatch и почему он ломает страницу.
- Структура проекта Nuxt
Структура Nuxt-проекта: папки pages, components, composables, server, layouts, plugins и файл nuxt.config. Соглашения вместо конфигурации.
- Что такое Nuxt и зачем он Vue
2 Страницы и маршрутизация
- Файловая маршрутизация: pages в роуты
Файловая маршрутизация Nuxt: как файлы в pages превращаются в URL, index.vue, вложенные папки и NuxtPage. ASCII-схема pages -> роуты.
- Динамические маршруты и параметры
Динамические маршруты Nuxt: квадратные скобки [id], useRoute и params, catch-all [...slug]. Один шаблон для тысяч страниц.
- Макеты (layouts) и навигация
Layouts в Nuxt: общая шапка и подвал через default.vue и slot, выбор макета через definePageMeta, переходы по NuxtLink без перезагрузки.
- Middleware: проверки перед переходом
Route middleware в Nuxt: defineNuxtRouteMiddleware, navigateTo и abortNavigation для защиты страниц, глобальные и именованные middleware.
- Файловая маршрутизация: pages в роуты
3 Компоненты и composables
- Авто-импорт компонентов и функций
Авто-импорты Nuxt: компоненты из components и функции из composables доступны без import, правила именования по папкам, плюсы и грабли.
- Props, события и v-model
Обмен данными между компонентами Nuxt и Vue: props вниз через defineProps, события вверх через defineEmits и emit, двусторонняя связь v-model.
- Composables: переиспользуемая логика
Composables в Nuxt: вынос логики в функции useXxx с собственным реактивным состоянием через ref и computed, паттерн замыкания, авто-импорт.
- useState: общее состояние с SSR
useState в Nuxt: SSR-совместимое общее состояние с ключом, почему обычный ref модуля опасен на сервере, передача состояния в payload.
- Авто-импорт компонентов и функций
4 Данные: useFetch и useAsyncData
- useFetch: данные без двойных запросов
useFetch в Nuxt: загрузка данных при SSR без двойного запроса, состояния data/pending/error, передача результата через payload.
- useAsyncData: гибкая загрузка
useAsyncData в Nuxt: когда нужен вместо useFetch — несколько источников, SDK, трансформация ответа; ключ кеша, transform и lifecycle.
- $fetch: запросы по событиям
$fetch в Nuxt: императивные запросы по событиям (отправка формы, кнопка), почему его нельзя звать в setup при SSR, мутации POST.
- Загрузка, ошибки и обновление данных
Управление загрузкой данных в Nuxt: pending/status, error и createError, refresh для перезапроса, lazy и watch для реактивных параметров.
- useFetch: данные без двойных запросов
5 Server API и Nitro
- Server routes и Nitro: бэкенд внутри Nuxt
Server routes в Nuxt: папка server/api, defineEventHandler, авто-префикс /api, движок Nitro как встроенный бэкенд для фулстека.
- HTTP-методы и динамические эндпоинты
HTTP-методы в server routes Nuxt: суффиксы .get/.post/.delete, динамические параметры [id] и getRouterParam, чтение тела через readBody.
- Серверное middleware, валидация и безопасность
Безопасность server routes Nuxt: серверное middleware из server/middleware, валидация входных данных, секреты через runtimeConfig, статусы ошибок.
- Server routes и Nitro: бэкенд внутри Nuxt
6 Деплой и SEO
- SEO в Nuxt: useSeoMeta и useHead
SEO в Nuxt: управление title и meta-тегами через useSeoMeta и useHead, Open Graph для соцсетей, динамические мета-теги на серверном рендере.
- Стратегии рендеринга: SSR, SSG, ISR и routeRules
Стратегии рендеринга Nuxt: SSR, статика SSG (prerender), ISR и SWR через routeRules, выбор режима на каждый маршрут отдельно.
- Конфигурация, переменные окружения и оптимизация
Конфигурация Nuxt перед деплоем: nuxt.config и runtimeConfig, переменные окружения и .env, public vs приватные, оптимизация бандла и lazy-компоненты.
- Сборка и деплой: от .output до прода
Деплой Nuxt: nuxt build и папка .output, режим Node-сервера против статики nuxt generate, пресеты Nitro под Vercel/Netlify/Node, проверка прода.
- SEO в Nuxt: useSeoMeta и useHead