自動インポート
Nuxtはコンポーネント、コンポーザブル、ヘルパー関数、Vue APIを自動インポートします。
Nuxtは、コンポーネント、コンポーザブル、およびVue.js APIをアプリケーション全体で明示的にインポートすることなく使用できるように自動インポートします。
const count = ref(1) // refは自動インポートされます
Nuxtは、その意見に基づいたディレクトリ構造のおかげで、components/
、composables/
、およびutils/
を自動インポートできます。
従来のグローバル宣言とは異なり、Nuxtは型情報、IDEの補完とヒントを保持し、本番コードで使用されるものだけを含めます。
ドキュメントでは、明示的にインポートされていないすべての関数はNuxtによって自動インポートされ、コード内でそのまま使用できます。自動インポートされたコンポーネント、コンポーザブル、ユーティリティのリファレンスはAPIセクションで見つけることができます。
server
ディレクトリでは、Nuxtはserver/utils/
からエクスポートされた関数と変数を自動インポートします。
カスタムフォルダやサードパーティパッケージからエクスポートされた関数を自動インポートするには、nuxt.config
ファイルのimports
セクションを設定することができます。
ビルトイン自動インポート
Nuxtは、データフェッチを実行し、アプリケーションコンテキストやランタイム設定にアクセスし、状態を管理したり、コンポーネントやプラグインを定義するための関数やコンポーザブルを自動インポートします。
/* useFetch()は自動インポートされます */
const { data, refresh, status } = await useFetch('/api/hello')
Vueはref
やcomputed
のようなリアクティビティAPIを公開しており、ライフサイクルフックやヘルパーもNuxtによって自動インポートされます。
/* ref()とcomputed()は自動インポートされます */
const count = ref(1)
const double = computed(() => count.value * 2)
VueとNuxtのコンポーザブル
VueとNuxtが提供するビルトインのComposition APIコンポーザブルを使用する際、多くのものが正しい_コンテキスト_で呼び出されることに依存していることに注意してください。
コンポーネントのライフサイクル中、Vueは現在のコンポーネントの一時インスタンスをグローバル変数を通じて追跡し、同様にNuxtはnuxtApp
の一時インスタンスを追跡し、同じティックでそれを解除します。これは、サーバーレンダリング時に、クロスリクエストの状態汚染(2人のユーザー間で共有参照が漏れること)を避け、異なるコンポーネント間の漏れを避けるために重要です。
つまり、(非常に少数の例外を除いて)Nuxtプラグイン、Nuxtルートミドルウェア、またはVueセットアップ関数の外でそれらを使用することはできません。さらに、それらを同期的に使用する必要があります。つまり、<script setup>
ブロック内、defineNuxtComponent
で宣言されたコンポーネントのセットアップ関数内、defineNuxtPlugin
またはdefineNuxtRouteMiddleware
内を除いて、コンポーザブルを呼び出す前にawait
を使用することはできません。これらの場所では、await
の後でも同期コンテキストを保持するための変換を行います。
Nuxt instance is unavailable
のようなエラーメッセージが表示された場合、それはおそらくVueまたはNuxtのライフサイクルの間違った場所でNuxtコンポーザブルを呼び出していることを意味します。
非SFCコンポーネント内でNuxtコンテキストを必要とするコンポーザブルを使用する場合、defineComponent
の代わりにdefineNuxtComponent
でコンポーネントをラップする必要があります。
壊れるコードの例:
// コンポーザブルの外でランタイム設定にアクセスしようとしています
const config = useRuntimeConfig()
export const useMyComposable = () => {
// ここでランタイム設定にアクセス
}
動作するコードの例:
export const useMyComposable = () => {
// ライフサイクルの正しい場所でコンポーザブルが呼び出されるため、
// useRuntimeConfigはここで動作します
const config = useRuntimeConfig()
// ...
}
ディレクトリベースの自動インポート
Nuxtは定義されたディレクトリに作成されたファイルを直接自動インポートします:
components/
はVueコンポーネント用。composables/
はVueコンポーザブル用。utils/
はヘルパー関数やその他のユーティリティ用。
自動インポートされたref
とcomputed
はコンポーネントの<template>
でアンラップされません。 :br
これは、Vueがテンプレートのトップレベルでないrefをどのように扱うかによるものです。詳細はVueのドキュメントで読むことができます。
明示的なインポート
Nuxtは、必要に応じてインポートを明示的にするために使用できる#imports
エイリアスで、すべての自動インポートを公開します:
import { ref, computed } from '#imports'
const count = ref(1)
const double = computed(() => count.value * 2)
自動インポートの無効化
コンポーザブルやユーティリティの自動インポートを無効にしたい場合は、nuxt.config
ファイルでimports.autoImport
をfalse
に設定できます。
export default defineNuxtConfig({
imports: {
autoImport: false
}
})
これにより自動インポートは完全に無効になりますが、#imports
からの明示的なインポートを使用することは依然として可能です。
自動インポートの部分的な無効化
ref
のようなフレームワーク固有の関数を自動インポートのままにしておきたいが、自分のコード(例:カスタムコンポーザブル)の自動インポートを無効にしたい場合は、nuxt.config.ts
ファイルでimports.scan
オプションをfalse
に設定できます:
export default defineNuxtConfig({
imports: {
scan: false
}
})
この設定では:
ref
、computed
、watch
のようなフレームワーク関数は、手動でインポートする必要なく動作します。- カスタムコード、例えばコンポーザブルは、ファイル内で手動でインポートする必要があります。
注意: この設定にはいくつかの制限があります:
- プロジェクトをレイヤーで構成する場合、各レイヤーからコンポーザブルを明示的にインポートする必要があり、自動インポートに依存することはできません。
- この設定はレイヤーシステムのオーバーライド機能を破壊します。
imports.scan: false
を使用する場合、この副作用を理解し、アーキテクチャを適切に調整してください。
自動インポートされたコンポーネント
Nuxtは、~/components
ディレクトリからコンポーネントを自動的にインポートしますが、これはコンポーザブルやユーティリティ関数の自動インポートとは別に設定されています。
自分の~/components
ディレクトリからのコンポーネントの自動インポートを無効にするには、components.dirs
を空の配列に設定できます(ただし、モジュールによって追加されたコンポーネントには影響しません)。
export default defineNuxtConfig({
components: {
dirs: []
}
})
サードパーティパッケージからの自動インポート
Nuxtはサードパーティパッケージからの自動インポートも可能です。
そのパッケージのNuxtモジュールを使用している場合、モジュールがそのパッケージの自動インポートをすでに設定している可能性があります。
例えば、vue-i18n
パッケージからuseI18n
コンポーザブルの自動インポートを有効にするには、次のようにします:
export default defineNuxtConfig({
imports: {
presets: [
{
from: 'vue-i18n',
imports: ['useI18n']
}
]
}
})
※このページは Nuxt.js 公式ドキュメントの翻訳ページ(非公式)です。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/3.x/guide/concepts/auto-imports