app.config.ts
使用App Config文件在应用程序中公开响应式配置。
Nuxt 3提供了一个app.config
配置文件,可以在应用程序中公开响应式配置,并在运行时通过生命周期或使用nuxt插件进行更新,同时还可以使用HMR(热模块替换)进行编辑。
你可以使用app.config.ts
文件轻松提供运行时应用程序配置。它可以是.ts
、.js
或.mjs
扩展名之一。
app.config.ts
export default defineAppConfig({
foo: 'bar'
})
请勿将任何机密值放在
app.config
文件中。它将暴露给用户客户端捆绑包。用法
要将配置和环境变量公开给应用程序的其他部分,你需要在app.config
文件中定义配置。
app.config.ts
export default defineAppConfig({
theme: {
primaryColor: '#ababab'
}
})
当将theme
添加到app.config
中时,Nuxt使用Vite或webpack来打包代码。我们可以使用useAppConfig
组合函数在服务器渲染页面和浏览器中普遍访问theme
。
pages/index.vue
<script setup>
const appConfig = useAppConfig()
console.log(appConfig.theme)
</script>
类型化App Config
Nuxt会尝试根据提供的app config自动生成TypeScript接口,因此你不必自己输入类型。
然而,有些情况下你可能想自己输入类型。有两种可能需要输入类型的情况。
App Config输入
AppConfigInput
可能被模块作者用于声明设置app config时有效的输入选项。这不会影响useAppConfig()
的类型。
index.d.ts
declare module 'nuxt/schema' {
interface AppConfigInput {
/** 主题配置 */
theme?: {
/** 主要应用颜色 */
primaryColor?: string
}
}
}
// 当增强类型时,确保始终导入/导出某些内容是很重要的
export {}
App Config输出
如果你想为调用useAppConfig()
的结果输入类型,那么你需要扩展AppConfig
。
在对
AppConfig
进行类型化时要小心,因为这将覆盖Nuxt从你实际定义的app config中推断出的类型。index.d.ts
declare module 'nuxt/schema' {
interface AppConfig {
// 这将完全替换现有推断的`theme`属性
theme: {
// 你可能希望为这个值输入类型,以添加比Nuxt可以推断的更具体的类型,比如字符串字面量类型
primaryColor?: 'red' | 'blue'
}
}
}
// 当增强类型时,确保始终导入/导出某些内容是很重要的
export {}
合并策略
Nuxt在应用程序的层中使用自定义合并策略来合并AppConfig
。
这个策略是使用函数合并器实现的,它允许为app.config
中具有数组值的每个键定义自定义合并策略。
函数合并器只应在应用程序的基本
app.config
中使用。以下是一个示例:
export default defineAppConfig({
// 默认数组值
array: ['hello'],
})