Nuxt

Nuxt
Тип свободное и открытое программное обеспечение, JavaScript-фреймворк и веб-фреймворк
Написана на JavaScript и Vue.js
Операционная система кроссплатформенность
Последняя версия
Репозиторий github.com/nuxt/nuxt
Лицензия лицензия MIT
Сайт nuxt.com (англ.)
github.com/nuxt/n…

Nuxt — бесплатная с открытым исходным кодом библиотека JavaScript, основанная на Vue.js, Nitro и Vite. Nuxt вдохновлён Next.js[2], который является схожим фреймворком, основанным на React, а не на Vue.

Главное преимущество Nuxt по сравнению с использованием только Vue заключается в поддержке универсального рендеринга. Фреймворк способен работать и как одностраничное приложение (SPA) в браузере, и как статический веб-сайт, предварительно отрисованный на сервере, когда после загрузки страницы происходит её гидратации, превращая серверный HTML в полноценное SPA. Это позволяет веб-сайтам сочетать преимущества поисковой оптимизации (SEO) и производительности серверного рендеринга с интерактивностью клиентского приложения[3][4]. Nuxt в значительной степени абстрагирует от разработчика особенности серверного рендеринга, благодаря чему опыт разработки становится похожим на создание традиционного SPA с использованием системы однофайловых компонентов (SFC) Vue[5].

Помимо своей флагманской технологии универсального рендеринга, Nuxt также предоставляет множество других преимуществ и удобств для разработки, таких как маршрутизация на основе путей, горячая замена модулей (HMR), встроенная поддержка TypeScript, а также middleware и серверная логика[6].

Возможности

Маршрутизация на основе путей

В отличие от обычного приложения на Vue.js, где, как правило, каждый маршрут необходимо регистрировать вручную, Nuxt использует маршрутизацию на основе путей для автоматической регистрации всех маршрутов в приложении[7].

Страницы объявляются в папке pages/, где имя файла страницы становится именем маршрута. Динамические параметры можно добавлять с помощью квадратных скобок, а маршруты «catch-all» (перехватывающие все остальные пути) — с помощью трёх точек и квадратных скобок, подобно синтаксису spread-оператора в JavaScript[8].

  • /pages/about.vue — соответствует маршруту /about.
  • /pages/user/[id].vue — соответствует всем маршрутам непосредственно под /user.
  • /pages/posts/[...slug].vue — соответствует всем маршрутам под /posts.
  • /pages/admin/[[page]].vue — соответствует /admin, а также всем маршрутам непосредственно под ним.

Автоматический импорт

Nuxt автоматически импортирует большинство функций Composition API из Vue, а также любые вспомогательные функции из папок composables/ и utils/[9].

<script setup>
    // ref импортируется автоматически
    const count = ref(0);
    // useRoute также импортируется автоматически
    const route = useRoute();
</script>

<template>
    <span>{{ count }}</span>
</template>

Макеты

Nuxt из коробки поддерживает макеты (layouts), совместимые с SSR, что позволяет схожим страницам использовать одни и те же базовые шаблоны, например, для шапки и подвала сайта. Макеты объявляются в папке layouts/ и работают с использованием нативных слотов Vue.

Чтобы включить макеты в проекте Nuxt, точка входа приложения, app.vue, должна содержать компонент NuxtLayout для переключения между макетами для каждой страницы[10].

<!-- пример содержимого файла app.vue -->
<template>
    <NuxtLayout>
        <NuxtPage />
    </NuxtLayout>
</template>

Макет по умолчанию находится в файле layouts/default.vue и должен содержать слот для контента страницы.

<!-- пример содержимого файла макета -->
<template>
    <CustomNavbar />
    <slot />
    <CustomFooter />
</template>

Страница может использовать пользовательский макет с помощью вспомогательной функции definePageMeta в функции или блоке `setup`[11].

<script setup>
definePageMeta({
    layout: "custom",
});
</script>

<template>
    <!-- этот контент теперь заполнит слот пользовательского макета -->
</template>

Middleware

Nuxt добавляет в приложения поддержку middleware, что позволяет выполнять серверную логику между переходами по страницам. Поддерживаются как глобальные, так и специфичные для отдельных страниц файлы middleware[12].

Middleware объявляется в папке middleware/ и представляет собой экспортируемую функцию, которая принимает в качестве параметров текущий и предыдущий маршруты. Из этой функции можно использовать глобально доступные вспомогательные функции, такие как abortNavigation и navigateTo, для управления навигацией[13][14].

export default defineNuxtMiddleware((to, from) => {
    // логика навигации
    if (to.params.id === "0")
        return abortNavigation(); // прервать навигацию
    return navigateTo(`/users/${to.params.id}`); // перейти на другую страницу
});

Серверный API

Nuxt также может генерировать маршруты и обработчики для серверного API, используя папку server/. Любой файл, размещённый в server/api, станет маршрутом API, а любой файл в server/routes — файлом маршрута (разница в том, что server/api добавляет префикс `api` к пути)[15].

// server/api/hello.ts
export default defineEventHandler((event) => {
    return {
        some: "data here",
    };
});

Теперь этот API можно вызывать из компонентов с помощью композиционной функции useFetch.

<script setup>
const { data } = await useFetch('/api/hello')
</script>

<template>
  <pre>{{ data }}</pre>
</template>

См. также

Примечания

  1. Release 4.2.2 — 2025.
  2. Nuxt First Public Release (амер. англ.). Npm. Дата обращения: 23 марта 2017.
  3. Omole, Olayinka. Nuxt: A Universal Vue.js Application Framework (амер. англ.). Sitepoint (18 марта 2019). Дата обращения: 18 июня 2020.
  4. Berning, Dave. Getting Started with Server-Side Rendering Using Nuxt (амер. англ.). Alligator.io (16 апреля 2018). Дата обращения: 2 июля 2018.
  5. Vue.js Development · Nuxt Concepts (англ.). Nuxt. Дата обращения: 9 февраля 2025.
  6. Introduction · Get Started with Nuxt (англ.). Nuxt. Дата обращения: 9 февраля 2025.
  7. Routing · Get Started with Nuxt (англ.). Nuxt. Дата обращения: 6 марта 2025.
  8. pages/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025. Архивировано 19 августа 2023 года.
  9. Auto-imports · Nuxt Concepts (англ.). Nuxt. Дата обращения: 6 марта 2025.
  10. Views · Get Started with Nuxt (англ.). Nuxt. Дата обращения: 6 марта 2025.
  11. layouts/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025.
  12. middleware/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025.
  13. abortNavigation · Nuxt Utils (англ.). Nuxt. Дата обращения: 6 марта 2025.
  14. navigateTo · Nuxt Utils (англ.). Nuxt. Дата обращения: 6 марта 2025.
  15. server/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025.

Ссылки