Релиз·  

Nuxt 3.3

3.3.0 - это минорный (функциональный) релиз с большим количеством улучшений производительности и DX, исправлений ошибок и новых возможностей, которые можно попробовать.
Дэниел Ро

Дэниел Ро

@danielroe.dev

✨ DX при разработке локального модуля

Мы внесли множество изменений, чтобы включить локальные модули и улучшить DX.

Теперь мы автоматически отсканируем вашу папку ~/modules и зарегистрируем в ней файлы верхнего уровня как модули в вашем проекте (#19394).

Когда эти файлы будут изменены, мы автоматически перезапустим сервер nuxt.

export default defineNuxtConfig({
  modules: [
    '@nuxtjs/tailwindcss',
-   '~/modules/purge-comments'
  ]
})

Мы теперь также предоставляем nuxt/kit для легкого доступа к композаблам набора в вашем локальном проекте без необходимости устанавливать @nuxt/kit (#19422).

Читайте документацию о локальных модулях.

♻️ Перезапуск Nuxt

Вы можете добавлять файлы в массив watch для автоматического перезапуска сервера (#19530). Это может быть особенно полезно для авторов модулей. Вы также можете инициировать перезапуск сервера Nuxt с помощью нового хука restart (#19084).

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

Мы увеличили maxAge статических ассетов до 1 года в соответствии с лучшими практиками (#19335), а также поддерживаем tree-shaking вашей сборки (#19508).

Также теперь мы поддерживаем предварительную загрузку <NuxtLink> с маршрутом в объектном синтаксисе (#19120):

<NuxtLink :to="{ name: 'home', query: { year: '2023' } }">Home</NuxtLink>

Мы также отслеживаем, сколько времени занимает настройка каждого используемого вами модуля, и предупреждаем, если это занимает слишком много времени. Вы можете увидеть все эти значения, запустив свой dev-сервер с DEBUG=1 (#18648).

DEBUG=1 npx nuxt dev
ℹ Module pages took 1.5ms to setup.
ℹ Module meta took 3.15ms to setup
ℹ Module components took 4.5ms to setup.
...

Вы также можете воспользоваться некоторыми внутренними оптимизациями Nuxt, настроив композаблы так, чтобы они были treeshaken в определенном окружении (#19383) или чтобы магические ключи инжектировались автоматически (#19490).

🐛 Обработка ошибок

Теперь мы по умолчанию обрабатываем ошибки чанков (#19086), то есть если ваш сайт обновляется с помощью редеплоя, мы автоматически обрабатываем его перезагрузку при навигации.

Чтобы отключить это поведение, установите для опции experimental.emitRouteChunkError значение 'manual' и обрабатывайте его самостоятельно с помощью нового композабла reloadNuxtApp. Подробнее о том, как мы реализовали это в нашем плагине chunk-reload.client.ts.

Вы также можете установить experimental.restoreState, чтобы сохранить часть состояния вашего приложения при перезагрузке:

nuxt.config.ts
defineNuxtConfig({
  experimental: {
    restoreState: true
  }
})

У нас также появился новый экспериментальный компонент обработки ошибок: <NuxtClientFallback> (#8216) , который может перехватывать ошибки рендеринга на сервере, заменять их на fallback-контент, и гранулярно запускать повторный рендеринг части с ошибкой на клиенте. Это можно включить с помощью experimental.clientFallback - отзывы приветствуются!

⚡️ Улучшения в head

Мы мигрировали на прямое использование unhead (#19519) - и автоматически tree-shake серверные head композаблы, такие как useServerHead из вашей клиентской сборки (#19576), что означает, что вы можете иметь отличное SEO без необходимости включать логику метатегов, которая имеет значение только для краулеров в вашей клиентской сборке.

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

🪵 Улучшенное логирование в браузерных DevTools

Работая с командой Chrome DevTools, мы добавили несколько функций в экосистему unjs + Nuxt, что означает, что теперь у нас есть первоклассная поддержка скрытия внутренних трассировок стека Nuxt из логов в вашем браузере (сейчас на базе Chromium) #19243. Мы также внесли несколько улучшений в трассировку стека с использованием хуков Nuxt (unjs/hookable#69 и unjs/hookable#68), имплементирующих console.createTask.

ДоПосле

💪 Улучшения типов

Типы для серверных API-маршрутов теперь более корректны - из возвращаемого типа удалены несериализуемые типы (unjs/nitro#1002).

Мы также теперь лучше типизируем NuxtApp и правильно типизируем неизвестные инъекции для большей безопасности типов (#19643).

И если у вас были проблемы с правильными типами при использовании transform + default с композаблами Nuxt, которые получают данные, больше не бойтесь - теперь мы определяем типы правильно (#19487).

⚗️ Улучшения Nitro

Этот релиз поставляется с Nitro v2.3, в котором реализовано множество собственных улучшений. Более подробную информацию можно найти в релизе.

Теперь мы поддерживаем useAppConfig в маршрутах сервера nitro (#19489) - долгожданное изменение. Теперь useAppConfig постоянно доступен во всем вашем приложении для non-runtime-конфигурации из слоев, модулей и т.д.

Мы также добавили хук nitro:build:public-assets, позволяющий модифицировать ассеты, выводимые на этапе пререндера/билда nitro (#19638).

🛠️ Изменения в сборке

В рамках перехода к первоклассной поддержке PNP и поддержке pnpm без --shamefully-hoist мы отказались от поддержки некоторых внутренних (устаревших) утилит, использующих паттерны разрешения CJS (#19537 и #19608).

Также теперь мы разрешаем такие зависимости, как nuxt, @nuxt/kit и другие, используя пути поиска ESM. Мы будем внимательно следить за этим.

Мы также готовим почву для поддержки нового разрешения модулей TypeScript Node16 (#19606), и в рамках этого мы изменили формат нашего вывода рантайма (используя расширения .js вместо .mjs, предоставляя поля types для экспорта подпутей, и многое другое).

🗺️ Пользовательская схема конфигурации (продвинутый уровень)

Мы тестировали экспериментальную функцию, позволяющую модулям и пользователям расширять схему конфигурации Nuxt (#15592), и теперь мы включили ее по умолчанию (#19172). Мы ожидаем, что это будет особенно полезно для авторов как модулей, так и слоев/тем, и должно привести к появлению более приятных DX для их пользователей.

Журнал изменений

Ознакомьтесь с полным журналом изменений, сравнив изменения или ознакомьтесь с релизом на GitHub.

Мы хотели бы поблагодарить всех 28 соавторов, которые помогали в работе над этим релизом 💚

← Вернуться в блог
Nuxt в LinkedInNuxt в BlueskyNuxt в X