app.config.ts
Nuxtは、app.config
設定ファイルを提供しており、ライフサイクル内またはnuxtプラグインを使用してランタイム時に更新し、HMR(ホットモジュールリプレースメント)で編集できる機能を利用して、アプリケーション内でリアクティブな設定を公開できます。
app.config.ts
ファイルを使用して、ランタイムアプリの設定を簡単に提供できます。.ts
、.js
、または.mjs
のいずれかの拡張子を持つことができます。
export default defineAppConfig({
foo: 'bar'
})
app.config
ファイル内には、機密性の高い値を入れないでください。ユーザーのクライアントバンドルに公開されます。使い方
設定と環境変数をアプリの残りの部分に公開するには、app.config
ファイルで設定を定義する必要があります。
export default defineAppConfig({
theme: {
primaryColor: '#ababab'
}
})
これで、useAppConfig
コンポーザブルを使用して、ページをサーバーでレンダリングするときとブラウザの両方でtheme
に普遍的にアクセスできます。
<script setup lang="ts">
const appConfig = useAppConfig()
console.log(appConfig.theme)
</script>
updateAppConfig
ユーティリティを使用して、ランタイム時にapp.config
を更新できます。
<script setup>
const appConfig = useAppConfig() // { foo: 'bar' }
const newAppConfig = { foo: 'baz' }
updateAppConfig(newAppConfig)
console.log(appConfig) // { foo: 'baz' }
</script>
アプリ設定の型付け
Nuxtは、提供されたアプリ設定からTypeScriptインターフェイスを自動的に生成しようとするため、自分で型付けする必要はありません。
ただし、自分で型付けたい場合もあります。型付けしたい可能性のあることは2つあります。
アプリ設定入力
AppConfigInput
は、アプリ設定の設定時に有効な*入力*オプションを宣言しているモジュール作成者が使用する可能性があります。これはuseAppConfig()
の型には影響しません。
declare module 'nuxt/schema' {
interface AppConfigInput {
/** Theme configuration */
theme?: {
/** Primary app color */
primaryColor?: string
}
}
}
// It is always important to ensure you import/export something when augmenting a type
export {}
アプリ設定出力
useAppConfig()
の呼び出し結果を型付けしたい場合は、AppConfig
を拡張します。
AppConfig
を型付けする際には、Nuxtが実際に定義されたアプリ設定から推論する型を上書きするため、注意してください。declare module 'nuxt/schema' {
interface AppConfig {
// This will entirely replace the existing inferred `theme` property
theme: {
// You might want to type this value to add more specific types than Nuxt can infer,
// such as string literal types
primaryColor?: 'red' | 'blue'
}
}
}
// It is always important to ensure you import/export something when augmenting a type
export {}
マージ戦略
Nuxtは、アプリケーションのレイヤー内で、AppConfig
に対してカスタムマージ戦略を使用します。
この戦略は、Function Mergerを使用して実装されます。これにより、値として配列を持つapp.config
内のすべてのキーに対してカスタムマージ戦略を定義できます。
app.config
では使用できません。これが使用方法の例です
export default defineAppConfig({
// Default array value
array: ['hello'],
})
既知の制限事項
Nuxt v3.3の時点で、app.config.ts
ファイルはNitroと共有されており、これにより次の制限が発生します。
app.config.ts
にVueコンポーネントを直接インポートすることはできません。- 一部の自動インポートは、Nitroコンテキストでは使用できません。
これらの制限は、NitroがVueコンポーネントのフルサポートなしでアプリ設定を処理するために発生します。
回避策としてNitro設定でViteプラグインを使用することは可能ですが、このアプローチはお勧めしません
export default defineNuxtConfig({
nitro: {
vite: {
plugins: [vue()]
}
}
})
関連する問題
Nitro v3は、アプリ設定のサポートを削除することにより、これらの制限を解決します。このプルリクエストで進捗状況を追跡できます。