ランタイム設定
公開
設定と環境変数をアプリケーションの残りの部分に公開するには、nuxt.config ファイルで runtimeConfig オプションを使用してランタイム設定を定義する必要があります。
export default defineNuxtConfig({
runtimeConfig: {
// The private keys which are only available within server-side
apiSecret: '123',
// Keys within public, will be also exposed to the client-side
public: {
apiBase: '/api',
},
},
})
runtimeConfig.public に apiBase を追加すると、Nuxt はそれを各ページペイロードに追加します。サーバーとブラウザの両方で apiBase にユニバーサルにアクセスできます。
const runtimeConfig = useRuntimeConfig()
console.log(runtimeConfig.apiSecret)
console.log(runtimeConfig.public.apiBase)
$config.public を使用してアクセスできます。シリアル化
ランタイム設定は、Nitro に渡される前にシリアル化されます。つまり、シリアル化および逆シリアル化できないもの(関数、Set、Map など)は、nuxt.config に設定すべきではありません。
nuxt.config から非シリアル化可能なオブジェクトや関数をアプリケーションに渡す代わりに、このコードを Nuxt または Nitro のプラグインまたはミドルウェアに配置できます。
環境変数
設定を提供する最も一般的な方法は環境変数.
.env ファイルを読み込む組み込みサポートを備えています。しかし、ビルドされたサーバーを実行すると、.env ファイルは読み込まれません。ランタイム設定値は、実行時に一致する環境変数によって自動的に置き換えられます。
2つの主要な要件があります
- 目的の変数は
nuxt.configで定義されている必要があります。これにより、任意の環境変数がアプリケーションコードに公開されないようにします。 - ランタイム設定プロパティを上書きできるのは、特別な名前の環境変数のみです。つまり、
NUXT_で始まり、キーとケース変更を_で区切る大文字の環境変数です。
runtimeConfig 値のデフォルトを異なる名前の環境変数(たとえば、myVar を process.env.OTHER_VARIABLE に設定するなど)に設定すると、ビルド時のみ機能し、ランタイムでは壊れます。runtimeConfig オブジェクトの構造と一致する環境変数を使用することをお勧めします。例
NUXT_API_SECRET=api_secret_token
NUXT_PUBLIC_API_BASE=https://nuxt.dokyumento.jp
export default defineNuxtConfig({
runtimeConfig: {
apiSecret: '', // can be overridden by NUXT_API_SECRET environment variable
public: {
apiBase: '', // can be overridden by NUXT_PUBLIC_API_BASE environment variable
},
},
})
読み込み
Vue アプリ
Nuxt アプリの Vue 部分では、ランタイム設定にアクセスするために useRuntimeConfig() を呼び出す必要があります。
- クライアント側では、
runtimeConfig.publicおよびruntimeConfig.app(Nuxt が内部的に使用) のキーのみが利用可能であり、オブジェクトは書き込み可能でリアクティブです。 - サーバー側では、ランタイム設定全体が利用可能ですが、コンテキスト共有を避けるために読み取り専用です。
<script setup lang="ts">
const config = useRuntimeConfig()
console.log('Runtime config:', config)
if (import.meta.server) {
console.log('API secret:', config.apiSecret)
}
</script>
<template>
<div>
<div>Check developer console!</div>
</div>
</template>
useState に渡したりして公開しないように注意してください。プラグイン
(カスタム)プラグイン内でランタイム設定を使用したい場合は、defineNuxtPlugin 関数内で useRuntimeConfig() を使用できます。
export default defineNuxtPlugin((nuxtApp) => {
const config = useRuntimeConfig()
console.log('API base URL:', config.public.apiBase)
})
サーバー ルート
サーバー ルート内でも useRuntimeConfig を使用してランタイム設定にアクセスできます。
export default defineEventHandler(async (event) => {
const { apiSecret } = useRuntimeConfig(event)
const result = await $fetch('https://my.api.com/test', {
headers: {
Authorization: `Bearer ${apiSecret}`,
},
})
return result
})
ランタイム設定の型付け
Nuxt は、提供されたランタイム設定から typescript インターフェースを自動的に生成しようとします。unjs/untyped.
しかし、ランタイム設定を手動で型付けすることも可能です
declare module 'nuxt/schema' {
interface RuntimeConfig {
apiSecret: string
}
interface PublicRuntimeConfig {
apiBase: string
}
}
// It is always important to ensure you import/export something when augmenting a type
export {}
nuxt/schema は、エンドユーザーがプロジェクトで使用されているスキーマのバージョンにアクセスするための便利な機能として提供されています。モジュール作成者は、代わりに @nuxt/schema を拡張する必要があります。