Мы продолжаем работать над Nitro v3, Nuxt v4 и другими релизами. И рады выпустить Nuxt v3.15 как раз к праздникам.
❄️ Снегопад!
С наступающим! При запуске Nuxt (если вы в Северном полушарии) на экране загрузки появится снег (#29871).
⚡️ Vite 6 в комплекте
В Nuxt v3.15 впервые включён Vite 6. Несмотря на мажорную версию, для пользователей Nuxt это не должен быть breaking change (см. руководство по миграции). Осторожнее с зависимостями, завязанными на конкретную версию Vite.
Одно из главных изменений в Vite 6 — новый Environment API; мы планируем использовать его вместе с Nitro для улучшения серверного dev-окружения. Следите за обновлениями!
Полный список изменений — в changelog Vite 6.
🪵 Улучшения Chromium DevTools
В v3.15 улучшена интеграция в dev-режиме с инструментами разработчика браузеров на Chromium.
Используется Chrome DevTools extensibility API для вывода таймингов хуков Nuxt в панели Performance.
🗺️ Режим navigation для callOnce
callOnce — встроенный composable Nuxt для однократного выполнения кода (например, на сервере — и не повторять на клиенте). Иногда нужно выполнять код при каждой навигации, но без двойного запуска при первой загрузке. Для этого добавлена опция mode: 'navigation': код выполняется один раз за навигацию. (Подробнее: #30260.)
await callOnce(() => counter.value++, { mode: 'navigation' })
🥵 HMR для шаблонов, страниц и метаданных
Включён hot module reload для виртуальных файлов Nuxt (маршруты, плагины, сгенерированные файлы) и для содержимого метаданных страниц в макросе definePageMeta (#30113).
В dev изменения в маршрутах применяются быстрее, без полной перезагрузки страницы.
📋 Расширенные метаданные страниц
Добавлено извлечение дополнительных ключей мета (для авторов модулей) через experimental.extraPageMetaExtractionKeys (#30015) — их можно использовать на этапе сборки в хуке pages:resolved.
В definePageMeta теперь поддерживаются локальные функции (#30241). Например:
function validateIdParam(route) {
return !!(route.params.id && !isNaN(Number(route.params.id)))
}
definePageMeta({
validate: validateIdParam,
})
🔥 Производительность
Манифест приложения предзагружается в браузере, если он нужен при гидрации (#30017).
История vue-router в hash mode вырезается из бандла tree-shaking'ом, если не кастомизирован app/router.options.ts (#30297).
🐣 Подготовка к v4
Несколько изменений по умолчанию для v4: в том числе инлайнятся стили по умолчанию только для Vue-компонентов (#30305).
✅ Обновление
По-прежнему рекомендуем выполнить:
npx nuxi@latest upgrade --force
Команда обновит lockfile и подтянет зависимости Nuxt, в том числе из экосистемы unjs.
Полный список изменений
Большое спасибо всем, кто участвовал в релизе. ❤️
Если есть замечания или проблемы — напишите нам! 🙏