Black Friday Week20% OFF on Nuxt UI Pro until Dec 2nd
Релиз·  

Nuxt 3.13

Вышел Nuxt 3.13 - перенос некоторых новых функций, которые мы разрабатываем для Nuxt 4!

🏘️ Группы маршрутов

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

Для примера:

Структура директорий
-| pages/
---| index.vue
---| (marketing)/
-----| about.vue
-----| contact.vue

В результате в вашем приложении появятся страницы /, /about и /contact. Группа marketing игнорируется для целей структуры URL.

Подробнее читайте в оригинальном PR.

🏝️ Острова и метаданные Head

Теперь острова серверных компонентов могут манипулировать head, например, добавлять SEO-метаданные при рендеринге.

Подробнее в #27987.

🪝 Пользовательские триггеры предварительной выборки

Теперь мы поддерживаем пользовательские триггеры предварительной выборки для NuxtLink (#27846).

Например:

pages/index.vue
<template>
  <div>
    <NuxtLink prefetch-on="interaction">
Это приведет к предварительному получению данных при наведении курсора мыши или при получении фокуса
    </NuxtLink>
    <!-- Обратите внимание, что вам, вероятно, не стоит включать оба варианта! -->
    <NuxtLink :prefetch-on="{ visibility: true, interaction: true }">
Это приведет к предварительному получению данных при наведении курсора мыши/фокусе - или когда ссылка станет видимой```
    </NuxtLink>
  </div>
</template>

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

Например:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    defaults: {
      nuxtLink: {
        prefetch: true,
        prefetchOn: { visibility: false, interaction: true }
      }
    }
  }
})

🗺️ Улучшенные исходные карты сервера

При запуске с node --enable-source-maps вы могли заметить, что исходные карты для файлов Vue в вашем серверном билде указывают на выходные данные билда Vite (что-то вроде .nuxt/dist/server/_nuxt/index-O15BBwZ3.js).

Теперь, даже после вашего билда Nitro, исходные карты вашего сервера будут ссылаться на ваши оригинальные исходные файлы (#28521).

Обратите внимание, что один из самых простых способов повысить производительность сборки — отключить карты исходников, если вы их не используете, что можно легко сделать в файле nuxt.config:

nuxt.config.ts
export default defineNuxtConfig({
  sourcemap: {
    server: false,
    client: true,
  },
})

🎁 Новые возможности для авторов модулей

В преддверии Nuxt v4 мы работаем над добавлением некоторых ключевых функциональностей для авторов модулей, включая новую утилиту isNuxtMajorVersion, где это необходимо (#27579) , и улучшенные выводимые типы для объединенных опций модуля с использованием нового метода defineNuxtModule().with() (#27520).

✨ Улучшенные предупреждения в режиме разработки

Мы больше не предупреждаем при использовании композаблов для получения данных в middleware (#28604) и предупреждаем, когда имена пользовательских компонентов начинаются с Lazy (#27838).

🚨 Изменения в TypeScript для Vue

В течение некоторого времени мы расширяли @vue/runtime-core в экосистеме Vue, чтобы добавлять к vue пользовательские свойства и многое другое. Однако это непреднамеренно нарушает типы для проектов, которые расширяют vue - что теперь является официально рекомендуемым и документированным способом расширения этих интерфейсов (например, ComponentCustomProperties, GlobalComponents и so on).

Это означает, что все библиотеки должны обновить свой код (или это нарушит типы библиотек, которые расширяют vue).

Мы обновили наши типы в Nuxt в соответствии с этими изменениями, но вы можете столкнуться с проблемами с последней версией vue-router, если она используется с библиотеками, которые еще не сделали этого.

Пожалуйста, создайте issue с воспроизведением — с радостью помогу создать PR для решения проблемы в соответствующей библиотеке. Или вы можете обойти проблему, создав declarations.d.ts в корне вашего проекта со следующим кодом (credit от @BobbieGoede):

declarations.d.ts
import type {
  ComponentCustomOptions as _ComponentCustomOptions,
  ComponentCustomProperties as _ComponentCustomProperties,
} from 'vue';

declare module '@vue/runtime-core' {
  interface ComponentCustomProperties extends _ComponentCustomProperties {}
  interface ComponentCustomOptions extends _ComponentCustomOptions {}
}

✅ Обновление

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

npx nuxi@latest upgrade --force

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

Полные примечания к выпуску

Прочитайте полные примечания к выпуску Nuxt v3.13.0.

Огромное спасибо всем, кто принимал участие в этом релизе — вы те, кто делает Nuxt возможным. ❤️

Не стесняйтесь сообщать нам о любых отзывах или проблемах! 🙏

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