app.config.ts
В Nuxt файл app/app.config.ts задаёт реактивную конфигурацию приложения; её можно обновлять в рантайме в хуках жизненного цикла или через плагин, с поддержкой HMR.
Расширения файла: .ts, .js или .mjs.
export default defineAppConfig({
foo: 'bar',
})
app.config — он попадает в клиентский бандл.srcDir файл app.config должен находиться в корне этого пути.Использование
Чтобы выставить конфиг и переменные окружения для приложения, определите их в app.config:
export default defineAppConfig({
theme: {
primaryColor: '#ababab',
},
})
theme будет доступен и при серверном рендере, и в браузере через композабл useAppConfig.
<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>
Типизация App Config
Nuxt пытается автоматически вывести TypeScript-интерфейс из app.config. При необходимости типы можно задать вручную.
Входной App Config (AppConfigInput)
AppConfigInput нужен авторам модулей, чтобы описать допустимые входные опции при задании app config. На тип результата useAppConfig() это не влияет.
declare module 'nuxt/schema' {
interface AppConfigInput {
/** Конфигурация темы */
theme?: {
/** Основной цвет приложения */
primaryColor?: string
}
}
}
// При расширении типов нужен import/export
export {}
Выходной App Config (AppConfig)
Чтобы типизировать результат useAppConfig(), расширяйте интерфейс AppConfig.
AppConfig вы перезаписываете типы, которые Nuxt выводит из вашего app.config.declare module 'nuxt/schema' {
interface AppConfig {
// Это полностью заменит выведенное свойство theme
theme: {
primaryColor?: 'red' | 'blue'
}
}
}
export {}
Стратегия слияния
В слоях Nuxt использует свою стратегию слияния для AppConfig через Function Merger: для каждого ключа с массивом можно задать свою функцию слияния.
app.config проекта.Пример:
export default defineAppConfig({
array: ['hello'],
})
export default defineAppConfig({
array: () => ['bonjour'],
})
Ограничения
Начиная с Nuxt v3.3, app.config.ts используется и в Nitro, из-за чего:
- В
app.config.tsнельзя импортировать Vue-компоненты. - Часть автоимпортов недоступна в контексте Nitro.
Nitro обрабатывает app config без полной поддержки Vue.
Обход через Vite-плагины в конфиге Nitro возможен, но не рекомендуется:
export default defineNuxtConfig({
nitro: {
vite: {
plugins: [vue()],
},
},
})
Связанные issues: