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>
См. также
Примечания
- ↑ Release 4.2.2 — 2025.
- ↑ Nuxt First Public Release (амер. англ.). Npm. Дата обращения: 23 марта 2017.
- ↑ Omole, Olayinka. Nuxt: A Universal Vue.js Application Framework (амер. англ.). Sitepoint (18 марта 2019). Дата обращения: 18 июня 2020.
- ↑ Berning, Dave. Getting Started with Server-Side Rendering Using Nuxt (амер. англ.). Alligator.io (16 апреля 2018). Дата обращения: 2 июля 2018.
- ↑ Vue.js Development · Nuxt Concepts (англ.). Nuxt. Дата обращения: 9 февраля 2025.
- ↑ Introduction · Get Started with Nuxt (англ.). Nuxt. Дата обращения: 9 февраля 2025.
- ↑ Routing · Get Started with Nuxt (англ.). Nuxt. Дата обращения: 6 марта 2025.
- ↑ pages/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025. Архивировано 19 августа 2023 года.
- ↑ Auto-imports · Nuxt Concepts (англ.). Nuxt. Дата обращения: 6 марта 2025.
- ↑ Views · Get Started with Nuxt (англ.). Nuxt. Дата обращения: 6 марта 2025.
- ↑ layouts/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025.
- ↑ middleware/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025.
- ↑ abortNavigation · Nuxt Utils (англ.). Nuxt. Дата обращения: 6 марта 2025.
- ↑ navigateTo · Nuxt Utils (англ.). Nuxt. Дата обращения: 6 марта 2025.
- ↑ server/ · Nuxt Directory Structure (англ.). Nuxt. Дата обращения: 6 марта 2025.
Ссылки
- nuxt.com (англ.) — официальный сайт Nuxt
- Проект Nuxt на сайте GitHub