通过 100+ 条技巧学习 Nuxt!

app.config.ts

使用 App Config 文件在您的应用程序中公开响应式配置。

Nuxt 提供一个 app.config 配置文件,以在您的应用程序中公开响应式配置,并能够在生命周期内或使用 nuxt 插件在运行时更新它,并使用 HMR(热模块替换)进行编辑。

您可以使用 app.config.ts 文件轻松提供运行时应用程序配置。它可以使用 .ts.js.mjs 扩展名。

app.config.ts
export default 
defineAppConfig
({
foo
: 'bar'
})
请勿将任何秘密值放入 app.config 文件中。它会暴露给用户客户端包。
在配置自定义 srcDir 时,请确保将 app.config 文件放在新的 srcDir 路径的根目录中。

用法

要将配置和环境变量公开给应用程序的其余部分,您需要在 app.config 文件中定义配置。

app.config.ts
export default 
defineAppConfig
({
theme
: {
primaryColor
: '#ababab'
} })

现在,我们可以在服务器渲染页面时和在浏览器中使用 useAppConfig 组合式函数,全局访问 theme

pages/index.vue
<script setup lang="ts">
const appConfig = useAppConfig()

console.log(appConfig.theme)
</script>

updateAppConfig 实用程序可用于在运行时更新 app.config

pages/index.vue
<script setup>
const appConfig = useAppConfig() // { foo: 'bar' }

const newAppConfig = { foo: 'baz' }

updateAppConfig(newAppConfig)

console.log(appConfig) // { foo: 'baz' }
</script>
阅读有关 updateAppConfig 实用程序的更多信息。

为应用程序配置设置类型

Nuxt 尝试从提供的应用程序配置自动生成 TypeScript 接口,因此您不必自己键入它。

但是,在某些情况下,您可能希望自己键入它。您可能想要键入两种可能的内容。

应用程序配置输入

AppConfigInput 可能会被模块作者使用,他们声明设置应用程序配置时哪些是有效的 _input_ 选项。这不会影响 useAppConfig() 的类型。

index.d.ts
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 从您实际定义的应用程序配置中推断出的类型。
index.d.ts
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 共享,这导致以下限制

  1. 您不能直接在 app.config.ts 中导入 Vue 组件。
  2. 某些自动导入在 Nitro 上下文中不可用。

出现这些限制的原因是 Nitro 在没有完整 Vue 组件支持的情况下处理应用程序配置。

虽然可以在 Nitro 配置中使用 Vite 插件作为一种解决方法,但不建议这样做

nuxt.config.ts
export default defineNuxtConfig({
  nitro: {
    vite: {
      plugins: [vue()]
    }
  }
})
使用此解决方法可能会导致意外行为和错误。Vue 插件是 Nitro 上下文中不可用的众多插件之一。

相关问题

Nitro v3 将通过删除对应用程序配置的支持来解决这些限制。您可以在 此拉取请求中跟踪进度。