配置
nuxt.config
Nuxt 应用程序的起点仍然是您的 nuxt.config
文件。
迁移
- 您应该迁移到新的
defineNuxtConfig
函数,该函数提供了一个类型化的配置 schema。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 原生框架。尽管unjs/jiti
在加载 nuxt.config
文件时提供了半兼容性,但请避免在该文件中使用 require
和 module.exports
。
- 将
module.exports
更改为export default
- 将
const lib = require('lib')
更改为import lib from 'lib'
异步配置
为了使 Nuxt 的加载行为更可预测,异步配置语法已被弃用。请考虑使用 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/
。您可以将 static
目录重命名为 public
,或者通过在 nuxt.config
中设置 dir.public
来保留名称。
TypeScript
如果您使用 Nuxt 的 TypeScript 集成,迁移您的应用程序将容易得多。这并不意味着您需要用 TypeScript 编写应用程序,只是 Nuxt 将为您的编辑器提供自动类型提示。
您可以在文档中阅读更多关于 Nuxt 的 TypeScript 支持。
vue-tsc
通过 nuxt typecheck
命令来对您的应用程序进行类型检查。迁移
- 创建一个包含以下内容的
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 最佳实践的建议有很多变化,以及 Vue 2 和 3 之间的一些重大更改。
建议阅读Vue 3 迁移指南特别是重大更改列表.
目前无法使用Vue 3 迁移构建与 Nuxt 3 结合使用。
Vuex
Nuxt 不再提供 Vuex 集成。相反,Vue 的官方建议是使用 pinia
,它通过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` 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)
})
对于大型应用程序,此迁移可能涉及大量工作。如果更新 Vuex 仍然造成障碍,您可能需要使用社区模块nuxt3-vuex-module,它应该可以直接使用。