Экспериментальные возможности

Включите экспериментальные функции Nuxt, чтобы открыть новые возможности

Экспериментальные возможности Nuxt можно включить в конфигурационном файле.

Внутри Nuxt использует @nuxt/schema для определения этих опций. Подробнее — в документации API и в исходном коде.

Эти функции экспериментальные: их могут удалить или изменить в будущих версиях.

alwaysRunFetchOnKeyChange

Запускать ли useFetch при смене ключа, даже если задано immediate: false и запрос ещё не выполнялся.

useFetch и useAsyncData при смене ключа всегда выполняются, если immediate: true или запрос уже был запущен.

По умолчанию флаг выключен; при необходимости его можно включить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    alwaysRunFetchOnKeyChange: true,
  },
})

appManifest

Использовать манифесты приложения, чтобы на клиенте учитывать правила маршрутов.

По умолчанию включено; при необходимости можно отключить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    appManifest: false,
  },
})

asyncContext

Включает нативный асинхронный контекст для вложенных композаблов в Nuxt и Nitro. Так можно вызывать композаблы из асинхронных композаблов и реже получать ошибку «Nuxt instance is unavailable».

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    asyncContext: true,
  },
})
Полное объяснение — в описании PR на GitHub.

asyncEntry

Генерация асинхронной точки входа для пакета Vue — помогает при поддержке федерации модулей.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    asyncEntry: true,
  },
})

externalVue

Выносит vue, @vue/* и vue-router наружу при сборке.

По умолчанию включено; при необходимости можно отключить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    externalVue: false,
  },
})
Скорее всего, эта возможность будет удалена в ближайшем будущем.

extractAsyncDataHandlers

Выносит функции-обработчики из вызовов useAsyncData и useLazyAsyncData в отдельные чанки для лучшего code splitting и кэширования.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    extractAsyncDataHandlers: true,
  },
})

Встроенные обработчики превращаются в динамически импортируемые чанки:

<!-- До -->
<script setup>
const { data } = await useAsyncData('user', async () => {
  return await $fetch('/api/user')
})
</script>
<!-- После преобразования -->
<script setup>
const { data } = await useAsyncData('user', () =>
  import('/generated-chunk.js').then(r => r.default()),
)
</script>

Так логику получения данных можно вынести в отдельный чанк, при этом код подгрузится при необходимости.

Рекомендуется в основном для статических сборок с извлечением payload и когда данные не нужно заново запрашивать в рантайме.

emitRouteChunkError

Вызывает хук app:chunkError при ошибке загрузки чанков Vite/webpack. По умолчанию Nuxt перезагружает новый маршрут при навигации, если чанк не загрузился.

Также по умолчанию выполняется перезагрузка нового маршрута при ошибке чанка при переходе (automatic).

Значение automatic-immediate перезагружает текущий маршрут сразу при ошибке чанка (без ожидания навигации). Это удобно, когда ошибка не связана с переходом, например если не загрузился ленивый компонент. Минус — возможны лишние перезагрузки, если приложению не нужен проблемный чанк.

Автообработку можно отключить (false) или обрабатывать вручную (manual).

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    emitRouteChunkError: 'automatic', // или 'automatic-immediate', 'manual' или false
  },
})

enforceModuleCompatibility

Должен ли Nuxt выбрасывать ошибку (и не загружаться), если модуль несовместим.

По умолчанию выключено.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    enforceModuleCompatibility: true,
  },
})

restoreState

Позволяет восстанавливать состояние приложения из sessionStorage после перезагрузки из-за ошибки чанка или вызова reloadNuxtApp().

Чтобы не ломать гидратацию, применяется только после монтирования Vue-приложения — возможно мерцание при первой загрузке.

Включайте осознанно: возможно неожиданное поведение. Задавайте явные ключи для useState — автогенерируемые ключи могут не совпадать между сборками.
nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    restoreState: true,
  },
})

inlineRouteRules

Задаёт правила маршрута на уровне страницы через defineRouteRules.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    inlineRouteRules: true,
  },
})

Соответствующие правила строятся по path страницы.

Подробнее — в утилите defineRouteRules.
Узнать больше Docs > 3 X > Guide > Concepts > Rendering#hybrid Rendering.

renderJsonPayloads

Рендер JSON payload с поддержкой восстановления сложных типов.

По умолчанию включено; при необходимости можно отключить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    renderJsonPayloads: false,
  },
})

noVueServer

Отключает эндпоинт серверного рендера Vue в Nitro.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    noVueServer: true,
  },
})

parseErrorData

Парсить ли error.data при отрисовке серверной страницы ошибки.

По умолчанию включено; при необходимости можно отключить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    parseErrorData: false,
  },
})

payloadExtraction

Извлечение payload страниц, сгенерированных через nuxt generate.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    payloadExtraction: true,
  },
})

Извлечение payload работает и для маршрутов с ISR (Incremental Static Regeneration) или SWR (Stale-While-Revalidate): CDN могут кэшировать файлы payload вместе с HTML, что ускоряет клиентскую навигацию по кэшированным маршрутам.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    payloadExtraction: true,
  },
  routeRules: {
    // Для этих кэшируемых маршрутов будут сгенерированы файлы payload
    '/products/**': { isr: 3600 },
    '/blog/**': { swr: true },
  },
})

clientFallback

Включает экспериментальный <NuxtClientFallback> для рендера на клиенте при ошибке SSR.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    clientFallback: true,
  },
})

crossOriginPrefetch

Предзагрузка с другого origin через Speculation Rules API.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    crossOriginPrefetch: true,
  },
})
Подробнее о Speculation Rules API.

viewTransition

Интеграция View Transition API с клиентским роутером.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    viewTransition: true,
  },
})
Прочитайте и отредактируйте живой пример в https://stackblitz.com/edit/nuxt-view-transitions?file=app.vue.
Подробнее о View Transition API.

writeEarlyHints

Запись early hints при использовании node-сервера.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    writeEarlyHints: true,
  },
})

componentIslands

Экспериментальные островные компоненты: <NuxtIsland> и файлы .island.vue.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    componentIslands: true, // false или 'local+remote'
  },
})
Узнать больше Docs > 3 X > Directory Structure > Components#server Components.
Дорожная карта серверных компонентов — на GitHub.

localLayerAliases

Разрешает алиасы ~, ~~, @ и @@ внутри слоёв относительно корня и исходников слоя.

По умолчанию включено; при необходимости можно отключить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    localLayerAliases: false,
  },
})

typedPages

Экспериментальный типизированный роутер на базе unplugin-vue-router.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    typedPages: true,
  },
})

Из коробки типизируются navigateTo, <NuxtLink>, router.push() и другое.

Типизированные параметры на странице: const route = useRoute('route-name').

Если вы используете pnpm без shamefully-hoist=true, добавьте unplugin-vue-router в паттерны hoisting в pnpm-workspace.yaml, иначе функция не заработает.
publicHoistPattern:
  - "unplugin-vue-router"

watcher

Альтернативный watcher для сервиса отслеживания файлов Nuxt.

По умолчанию — chokidar-granular: игнорируются верхнеуровневые каталоги вроде node_modules и .git, исключённые из наблюдения.

Можно указать parcel для @parcel/watcher — часто быстрее на больших проектах или Windows.

Или chokidar, чтобы следить за всеми файлами в srcDir.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    watcher: 'chokidar-granular', // также 'chokidar' или 'parcel'
  },
})

sharedPrerenderData

Nuxt автоматически разделяет данные payload между пререндеренными страницами — заметный выигрыш, если на разных страницах useAsyncData / useFetch запрашивают одно и то же.

При необходимости функцию можно отключить.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    sharedPrerenderData: false,
  },
})

Важно, чтобы уникальный ключ данных всегда однозначно соответствовал одним и тем же данным. Например, для данных страницы задайте ключ, отражающий эти данные (useFetch сделает это сам).

// Небезопасно на динамической странице (например `[slug].vue`): slug влияет на данные,
// но Nuxt не видит этого, если ключ это не отражает.
const route = useRoute()
const { data } = await useAsyncData(async (_nuxtApp, { signal }) => {
  return await $fetch(`/api/my-page/${route.params.slug}`, { signal })
})
// Нужен ключ, однозначно идентифицирующий загружаемые данные.
const { data } = await useAsyncData(route.params.slug, async (_nuxtApp, { signal }) => {
  return await $fetch(`/api/my-page/${route.params.slug}`, { signal })
})

clientNodeCompat

Nuxt автоматически полифиллит импорты Node.js в клиентской сборке через unenv.

Чтобы глобалы вроде Buffer работали в браузере, их нужно внедрить вручную.
import { Buffer } from 'node:buffer'

globalThis.Buffer ||= Buffer

scanPageMeta

Раскрывает часть метаданных маршрута из definePageMeta на этапе сборки для модулей: alias, name, path, redirect, props, middleware.

Работает со статическими значениями, строками и массивами, не с переменными и условными присваиваниями. Контекст — в исходной задаче.

По умолчанию метаданные сканируются после регистрации всех маршрутов в pages:extend, затем вызывается хук pages:resolved.

При проблемах в проекте функцию можно отключить.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    scanPageMeta: false,
  },
})

cookieStore

Поддержка CookieStore: слушать обновления cookie (если браузер поддерживает) и обновлять ref из useCookie.

По умолчанию включено; при необходимости можно отключить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    cookieStore: false,
  },
})
Подробнее о CookieStore.

buildCache

Кэширует артефакты сборки Nuxt по хэшу конфигурации и исходников.

Учитываются исходники в пределах srcDir и serverDir для частей Vue/Nitro.

По умолчанию выключено; включение:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    buildCache: true,
  },
})

При включении изменения в перечисленных файлах вызывают полную пересборку:

Структура каталога
.nuxtrc
.npmrc
package.json
package-lock.json
yarn.lock
pnpm-lock.yaml
tsconfig.json
bun.lock
bun.lockb

Любые изменения в srcDir пересобирают клиентский и серверный Vue-бандлы. Nitro всегда пересобирается (ведётся работа над кэшируемыми артефактами Nitro и их хэшами).

Хранится не более 10 tarball-архивов кэша.

checkOutdatedBuildInterval

Интервал (мс) проверки наличия новой сборки. Не используется, если experimental.appManifest равен false.

Значение false отключает проверку.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    checkOutdatedBuildInterval: 3600000, // 1 час, или false
  },
})

extraPageMetaExtractionKeys

Макрос definePageMeta() собирает метаданные страниц на сборке. У Nuxt фиксированный набор ключей для редиректов, алиасов и пользовательских путей.

Эта опция задаёт дополнительные ключи для извлечения при scanPageMeta.

<script lang="ts" setup>
definePageMeta({
  foo: 'bar',
})
</script>
export default defineNuxtConfig({
  experimental: {
    extraPageMetaExtractionKeys: ['foo'],
  },
  hooks: {
    'pages:resolved' (ctx) {
      // ✅ foo доступен
    },
  },
})

Так модули читают дополнительные метаданные из definePageMeta на сборке. В модуле имеет смысл расширить типы NuxtPage.

Ждать один кадр анимации перед навигацией, чтобы браузер успел перерисовать интерфейс после действия пользователя.

Может снизить INP на пререндеренных маршрутах.

По умолчанию включено; при необходимости можно отключить:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    navigationRepaint: false,
  },
})

normalizeComponentNames

Nuxt подстраивает автогенерируемые имена компонентов Vue под полное имя, как при автоимпорте.

При проблемах функцию можно отключить.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    normalizeComponentNames: false,
  },
})

Если имя не задано вручную, Vue берёт имя из файла компонента.

Структура каталога
├─ components/
├─── SomeFolder/
├───── MyComponent.vue

Для Vue имя компонента — MyComponent (<KeepAlive>, DevTools). Для автоимпорта нужно SomeFolderMyComponent.

С experimental.normalizeComponentNames эти значения совпадают, и имя соответствует схеме именования Nuxt.

spaLoadingTemplateLocation

Для клиент-only страницы (ssr: false) опционально показывается экран загрузки из ~/spa-loading-template.html.

within вставляет шаблон так:

<div id="__nuxt">
  <!-- шаблон загрузки SPA -->
</div>

body — шаблон рядом с корнем приложения:

<div id="__nuxt"></div>
<!-- шаблон загрузки SPA -->

Снижает белую вспышку при гидратации клиент-only страницы.

browserDevtoolsTiming

Маркеры производительности для хуков Nuxt в инструментах разработчика: вкладка «Производительность» в Chromium — удобно для отладки.

В режиме разработки по умолчанию включено; при необходимости отключите:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    browserDevtoolsTiming: false,
  },
})
Детали реализации — PR №29922.
Подробнее об API вкладки «Производительность» в Chrome DevTools.

debugModuleMutation

Логирует изменения nuxt.options в контексте модулей — помогает отлаживать правки конфигурации при инициализации.

По умолчанию включено вместе с debug; при необходимости отключите.

Явное включение:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    debugModuleMutation: true,
  },
})
Детали реализации — PR №30555.

lazyHydration

Стратегии гидратации для <Lazy>: откладывают гидратацию до момента, когда компонент реально нужен.

По умолчанию включено; при необходимости отключите:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    lazyHydration: false,
  },
})
Подробнее о ленивой гидратации.

templateImportResolution

Отключает разрешение импортов в шаблонах Nuxt относительно модуля, добавившего шаблон.

По умолчанию Nuxt разрешает импорты в шаблонах относительно этого модуля. false отключает поведение — полезно при конфликтах разрешения.

По умолчанию включено; при необходимости отключите:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    templateImportResolution: false,
  },
})
Детали реализации — PR №31175.

templateRouteInjection

Объект маршрута из автоимпортируемого useRoute() синхронизирован с текущей страницей в <NuxtPage>. Это не так для экспортируемого vue-router useRoute и для $route в шаблонах.

При включении опции подмешивается mixin, чтобы объект $route в шаблоне совпадал с управляемым Nuxt useRoute().

По умолчанию включено; при необходимости отключите:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    templateRouteInjection: false,
  },
})

decorators

Синтаксис декораторов во всём приложении Nuxt/Nitro на базе esbuild.

Раньше TypeScript поддерживал декораторы через compilerOptions.experimentalDecorators — до стандартизации TC39. Сейчас декораторы — предложение Stage 3, в TS 5.0+ без отдельной настройки (см. https://github.com/microsoft/TypeScript/pull/52582 и https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/#decorators).

experimental.decorators включает предложение TC39, а не старую реализацию compilerOptions.experimentalDecorators.

До финального попадания в стандарт JS спецификация может измениться.

Usage

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    decorators: true,
  },
})
app.vue
function something (_method: () => unknown) {
  return () => 'decorated'
}

class SomeClass {
  @something
  public someMethod () {
    return 'initial'
  }
}

const value = new SomeClass().someMethod()
// вернёт 'decorated'

defaults

Значения по умолчанию для ключевых компонентов и композаблов Nuxt.

В будущем, вероятно, переедут, например, в app.config или каталог app/.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    defaults: {
      nuxtLink: {
        componentName: 'NuxtLink',
        prefetch: true,
        prefetchOn: {
          visibility: true,
        },
      },
      useAsyncData: {
        deep: true,
      },
    },
  },
})

purgeCachedData

Очищать ли статические кэши Nuxt и asyncData при навигации по маршрутам.

Nuxt очищает кэш useAsyncData и nuxtApp.static.data — меньше утечек памяти и актуальнее данные; при необходимости отключите.

По умолчанию включено; при необходимости отключите:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    purgeCachedData: false,
  },
})
Детали реализации — PR №31379.

granularCachedData

Вызывать ли и использовать ли результат getCachedData при обновлении данных в useAsyncData и useFetch (через watch, refreshNuxtData() или ручной refresh()).

По умолчанию включено; при необходимости отключите:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    granularCachedData: false,
  },
})
Детали реализации — PR №31373.

headNext

Оптимизации <head>:

  • плагин capo.js для более эффективного порядка тегов в <head>
  • плагин hash hydration для меньшей нагрузки при первой гидратации

По умолчанию включено; при необходимости отключите:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    headNext: false,
  },
})

pendingWhenIdle

Для useAsyncData и useFetch: должен ли pending быть true, пока запрос данных ещё не начался.

По умолчанию выключено; включение:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    pendingWhenIdle: true,
  },
})

entryImportMap

По умолчанию Nuxt стабилизирует чанки через import map для entry-чанда.

В начало <head> вставляется import map:

<script type="importmap">{"imports":{"#entry":"/_nuxt/DC5HVSK5.js"}}</script>

В чанках скриптов от Vite импорты идут из #entry: смена entry не инвалидирует остальные неизменённые чанки.

Nuxt отключает эту возможность, если vite.build.target включает браузер без import maps или если vite.build.rollupOptions.output.entryFileNames не содержит [hash].

Отключение вручную:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    entryImportMap: false,
  },
  // лучше задать целевой браузер для Vite — Nuxt учтёт это
  vite: {
    build: {
      target: 'safari13',
    },
  },
})

typescriptPlugin

Расширенный опыт разработки на TypeScript с модулем @dxup/nuxt.

Улучшенная интеграция TypeScript и инструменты для DX в Nuxt-приложениях.

По умолчанию выключено; включение:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    typescriptPlugin: true,
  },
})
Нужно:
  • установить typescript как зависимость
  • в VS Code использовать версию TypeScript из workspace (документация VS Code)
Подробнее о @dxup/nuxt.

viteEnvironmentApi

Environment API Vite 6 для конфигурации сборки и архитектуры плагинов.

При future.compatibilityVersion: 5 включено по умолчанию; можно включить явно для проверки:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    viteEnvironmentApi: true,
  },
})

Environment API даёт согласованность dev/prod, точнее настраивает окружения и улучшает производительность.

Меняется регистрация и конфигурация плагинов Vite. См. руководство по миграции Environment API.
Подробнее об Environment API Vite.