app.config.ts
使用 App Config 文件在应用程序中公开响应式配置。
Nuxt 提供了一个 app.config
配置文件,用于在应用程序中公开响应式配置,并能够在生命周期内或使用 nuxt 插件进行运行时更新,并通过 HMR(热模块替换)进行编辑。
您可以轻松地使用 app.config.ts
文件提供运行时应用配置。它可以具有 .ts
、.js
或 .mjs
扩展名。
export default defineAppConfig({
foo: 'bar'
})
不要在 app.config
文件中放置任何秘密值。它会暴露给用户客户端包。
配置自定义 srcDir
时,请确保将 app.config
文件放置在新的 srcDir
路径的根目录。
用法
要将配置和环境变量公开给应用程序的其余部分,您需要在 app.config
文件中定义配置。
export default defineAppConfig({
theme: {
primaryColor: '#ababab'
}
})
现在,我们可以在服务器渲染页面和浏览器中使用 useAppConfig
组合式来全局访问 theme
。
const appConfig = useAppConfig()
console.log(appConfig.theme)
updateAppConfig
工具可用于在运行时更新 app.config
。
const appConfig = useAppConfig() // { foo: 'bar' }
const newAppConfig = { foo: 'baz' }
updateAppConfig(newAppConfig)
console.log(appConfig) // { foo: 'baz' }
类型化应用配置
Nuxt 尝试从提供的应用配置自动生成 TypeScript 接口,因此您不必自己键入。
然而,在某些情况下,您可能希望自己键入。有两种可能的情况您可能想要键入。
应用配置输入
AppConfigInput
可能被模块作者用来声明设置应用配置时的有效 输入 选项。这不会影响 useAppConfig()
的类型。
declare module 'nuxt/schema' {
interface AppConfigInput {
/** 主题配置 */
theme?: {
/** 应用的主色 */
primaryColor?: string
}
}
}
// 在增强类型时,确保导入/导出某些内容总是很重要的
export {}
应用配置输出
如果您想要键入调用 useAppConfig()
的结果,那么您将需要扩展 AppConfig
。
在键入 AppConfig
时要小心,因为您将覆盖 Nuxt 从您实际定义的应用配置中推断的类型。
declare module 'nuxt/schema' {
interface AppConfig {
// 这将完全替换现有的推断 `theme` 属性
theme: {
// 您可能希望键入此值以添加比 Nuxt 能推断的更具体的类型,
// 例如字符串字面量类型
primaryColor?: 'red' | 'blue'
}
}
}
// 在增强类型时,确保导入/导出某些内容总是很重要的
export {}
合并策略
Nuxt 在应用程序的层中使用自定义合并策略来处理 AppConfig
。
此策略是使用函数合并器实现的,它允许为 app.config
中每个具有数组值的键定义自定义合并策略。
函数合并器只能在扩展层中使用,而不能在项目的主 app.config
中使用。
以下是如何使用的示例:
export default defineAppConfig({
// 默认数组值
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()]
}
}
})
使用此解决方法可能导致意外行为和错误。Vue 插件是许多在 Nitro 上下文中不可用的插件之一。
相关问题:
Nitro v3 将通过移除对应用配置的支持来解决这些限制。 您可以在此拉取请求中跟踪进度。
※此页面是 Nuxt.js 官方文档的非官方翻译页面。