Релиз·  

Nuxt 3.3

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

✨ 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).

nuxt-performance-improvements

Также теперь мы поддерживаем предварительную загрузку <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.

ДоПосле
before-nuxt-console-improvementsafter-nuxt-console-improvements

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

Типы для серверных 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 соавторов, которые помогали в работе над этим релизом 💚

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