配置

了解如何将 Nuxt 2 迁移到 Nuxt 3 新配置。

nuxt.config

Nuxt 应用程序的起点仍然是您的 nuxt.config 文件。

Nuxt 配置将使用unjs/jiti等等unjs/c12.

迁移

  1. 您应该迁移到新的 defineNuxtConfig 函数,该函数提供了一个类型化的配置 schema。
    export default {
      // ...
    }
    
  2. 如果您以前使用 router.extendRoutes,您可以迁移到新的 pages:extend 钩子
    export default {
      router: {
        extendRoutes (routes) {
          //
        },
      },
    }
    
  3. 如果您以前使用 router.routeNameSplitter,您可以通过在新的 pages:extend 钩子中更新路由名称生成逻辑来实现相同的效果
    export default {
      router: {
        routeNameSplitter: '/',
      },
    }
    

ESM 语法

Nuxt 3 是一个 ESM 原生框架。尽管unjs/jiti在加载 nuxt.config 文件时提供了半兼容性,但请避免在该文件中使用 requiremodule.exports

  1. module.exports 更改为 export default
  2. const lib = require('lib') 更改为 import lib from 'lib'

异步配置

为了使 Nuxt 的加载行为更可预测,异步配置语法已被弃用。请考虑使用 Nuxt 钩子进行异步操作。

Dotenv

Nuxt 内置支持加载 .env 文件。避免直接从 nuxt.config 导入它。

模块

Nuxt 和 Nuxt 模块现在是只在构建时使用的。

迁移

  1. 将所有 buildModules 移动到 modules 中。
  2. 检查模块的 Nuxt 3 兼容性。
  3. 如果您有指向目录的任何本地模块,您应该将其更新为指向入口文件
  export default defineNuxtConfig({
    modules: [
-     '~/modules/my-module'
+     '~/modules/my-module/index'
    ]
  })
如果您是模块作者,您可以查看 有关模块兼容性的更多信息我们的模块作者指南

目录更改

static/ (用于存储静态资产) 已重命名为 public/。您可以将 static 目录重命名为 public,或者通过在 nuxt.config 中设置 dir.public 来保留名称。

请阅读 文档 > 4 X > 指南 > 目录结构 > Public 了解更多信息。

TypeScript

如果您使用 Nuxt 的 TypeScript 集成,迁移您的应用程序将容易得多。这并不意味着您需要用 TypeScript 编写应用程序,只是 Nuxt 将为您的编辑器提供自动类型提示。

您可以在文档中阅读更多关于 Nuxt 的 TypeScript 支持。

Nuxt 可以使用vue-tsc通过 nuxt typecheck 命令来对您的应用程序进行类型检查。

迁移

  1. 创建一个包含以下内容的 tsconfig.json
    {
      "files": [],
      "references": [
        {
          "path": "./.nuxt/tsconfig.app.json"
        },
        {
          "path": "./.nuxt/tsconfig.server.json"
        },
        {
          "path": "./.nuxt/tsconfig.shared.json"
        },
        {
          "path": "./.nuxt/tsconfig.node.json"
        }
      ]
    }
    
  2. 运行 npx nuxt prepare 以生成 tsconfig 文件。
  3. 按照文档中的说明安装 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 配置中启用模块

nuxt.config.ts
import { defineNuxtConfig } from 'nuxt/config'

export default defineNuxtConfig({
  modules: ['@pinia/nuxt'],
})

在应用程序根目录创建 store 文件夹

store/index.ts
import { defineStore } from 'pinia'

export const useMainStore = defineStore('main', {
  state: () => ({
    counter: 0,
  }),
  actions: {
    increment () {
      // `this` is the store instance
      this.counter++
    },
  },
})

创建一个 插件 文件以全局化您的 store

app/plugins/pinia.ts
import { useMainStore } from '~/store'

export default defineNuxtPlugin(({ $pinia }) => {
  return {
    provide: {
      store: useMainStore($pinia),
    },
  }
})

如果您想继续使用 Vuex,您可以按照这些步骤.

手动迁移到 Vuex 4。完成后,您需要在您的 Nuxt 应用程序中添加以下插件

app/plugins/vuex.ts
import store from '~/store'

export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.use(store)
})

对于大型应用程序,此迁移可能涉及大量工作。如果更新 Vuex 仍然造成障碍,您可能需要使用社区模块nuxt3-vuex-module,它应该可以直接使用。