実験的な機能

Nuxt の実験的機能を有効にして、新しい可能性を解き放ちましょう。

Nuxt には、設定ファイルで有効にできる実験的機能が含まれています。

内部的には、Nuxt は @nuxt/schema を使用してこれらの実験的機能を定義しています。API ドキュメントまたはソースコードをご覧ください。

これらの機能は実験的なものであり、将来削除または変更される可能性があることに注意してください。

alwaysRunFetchOnKeyChange

キーが変更されたときに useFetch を実行するかどうか。immediate: false に設定されていて、まだトリガーされていない場合でも実行されます。

immediate: true であるか、すでにトリガーされている場合、useFetchuseAsyncData はキーが変更されるたびに常に実行されます。

このフラグはデフォルトで無効になっていますが、この機能を有効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    alwaysRunFetchOnKeyChange: true,
  },
})

appManifest

クライアント側でルートルールを尊重するためにアプリマニフェストを使用します。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    appManifest: false,
  },
})

asyncContext

Nuxt と Nitro のネストされたコンポーザブルでネイティブの非同期コンテキストにアクセスできるようにします。これにより、非同期コンポーザブル内でコンポーザブルを使用できるようになり、Nuxt instance is unavailable エラーが発生する可能性を減らすことができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    asyncContext: true,
  },
})
GitHub プルリクエストで詳細な説明をご覧ください。

asyncEntry

Vue バンドルの非同期エントリーポイントの生成を有効にし、モジュール連邦サポートを支援します。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    asyncEntry: true,
  },
})

externalVue

ビルド時に vue@vue/*、および vue-router を外部化します。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    externalVue: false,
  },
})
この機能は近い将来削除される可能性があります。

extractAsyncDataHandlers

useAsyncData および useLazyAsyncData の呼び出しからハンドラー関数を別々のチャンクに抽出し、コード分割とキャッシュ効率を向上させます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    extractAsyncDataHandlers: true,
  },
})

この機能は、インラインハンドラー関数を動的にインポートされたチャンクに変換します。

<!-- Before -->
<script setup>
const { data } = await useAsyncData('user', async () => {
  return await $fetch('/api/user')
})
</script>
<!-- After transformation -->
<script setup>
const { data } = await useAsyncData('user', () =>
  import('/generated-chunk.js').then(r => r.default()),
)
</script>

この変換の利点は、データフェッチロジックを分割できることです。必要に応じてコードをロードすることも可能です。

この機能は、ペイロード抽出を伴う**静的ビルド**と、実行時にデータを再フェッチする必要がない場合にのみ推奨されます。

emitRouteChunkError

vite/webpack チャンクのロード中にエラーが発生した場合に app:chunkError フックを発行します。デフォルトの動作は、チャンクのロードに失敗した場合に新しいルートへのナビゲーションで新しいルートをリロードすることです。

デフォルトでは、Nuxt は新しいルートへのナビゲーション時にチャンクのロードに失敗した場合 (automatic) も新しいルートをリロードします。

automatic-immediate を設定すると、Nuxt はチャンクのロードに失敗した直後に現在のルートをリロードします (ナビゲーションを待つことなく)。これは、ナビゲーションによってトリガーされないチャンクエラー、たとえば Nuxt アプリが遅延コンポーネントのロードに失敗した場合などに役立ちます。この動作の潜在的な欠点は、意図しないリロードです。たとえば、アプリがエラーの原因となったチャンクを必要としない場合などです。

これを false に設定することで自動処理を無効にしたり、manual に設定することでチャンクエラーを手動で処理したりできます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    emitRouteChunkError: 'automatic', // or 'automatic-immediate', 'manual' or false
  },
})

enforceModuleCompatibility

Nuxt モジュールが互換性がない場合に、Nuxt がエラーをスロー (およびロードに失敗) するかどうか。

この機能はデフォルトで無効になっています。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    enforceModuleCompatibility: true,
  },
})

restoreState

チャンクエラーまたは手動の reloadNuxtApp() 呼び出し後にページをリロードしたときに、Nuxt アプリの状態を sessionStorage から復元できるようにします。

ハイドレーションエラーを避けるため、Vue アプリがマウントされた後にのみ適用されます。つまり、最初のロード時にちらつきが発生する可能性があります。

これは予期しない動作を引き起こす可能性があるため、有効にする前によく検討し、自動生成されたキーはビルド間で一致しない可能性があるため、useState に明示的なキーを提供することを検討してください。
nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    restoreState: true,
  },
})

inlineRouteRules

defineRouteRules を使用して、ページレベルでルートルールを定義します。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    inlineRouteRules: true,
  },
})

ページの path に基づいて、一致するルートルールが作成されます。

defineRouteRules ユーティリティで詳細を確認してください。
詳細については、Docs > 4 X > Guide > Concepts > Rendering#hybrid Rendering を参照してください。

renderJsonPayloads

複雑な型の復元をサポートする JSON ペイロードのレンダリングを可能にします。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    renderJsonPayloads: false,
  },
})

noVueServer

Nitro 内の Vue サーバーレンダラーエンドポイントを無効にします。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    noVueServer: true,
  },
})

parseErrorData

サーバーエラーページをレンダリングするときに error.data をパースするかどうか。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    parseErrorData: false,
  },
})

payloadExtraction

nuxt generate で生成されたページのペイロードの抽出を有効にします。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    payloadExtraction: true,
  },
})

clientFallback

SSR でエラーが発生した場合に、クライアント側でコンテンツをレンダリングするための実験的な <NuxtClientFallback> コンポーネントを有効にします。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    clientFallback: true,
  },
})

crossOriginPrefetch

Speculation Rules API を使用したクロスオリジンプリフェッチを有効にします。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    crossOriginPrefetch: true,
  },
})
Speculation Rules API について詳しく読む。

viewTransition

クライアントサイドルーターとの View Transition API 統合を有効にします。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    viewTransition: true,
  },
})
https://stackblitz.com/edit/nuxt-view-transitions?file=app.vue でライブの例を読んで編集してください。
View Transition API について詳しく読む。

writeEarlyHints

node サーバーを使用している場合に、早期ヒントの書き込みを有効にします。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    writeEarlyHints: true,
  },
})

componentIslands

<NuxtIsland> および .island.vue ファイルを使用した実験的なコンポーネントアイランドのサポートを有効にします。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    componentIslands: true, // false or 'local+remote'
  },
})
詳細については、Docs > 4 X > Guide > Directory Structure > App > Components#server Components を参照してください。
GitHub でサーバーコンポーネントのロードマップをフォローできます。

localLayerAliases

レイヤー内の ~~~@@@ エイリアスを、それぞれのレイヤーソースおよびルートディレクトリに関して解決します。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    localLayerAliases: false,
  },
})

typedPages

新しい実験的な型付きルーターを有効にするには、unplugin-vue-router.

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    typedPages: true,
  },
})

これにより、デフォルトで navigateTo<NuxtLink>router.push() などの型付き使用が可能になります。

const route = useRoute('route-name') を使用すると、ページ内で型付きパラメーターを取得することもできます。

shamefully-hoist=true を使用せずに pnpm を使用する場合、この機能が動作するためには unplugin-vue-router を開発依存関係としてインストールする必要があります。

watcher

Nuxt の監視サービスとして使用される代替ウォッチャーを設定します。

Nuxt はデフォルトで chokidar-granular を使用します。これは、監視から除外されたトップレベルディレクトリ (例: node_modules.git) を無視します。

代わりに parcel を設定すると、@parcel/watcher が使用され、大規模なプロジェクトや Windows プラットフォームでパフォーマンスが向上する可能性があります。

ソースディレクトリ内のすべてのファイルを監視するために chokidar を設定することもできます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    watcher: 'chokidar-granular', // 'chokidar' or 'parcel' are also options
  },
})

sharedPrerenderData

Nuxt は、プリレンダリングされたページ間でペイロードデータを自動的に共有します。useAsyncData または useFetch を使用し、異なるページで同じデータをフェッチするサイトをプリレンダリングする場合、これによりパフォーマンスが大幅に向上する可能性があります。

必要に応じて、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    sharedPrerenderData: false,
  },
})

この機能を有効にする際には、データの固有のキーが常に同じデータに解決されるようにすることが特に重要です。たとえば、特定のページに関連するデータをフェッチするために useAsyncData を使用している場合、そのデータに一意に一致するキーを提供する必要があります。( useFetch はこれを自動的に行うはずです。)

// This would be unsafe in a dynamic page (e.g. `[slug].vue`) because the route slug makes a difference
// to the data fetched, but Nuxt can't know that because it's not reflected in the key.
const route = useRoute()
const { data } = await useAsyncData(async () => {
  return await $fetch(`/api/my-page/${route.params.slug}`)
})
// Instead, you should use a key that uniquely identifies the data fetched.
const { data } = await useAsyncData(route.params.slug, async () => {
  return await $fetch(`/api/my-page/${route.params.slug}`)
})

clientNodeCompat

この機能により、Nuxt はクライアントビルドで Node.js インポートを自動的にポリフィルします。unenv.

ブラウザで Buffer のようなグローバルを機能させるには、手動で注入する必要があります。
import { Buffer } from 'node:buffer'

globalThis.Buffer ||= Buffer

scanPageMeta

Nuxt は、ビルド時にモジュール (特に aliasnamepathredirectpropsmiddleware) に definePageMeta で定義されたルートメタデータの一部を公開します。

これは、変数や条件付き割り当てではなく、静的または文字列/配列でのみ機能します。詳細については、元の問題を参照してください。

デフォルトでは、ページメタデータは pages:extend ですべてのルートが登録された後にのみスキャンされます。その後、別のフックである pages:resolved が呼び出されます。

プロジェクトで問題が発生する場合は、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    scanPageMeta: false,
  },
})

cookieStore

Cookie の更新をリッスンし (ブラウザがサポートしている場合)、useCookie の参照値をリフレッシュする CookieStore サポートを有効にします。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    cookieStore: false,
  },
})
CookieStore について詳しく読む。

buildCache

設定とソースファイルのハッシュに基づいて Nuxt ビルドアーティファクトをキャッシュします。

これは、アプリの Vue/Nitro 部分の srcDir および serverDir 内のソースファイルにのみ機能します。

このフラグはデフォルトで無効になっていますが、有効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    buildCache: true,
  },
})

有効にすると、以下のファイルへの変更によって完全な再ビルドがトリガーされます。

ディレクトリ構造
.nuxtrc
.npmrc
package.json
package-lock.json
yarn.lock
pnpm-lock.yaml
tsconfig.json
bun.lock
bun.lockb

さらに、srcDir 内のファイルへの変更は、Vue クライアント/サーバーバンドルの再ビルドをトリガーします。Nitro は常に再ビルドされます (ただし、Nitro がキャッシュ可能なアーティファクトとそのハッシュを通知できるようにするための作業が進行中です)。

最大 10 個のキャッシュ tarball が保持されます。

checkOutdatedBuildInterval

新しいビルドをチェックする時間間隔 (ミリ秒単位) を設定します。experimental.appManifestfalse の場合、無効になります。

無効にするには false に設定します。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    checkOutdatedBuildInterval: 3600000, // 1 hour, or false to disable
  },
})

extraPageMetaExtractionKeys

definePageMeta() マクロは、ページに関するビルド時メタデータを収集するための便利な方法です。Nuxt 自体は、リダイレクト、ページエイリアス、カスタムパスなどの内部機能を強化するために使用される、サポートされているキーのセットリストを提供します。

このオプションを使用すると、scanPageMeta を使用する際に、ページメタデータから追加のキーを抽出できます。

<script lang="ts" setup>
definePageMeta({
  foo: 'bar',
})
</script>
export default defineNuxtConfig({
  experimental: {
    extraPageMetaExtractionKeys: ['foo'],
  },
  hooks: {
    'pages:resolved' (ctx) {
      // ✅ foo is available
    },
  },
})

これにより、モジュールはビルドコンテキストでページメタデータから追加のメタデータにアクセスできます。モジュール内でこれを使用する場合、NuxtPage タイプに独自のキーを追加することもお勧めします。

ナビゲーションの前に単一のアニメーションフレームを待ち、ブラウザが再描画してユーザーの操作を認識する機会を与えます。

これにより、プリレンダリングされたルートへのナビゲーション時に INP を削減できます。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    navigationRepaint: false,
  },
})

normalizeComponentNames

Nuxt は、自動生成された Vue コンポーネント名を、コンポーネントを自動インポートするために使用する完全なコンポーネント名と一致するように更新します。

問題が発生した場合は、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    normalizeComponentNames: false,
  },
})

デフォルトでは、手動で設定しない限り、Vue はコンポーネントのファイル名と一致するコンポーネント名を割り当てます。

ディレクトリ構造
├─ components/
├─── SomeFolder/
├───── MyComponent.vue

この場合、Vue から見るとコンポーネント名は MyComponent になります。<KeepAlive> で使用したり、Vue DevTools で識別したりするには、このコンポーネントを使用する必要があります。

しかし、自動インポートするには SomeFolderMyComponent を使用する必要があります。

experimental.normalizeComponentNames を設定すると、これら 2 つの値が一致し、Vue は Nuxt のコンポーネント命名パターンに一致するコンポーネント名を生成します。

spaLoadingTemplateLocation

クライアントオンリーのページ (ssr: false) をレンダリングする場合、オプションでロード画面 (~/spa-loading-template.html から) をレンダリングします。

within に設定すると、次のようにレンダリングされます。

<div id="__nuxt">
  <!-- spa loading template -->
</div>

または、body に設定することで、テンプレートを Nuxt アプリのルートと一緒にレンダリングできます。

<div id="__nuxt"></div>
<!-- spa loading template -->

これにより、クライアントオンリーのページをハイドレーションする際の白い点滅を防ぐことができます。

browserDevtoolsTiming

ブラウザの開発者ツールで Nuxt フックのパフォーマンスマーカーを有効にします。これにより、Chromium ベースのブラウザのパフォーマンスタブで追跡できるパフォーマンスマーカーが追加され、デバッグやパフォーマンスの最適化に役立ちます。

これは開発モードではデフォルトで有効になっています。この機能を無効にする必要がある場合は、そうすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    browserDevtoolsTiming: false,
  },
})
実装の詳細については、PR #29922 を参照してください。
Chrome DevTools Performance API について詳しく学ぶ。

debugModuleMutation

モジュールコンテキストで nuxt.options への変更を記録し、Nuxt 初期化フェーズ中にモジュールが行った設定変更のデバッグに役立ちます。

debug モードが有効な場合、これはデフォルトで有効になっています。この機能を無効にする必要がある場合は、そうすることができます。

明示的に有効にするには

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    debugModuleMutation: true,
  },
})
実装の詳細については、PR #30555 を参照してください。

lazyHydration

これは <Lazy> コンポーネントのハイドレーション戦略を有効にし、コンポーネントが必要になるまでハイドレーションを遅延させることでパフォーマンスを向上させます。

遅延ハイドレーションはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    lazyHydration: false,
  },
})
遅延ハイドレーションについて詳しく読む。

templateImportResolution

テンプレートを追加したモジュールのパスからの Nuxt テンプレートへのインポートの解決を無効にします。

デフォルトでは、Nuxt はテンプレート内のインポートを、テンプレートを追加したモジュールからの相対パスで解決しようとします。これを false に設定すると、この動作が無効になります。特定の環境で解決の競合が発生している場合に役立つことがあります。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    templateImportResolution: false,
  },
})
実装の詳細については、PR #31175 を参照してください。

templateRouteInjection

デフォルトでは、自動インポートされた useRoute() コンポーザブルが返すルートオブジェクトは、<NuxtPage> で表示中の現在のページと同期しています。vue-router のエクスポートされた useRoute や Vue テンプレートで利用できるデフォルトの $route オブジェクトには当てはまりません。

このオプションを有効にすると、mixin が注入され、$route テンプレートオブジェクトが Nuxt が管理する useRoute() と同期するように維持されます。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    templateRouteInjection: false,
  },
})

decorators

このオプションは、Nuxt/Nitro アプリ全体でデコレータ構文を有効にします。esbuild.

長い間、TypeScript は compilerOptions.experimentalDecorators を介してデコレータをサポートしていました。この実装は TC39 標準化プロセスよりも先行していました。現在、デコレータはステージ 3 提案であり、TS 5.0 以降では特別な設定なしでサポートされています (参照:https://github.com/microsoft/TypeScript/pull/52582GlobalComponentshttps://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/#decorators).

experimental.decorators を有効にすると、TC39 提案のサポートが有効になり、TypeScript の以前の compilerOptions.experimentalDecorators 実装のサポートは有効になりません。

これが最終的に JS 標準に組み込まれるまでには変更がある可能性があることに注意してください。

使用方法

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    decorators: true,
  },
})
app/app.vue
function something (_method: () => unknown) {
  return () => 'decorated'
}

class SomeClass {
  @something
  public someMethod () {
    return 'initial'
  }
}

const value = new SomeClass().someMethod()
// this will return 'decorated'

defaults

これにより、コア Nuxt コンポーネントおよびコンポーザブルのデフォルトオプションを指定できます。

これらのオプションは、将来 app.config または app/ ディレクトリに移動される可能性があります。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    defaults: {
      nuxtLink: {
        componentName: 'NuxtLink',
        prefetch: true,
        prefetchOn: {
          visibility: true,
        },
      },
      useAsyncData: {
        deep: true,
      },
    },
  },
})

purgeCachedData

ルートナビゲーション時に Nuxt の静的および asyncData キャッシュをクリーンアップするかどうか。

Nuxt は、useAsyncData および nuxtApp.static.data からキャッシュされたデータを自動的にパージします。これにより、メモリリークを防ぎ、必要に応じて新しいデータがロードされることを保証しますが、無効にすることも可能です。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    purgeCachedData: false,
  },
})
実装の詳細については、PR #31379 を参照してください。

granularCachedData

useAsyncDatauseFetch のデータをリフレッシュする際 (watchrefreshNuxtData()、または手動の refresh() 呼び出しのいずれかによって)、getCachedData からの結果を呼び出し、使用するかどうか。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    granularCachedData: false,
  },
})
実装の詳細については、PR #31373 を参照してください。

headNext

ヘッドの最適化を使用する

  • Capo.js ヘッドプラグインを追加して、ヘッド内のタグをよりパフォーマンスの高い方法でレンダリングします。
  • ハッシュハイドレーションプラグインを使用して初期ハイドレーションを削減します。

このフラグはデフォルトで有効になっていますが、この機能を無効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    headNext: false,
  },
})

pendingWhenIdle

useAsyncData および useFetch について、データがまだフェッチされていないときに pendingtrue であるべきかどうか。

このフラグはデフォルトで無効になっていますが、この機能を有効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    pendingWhenIdle: true,
  },
})

entryImportMap

デフォルトでは、Nuxt はインポートマップを使用してバンドルのエントリーチャンクを解決することで、チャンクの安定性を向上させます。

これにより、<head> タグの先頭にインポートマップが注入されます。

<script type="importmap">{"imports":{"#entry":"/_nuxt/DC5HVSK5.js"}}</script>

Vite によって出力されるスクリプトチャンク内では、インポートは #entry から行われます。これは、エントリーへの変更が、それ以外は変更されていないチャンクを無効にしないことを意味します。

Nuxt は、インポートマップをサポートしないブラウザを含むように vite.build.target を設定した場合、または vite.build.rollupOptions.output.entryFileNames[hash] を含まない値に設定した場合、この機能をスマートに無効にします。

この機能を無効にする必要がある場合は、そうすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    entryImportMap: false,
  },
  // or, better, simply tell vite your desired target
  // which nuxt will respect
  vite: {
    build: {
      target: 'safari13',
    },
  },
})

typescriptPlugin

@dxup/nuxt モジュールを使用して、TypeScript 開発者エクスペリエンスを強化します。

この実験的プラグインは、Nuxt アプリケーションで TypeScript を使用する際の DX を向上させるための、改善された TypeScript 統合と開発ツールを提供します。

このフラグはデフォルトで無効になっていますが、この機能を有効にすることができます。

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    typescriptPlugin: true,
  },
})
この機能を使用するには、以下が必要です。
  • typescript が依存関係としてインストールされていること。
  • VS Code をワークスペースの TypeScript バージョンを使用するように設定する (参照:VS Code のドキュメント)
@dxup/nuxt について詳しく学ぶ。