Что такое Nuxt 3
▸Определение
Nuxt 3 — это Vue-фреймворк для создания SSR/SSG приложений. Онпредоставляет файловую маршрутизацию, автоматический импорт компонентов и множество функций из коробки.
Установка
1npx nuxi init my-app2cd my-app3npm install4npm run dev
Файловая маршрутизация
▸Структура pages
1pages/2 index.vue -> /3 about.vue -> /about4 blog/5 index.vue -> /blog6 [slug].vue -> /blog/:slug
▸Динамические маршруты
1<!-- pages/blog/[slug].vue -->2<script setup>3const route = useRoute();4const slug = route.params.slug;5</script>
▸Вложенные маршруты
1pages/2 dashboard/3 index.vue -> /dashboard4 settings.vue -> /dashboard/settings5 profile/6 index.vue -> /dashboard/profile
Серверный рендеринг (SSR)
▸Как работает SSR
Nuxt рендерит компоненты на сервере и отправляет готовый HTML на клиент. Это улучшает SEO и начальную загрузку.
▸useFetch
1<script setup>2const { data: posts } = await useFetch('/api/posts');3</script>
▸useAsyncData
1<script setup>2const { data, pending, error } = await useAsyncData('posts', () =>3 $fetch('/api/posts')4);5</script>
Статическая генерация (SSG)
▸Конфигурация
1// nuxt.config.ts2export default defineNuxtConfig({3 ssr: true,4});
▸Генерация
1npm run generate
▸Динамические маршруты в SSG
1// server/routes/api/posts.js2export default defineEventHandler(() => {3 return ['post-1', 'post-2', 'post-3'];4});56// pages/blog/[slug].vue7<script setup>8const route = useRoute();9const { data: post } = await useFetch(`/api/posts/${route.params.slug}`);10</script>
Auto-imports
▸Компоненты
1<template>2 <MyComponent />3</template>4<!-- Автоматически импортируется из components/MyComponent.vue -->
▸Composables
1// composables/useCounter.js2export const useCounter = () => {3 const count = ref(0);4 const increment = () => count.value++;5 return { count, increment };6};78// Доступно без импорта!9<script setup>10const { count, increment } = useCounter();11</script>
Layouts
▸Определение layouts
1layouts/2 default.vue3 admin.vue
▸Использование
1<!-- pages/dashboard.vue -->2<template>3 <NuxtLayout name="admin">4 <p>Содержимое страницы</p>5 </NuxtLayout>6</template>
Middleware
▸Route middleware
1// middleware/auth.js2export default defineNuxtRouteMiddleware((to, from) => {3 const isAuthenticated = useAuth().isAuthenticated;4 if (to.meta.requiresAuth && !isAuthenticated) {5 return navigateTo('/login');6 }7});
▸Применение
1<script setup>2definePageMeta({3 middleware: 'auth',4});5</script>
Server API
▸Определение
1// server/api/users.get.js2export default defineEventHandler(async () => {3 const users = await db.user.findMany();4 return users;5});
▸POST запросы
1// server/api/users.post.js2export default defineEventHandler(async (event) => {3 const body = await readBody(event);4 const user = await db.user.create({ data: body });5 return user;6});
Plugins
▸Определение
1// plugins/axios.js2export default defineNuxtPlugin((nuxtApp) => {3 const axios = { /* ... */ };4 nuxtApp.provide('axios', axios);5});
▸Использование
1<script setup>2const { $axios } = useNuxtApp();3</script>
Middleware для API
1// server/middleware/log.js2export default defineEventHandler((event) => {3 console.log(`[${event.method}] ${event.path}`);4});
Деплой
▸Vercel
1npx vercel
▸Netlify
1npx netlify deploy
▸Docker
1FROM node:18-alpine2WORKDIR /app3COPY . .4RUN npm run build5CMD ["npm", "run", "start"]
Заключение
Nuxt 3 — это мощный фреймворк для SSR/SSG Vue-приложений. Автоматические импорты, файловая маршрутизация, server API и middleware делают разработку быстрой и удобной. Для SEO-зависимых проектов Nuxt — лучший выбор.