設定

Nuxt 2 から Nuxt 3 の新しい設定に移行する方法を学びましょう。

nuxt.config

Nuxt アプリケーションの出発点は、引き続き nuxt.config ファイルです。

Nuxt の設定は以下を使用して読み込まれます。unjs/jitiGlobalComponentsunjs/c12.

移行

  1. 型付き設定スキーマを提供する新しい defineNuxtConfig 関数に移行する必要があります。
    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/jitinuxt.config ファイルを読み込む際に部分的な互換性を提供しますが、このファイルでの require および module.exports の使用は避けてください。

  1. module.exportsexport default に変更します。
  2. const lib = require('lib')import lib from 'lib' に変更します。

非同期設定

Nuxt の読み込み動作をより予測可能にするため、非同期設定構文は非推奨となりました。非同期操作には Nuxt のフックを使用することを検討してください。

Dotenv

Nuxt には .env ファイルを読み込むための組み込みサポートがあります。nuxt.config から直接インポートすることは避けてください。

モジュール

Nuxt および Nuxt モジュールは、ビルド時のみになりました。

移行

  1. すべての buildModulesmodules に移動します。
  2. モジュールの Nuxt 3 互換性を確認してください。
  3. ディレクトリを指すローカルモジュールがある場合は、エントリファイルを指すように更新する必要があります。
  export default defineNuxtConfig({
    modules: [
-     '~/modules/my-module'
+     '~/modules/my-module/index'
    ]
  })
モジュール作者の方は、モジュールの互換性に関する詳細情報と、モジュール作者向けガイドをご覧ください。

ディレクトリの変更

static/ (静的アセットを保存するため) は public/ に改名されました。static ディレクトリを public に改名するか、nuxt.configdir.public を設定して元の名前を保持することもできます。

Docs > 4 X > Guide > Directory Structure > Public で詳細をご覧ください。

TypeScript

Nuxt の TypeScript 統合を使用すると、アプリケーションの移行がはるかに簡単になります。これは、アプリケーションを TypeScript で記述する必要があるという意味ではなく、Nuxt がエディタに自動的に型ヒントを提供するという意味です。

Nuxt の TypeScript サポートについては、ドキュメントで詳細をご覧いただけます。

Nuxt は以下を使用してアプリの型チェックができます。vue-tscnuxt 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 モジュール. を介して組み込みの 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++
    },
  },
})

ストアをグローバル化する プラグイン ファイルを作成します。

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を使用すると、すぐに動作するはずです。