Лучшие вопросы
Таймлайн
Чат
Перспективы

Nuxt

Из Википедии, свободной энциклопедии

Remove ads

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

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

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

Remove ads

Возможности

Суммиров вкратце
Перспектива

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

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

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

  • /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/[8].

<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 для переключения между макетами для каждой страницы[9].

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

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

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

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

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

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

Middleware

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

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

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` к пути)[14].

// 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>
Remove ads

См. также

Примечания

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads