nuxt.configNuxt 应用的起点仍然是你的 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)
},
},
})
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 文件:{
"extends": "./.nuxt/tsconfig.json"
}
npx nuxt prepare 生成 .nuxt/tsconfig.json。在 Vue 最佳实践方面有许多变更,同时 Vue 2 至 Vue 3 之间也存在诸多破坏性变更。
建议阅读 Vue 3 迁移指南,特别是破坏性变更列表。
目前无法在 Nuxt 3 中使用 Vue 3 迁移构建版本。
Nuxt 不再提供 Vuex 集成。官方推荐使用内置 Nuxt 支持的 pinia,通过 Nuxt 模块 实现。你可以在这里了解更多关于 pinia 的内容: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` 是 store 实例
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,该模块应能开箱即用。