Don't miss Vue.js Amsterdam in March 2025! Save 10% with code NUXT.
Релиз·  

Nuxt 3.12

Вышел Nuxt 3.12 - полный улучшений и готовящий почву для Nuxt 4!

Мы движемся к релизу Nuxt 4, но при этом мы не задерживаем прогресс и в Nuxt v3.12.

🚀 Тестирование изменений Nuxt 4

Nuxt 4 уже на горизонте, и теперь можно протестировать изменения в поведении, которые появятся в следующем крупном релизе (#26925), установив опцию в вашем файле nuxt.config:

export default defineNuxtConfig({
  future: {
    compatibilityVersion: 4,
  },
})

По мере того как мы объединяли PR для Nuxt 4, мы включали их под этим флагом. Мы стремимся к обратной совместимости насколько это возможно - наша тестовая матрица запускает одни и те же фиксы в режиме совместимости как с v3, так и с v4.

Здесь можно многое рассказать, поскольку 10+ различных PR и изменений поведения задокументированы и тестируются, но для получения полной информации, включая шаги по переходу, смотрите документацию по обновлению на v4.

Мы будем очень благодарны за раннее тестирование того, что появится в Nuxt 4! 🙏

📜 Автоматическая установка Nuxt Scripts

Мы постепенно работаем над релизом Nuxt Scripts. В настоящее время он находится в стадии публичного предварительного просмотра, но мы уже близки к публичному релизу, поэтому мы добавили несколько заглушек для композаблов, которые (при использовании) будут предлагать установить модуль @nuxt/scripts.

👉 Следите за запуском - и за статьей, в которой будет рассказано больше!

🌈 Авто-регистрация слоев и исправление ошибок

Как и в случае с ~/modules, любые слои в вашем проекте в директории ~/layers теперь будут автоматически регистрироваться как слои в вашем проекте (#27221).

Мы также теперь корректно загружаем зависимости слоев, что должно решить ряд проблем с монорепозиториями и установками git (#27338).

🌐 Встроенные улучшения доступности

Теперь у нас есть встроенный компонент <NuxtRouteAnnouncer> и соответствующий композабл useRouteAnnouncer, которые будут добавляться по умолчанию в новые шаблоны Nuxt в дальнейшем.

Для получения подробной информации смотрите оригинальный PR (#25741) и документацию.

Мы продолжаем работать над nuxt/a11y - ожидайте новых новостей об этом в будущем!

🔥 Улучшения производительности

Мы также улучшили производительность, часть улучшений скрываются за флагом compatibilityVersion: 4, например, отказ от глубоко реактивных полезных нагрузок asyncData.

К значительным улучшениям относится дедупликация модулей (#27475) - это касается в основном пользователей слоев, которые указывают модули в своих слоях. В одном проекте мы увидели улучшение на 30 с лишним секунд при запуске Nuxt.

Мы также улучшили время запуска dev-сервера Vite, исключив общие зависимости ESM из предварительного бандлинга, и советуем авторам модулей сделать то же самое (#27372).

Мы улучшили детерминизм чанков, так что последовательные сборки должны быть менее склонны иметь полностью разные хэши чанков (#27258).

Кроме того, в серверных билдах мы использовали tree-shake для client-only композаблов (#27044) и уменьшили размер полезной нагрузки серверных компонентов (#26863).

👨‍👩‍👧‍👦 Поддержка нескольких приложений

Мы внесли несколько изменений, которые приближают нас к поддержке нескольких приложений в Nuxt, включая экспериментальный флаг multiApp (#27291) и возможность параллельного запуска нескольких экземпляров приложений Nuxt во время выполнения (#27068).

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

⛑️ DX побеждает

Теперь в журналах dev-сервера сериализуется больше информации, включая VNodes (#27309) и URLs. Мы также исправили ошибку, которая могла привести к замораживанию dev-сервера.

При доступе к приватному runtime-конфигу в браузере мы теперь сообщаем вам об этом более информативным сообщением об ошибке (#26441).

🪨 Стабилизирующие улучшения

Мы удалили некоторые стабилизированные экспериментальные опции, которые, по нашему мнению, больше не нуждаются в настройке:

  • experimental.treeshakeClientOnly (включена по умолчанию с v3.0.0)
  • experimental.configSchema (включена по умолчанию с v3.3.0)
  • experimental.polyfillVueUseHead (отключен с v3.4.0) - реализуется на клиентской части с помощью plugin
  • experimental.respectNoSSRHeader (отключен с версии 3.4.0) - реализуется на клиентской части с помощью server middleware

Мы также включили scanPageMeta по умолчанию (#27134). Это извлекает любые метаданные страницы из вашего макроса definePageMeta и делает их доступными для модулей (например, @nuxtjs/i18n), чтобы они могли их дополнить.

Это открывает гораздо лучшую интеграцию модулей и типизированной маршрутизации, но потенциально требует затрат на производительность, поэтому, если у вас возникнут какие-либо проблемы, пожалуйста, напишите об этом.

💪 Улучшения типизации

Теперь у нас есть поддержка типизированных слотов #fallback в серверных компонентах (#27097).

Мы также улучшили некоторые параметры по умолчанию в генерируемом вами файле tsconfig.json, включая установку module: 'preserve', если у вас локально установлена версия TypeScript v5.4 (см. документацию) - см. #26667, #27485.

📦 Улучшения для авторов модулей/опытных пользователей

Мы добавили ряд улучшений типов для авторов модулей, включая:

  • поддержка типизированных опций модуля в installModule (#26744)
  • возможность указать совместимость с некоторыми сборщиками (vite/webpack) в опциях модуля (#27022)
  • новый хук onPrehydrate для подключения к циклу гидратации браузера (#27037)
  • возможность доступа и обновления разрешенной runtime-конфигурации внутри модулей с новыми утилитами useRuntimeConfig и updateRuntimeConfig (#27117)

🎨 Инлайн UI шаблоны

Если вы раньше использовали @nuxt/ui-templates, то вам стоит знать, что мы перенесли их из отдельного репозитория в монорепозиторий nuxt/nuxt. (Это чисто рефактор, а не изменение, хотя вы можете ожидать некоторые новые дизайны для Nuxt v4).

✅ Обновление

Как обычно, наша рекомендация по обновлению - следующая команда:

npx nuxi@latest upgrade --force

Это также обновит ваш .lockfile и гарантирует, что вы получите обновления от других зависимостей, на которые полагается Nuxt, особенно в экосистеме unjs.

Полная информация о релизе

Ознакомьтесь с полной информацией о релизе Nuxt v3.12.0.

Огромное спасибо 75+ контрибьюторам и членам сообщества Nuxt, которые приняли участие в создании этого релиза. ❤️

Наконец, спасибо, что дочитали до этого момента! Мы надеемся, что вам понравится v3.12, и, пожалуйста, дайте нам знать, если у вас есть какие-либо отзывы или проблемы. 🙏

Счастливого Nuxting'а ✨

← Вернуться к блогу