Конфигурация
nuxt.config
Точка входа конфигурации по-прежнему — файл nuxt.config.
Миграция
- Перейдите на функцию
defineNuxtConfigс типизированной схемой конфигурации.export default { // ... }export default defineNuxtConfig({ // ... }) - Вместо
router.extendRoutesиспользуйте хукpages:extend:export default { router: { extendRoutes (routes) { // }, }, }export default defineNuxtConfig({ hooks: { 'pages:extend' (routes) { // }, }, }) - Логику
router.routeNameSplitterперенесите в хукpages:extend, обновляя имена маршрутов:export default { router: { routeNameSplitter: '/', }, }import { createResolver } from '@nuxt/kit' export default defineNuxtConfig({ hooks: { 'pages:extend' (routes) { const routeNameSplitter = '/' const root = createResolver(import.meta.url).resolve('./pages') function updateName (routes) { if (!routes) { return } for (const route of routes) { const relativePath = route.file.substring(root.length + 1) route.name = relativePath.slice(0, -4).replace(/\/index$/, '').replace(/\//g, routeNameSplitter) updateName(route.children) } } updateName(routes) }, }, })
Синтаксис ESM
Nuxt 3 — нативно ESM-фреймворк. В файле nuxt.config не используйте require и module.exports.
- Замените
module.exportsнаexport default. - Замените
const lib = require('lib')наimport lib from 'lib'.
Асинхронная конфигурация
Асинхронный синтаксис конфига устарел. Для асинхронных операций используйте хуки Nuxt.
Dotenv
Nuxt сам подгружает файлы .env. Не импортируйте их напрямую из nuxt.config.
Модули
Nuxt и модули Nuxt работают только на этапе сборки.
Миграция
- Перенесите все
buildModulesвmodules. - Проверьте совместимость модулей с Nuxt 3.
- Локальные модули указывайте на файл входа, а не на папку:
export default defineNuxtConfig({
modules: [
- '~/modules/my-module'
+ '~/modules/my-module/index'
]
})
Изменения в структуре каталогов
Папка static/ переименована в public/. Либо переименуйте каталог, либо задайте dir.public в nuxt.config.
TypeScript
Миграция проще при использовании TypeScript в Nuxt. Писать весь код на TypeScript не обязательно — Nuxt даст подсказки типов в редакторе.
Подробнее: поддержка TypeScript в Nuxt.
nuxt typecheck с vue-tsc.Миграция
- Создайте
tsconfig.json:{ "files": [], "references": [ { "path": "./.nuxt/tsconfig.app.json" }, { "path": "./.nuxt/tsconfig.server.json" }, { "path": "./.nuxt/tsconfig.shared.json" }, { "path": "./.nuxt/tsconfig.node.json" } ] } - Выполните
npx nuxt prepareдля генерации tsconfig. - Установите Volar по инструкции.
Изменения во Vue
Рекомендации Vue и breaking changes между Vue 2 и 3. См. гайд по миграции на Vue 3 и список breaking changes.
Vue 3 migration build с Nuxt 3 использовать нельзя.
Vuex
В Nuxt больше нет встроенной интеграции Vuex. Рекомендуется pinia с модулем для Nuxt.
Минимальная настройка глобального состояния на pinia:
Установите модуль @pinia/nuxt:
yarn add pinia @pinia/nuxt
Подключите модуль в конфиге:
import { defineNuxtConfig } from 'nuxt/config'
export default defineNuxtConfig({
modules: ['@pinia/nuxt'],
})
Создайте папку store в корне приложения:
import { defineStore } from 'pinia'
export const useMainStore = defineStore('main', {
state: () => ({
counter: 0,
}),
actions: {
increment () {
// `this` is the store instance
this.counter++
},
},
})
Создайте плагин для доступа к store глобально:
import { useMainStore } from '~/store'
export default defineNuxtPlugin(({ $pinia }) => {
return {
provide: {
store: useMainStore($pinia),
},
}
})
Если нужен Vuex, мигрируйте на Vuex 4 по инструкции.
После миграции добавьте плагин в приложение Nuxt:
import store from '~/store'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(store)
})
Для больших приложений миграция может быть объёмной. Альтернатива — community-модуль nuxt3-vuex-module, работающий из коробки.