Конфигурация
nuxt.config
Отправной точкой для вашего приложения Nuxt остается файл nuxt.config.
Миграция
- Вам следует мигрировать на новую функцию
defineNuxtConfig, которая предоставляет типизированную схему конфигурации.export default { // ... } - Если вы использовали
router.extendRoutes, вы можете мигрировать на новый хукpages:extend:export default { router: { extendRoutes (routes) { // } } } - Если вы использовали
router.routeNameSplitter, вы можете получить тот же результат, обновив логику генерации имени маршрута в новом хукеpages:extend:export default { router: { routeNameSplitter: '/' } }
ESM Syntax
Nuxt 3 является нативным ESM-фреймворком. Хотя unjs/jiti обеспечивает частичную совместимость при загрузке файла nuxt.config, избегайте любого использования require и module.exports в этом файле.
- Измените
module.exportsнаexport default - Измените
const lib = require('lib')наimport lib from 'lib'
Async Configuration
Для обеспечения более предсказуемого поведения загрузки Nuxt синтаксис асинхронной конфигурации устарел. Рассмотрите возможность использования хуков Nuxt для асинхронных операций.
Dotenv
У Nuxt есть встроенная поддержка загрузки файлов .env. Избегайте прямого импорта из nuxt.config.
Modules
Nuxt и модули Nuxt теперь доступны только во время сборки.
Миграция
- Переместите все свои
buildModulesвmodules. - Проверьте совместимость модулей с Nuxt 3.
- Если у вас есть какие-либо локальные модули, указывающие на директорию, вам следует обновить это, чтобы указать на файл входа:
export default defineNuxtConfig({
modules: [
- '~/modules/my-module'
+ '~/modules/my-module/index'
]
})
Изменения в директориях
Директория static/ (для хранения статических ассетов) была переименована в public/. Вы можете либо переименовать свою директорию static в public, либо сохранить это имя, установив dir.public в вашем nuxt.config.
TypeScript
Перенести ваше приложение будет гораздо проще, если вы воспользуетесь интеграцией Nuxt с TypeScript. Это не значит, что вам нужно писать приложение на TypeScript, просто Nuxt обеспечит автоматические подсказки типов для вашего редактора.
Подробнее о поддержке TypeScript в Nuxt вы можете прочитать в документации.
vue-tsc с помощью команды nuxi typecheck.Миграция
- Создайте файл
tsconfig.jsonсо следующим содержимым:{ "extends": "./.nuxt/tsconfig.json" } - Запустите
npx nuxi prepareдля генерации.nuxt/tsconfig.json. - Установите Volar, следуя инструкциям в документации.
Изменения во Vue
Существует ряд изменений, касающиеся рекомендуемых лучших практик Vue, а также ряд критических изменений между Vue 2 и 3.
Рекомендуется прочитать Руководство по миграции Vue 3 и, в частности, список изменений.
В настоящее время невозможно использовать сборку для миграции Vue 3 с Nuxt 3.
Vuex
Nuxt больше не предоставляет интеграцию с Vuex. Вместо этого официальная рекомендация Vue - использовать pinia, которая имеет встроенную поддержку Nuxt через модуль Nuxt. Подробнее о pinia здесь.
Простой способ обеспечить глобальное управление состоянием с помощью pinia заключается в следующем:
Установите модуль @pinia/nuxt:
yarn add pinia @pinia/nuxt
Включите модуль в конфигурации 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` - это инстанс стора
this.counter++
},
},
})
Создайте файл плагина, чтобы глобализировать ваше хранилище:
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);
})
Для крупных приложений эта миграция может потребовать много работы. Если обновление Vuex все еще создает препятствия, вам может потребоваться использовать общедоступный модуль: nuxt3-vuex-module, который должен работать из коробки.