nuxt.configNuxt 应用程序的起点仍然是您的 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)
},
},
})
Nuxt 3 是一个 ESM 原生框架。尽管unjs/jiti在加载 nuxt.config 文件时提供半兼容性,请避免在该文件中使用任何 require 和 module.exports。
module.exports 更改为 export defaultconst lib = require('lib') 更改为 import lib from 'lib'为了使 Nuxt 加载行为更具可预测性,异步配置语法已被弃用。请考虑使用 Nuxt 钩子进行异步操作。
Nuxt 内置支持加载 .env 文件。避免直接从 nuxt.config 导入它。
Nuxt 和 Nuxt 模块现在只在构建时有效。
buildModules 移至 modules。 export default defineNuxtConfig({
modules: [
- '~/modules/my-module'
+ '~/modules/my-module/index'
]
})
static/(用于存储静态资源)已重命名为 public/。您可以将 static 目录重命名为 public,或者通过在 nuxt.config 中设置 dir.public 来保留名称。
如果您使用 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 文件。Vue 推荐的最佳实践以及 Vue 2 和 3 之间存在许多重大更改。
建议阅读Vue 3 迁移指南特别是重大更改列表.
目前无法使用Vue 3 迁移构建与 Nuxt 3。
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,可以按照这些步骤.
一旦完成,您需要将以下插件添加到您的 Nuxt 应用程序中
import store from '~/store'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(store)
})
对于大型应用程序,此迁移可能涉及大量工作。如果更新 Vuex 仍然造成障碍,您可能需要使用社区模块nuxt3-vuex-module,它应该可以直接使用。