nuxt logo

Tradução da Documentação (Não Oficial)

Configuração em Tempo de Execução

O Nuxt fornece uma API de configuração em tempo de execução para expor configurações e segredos dentro de sua aplicação.

Expondo

Para expor configurações e variáveis de ambiente para o restante de sua aplicação, você precisará definir a configuração em tempo de execução no seu arquivo nuxt.config, usando a opção runtimeConfig.

nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    // As chaves privadas que estão disponíveis apenas no lado do servidor
    apiSecret: '123',
    // Chaves dentro de public, também serão expostas para o lado do cliente
    public: {
      apiBase: '/api'
    }
  }
})

Ao adicionar apiBase ao runtimeConfig.public, o Nuxt o adiciona a cada carga de página. Podemos acessar apiBase universalmente tanto no servidor quanto no navegador.

const runtimeConfig = useRuntimeConfig()

console.log(runtimeConfig.apiSecret)
console.log(runtimeConfig.public.apiBase)

A configuração pública em tempo de execução é acessível em templates Vue com $config.public.

Serialização

Sua configuração em tempo de execução será serializada antes de ser passada para o Nitro. Isso significa que qualquer coisa que não possa ser serializada e depois desserializada (como funções, Sets, Maps, etc.), não deve ser definida no seu nuxt.config.

Em vez de passar objetos ou funções não serializáveis para sua aplicação a partir do seu nuxt.config, você pode colocar esse código em um plugin ou middleware do Nuxt ou Nitro.

Variáveis de Ambiente

A maneira mais comum de fornecer configuração é usando Variáveis de Ambiente.

O CLI do Nuxt tem suporte embutido para ler seu arquivo .env em desenvolvimento, build e generate. Mas quando você executa seu servidor construído, seu arquivo .env não será lido.

Veja também guide > directory-structure > env

Os valores de configuração em tempo de execução são automaticamente substituídos por variáveis de ambiente correspondentes em tempo de execução.

Existem dois requisitos principais:

  1. Suas variáveis desejadas devem ser definidas no seu nuxt.config. Isso garante que variáveis de ambiente arbitrárias não sejam expostas ao código da sua aplicação.

  2. Apenas uma variável de ambiente especialmente nomeada pode substituir uma propriedade de configuração em tempo de execução. Ou seja, uma variável de ambiente em maiúsculas começando com NUXT_ que usa _ para separar chaves e mudanças de caso.

Definir o padrão dos valores de runtimeConfig para variáveis de ambiente com nomes diferentes (por exemplo, definir myVar para process.env.OTHER_VARIABLE) só funcionará durante o tempo de build e falhará em tempo de execução. É aconselhável usar variáveis de ambiente que correspondam à estrutura do seu objeto runtimeConfig.

Assista a um vídeo de Alexander Lichter mostrando o principal erro que os desenvolvedores cometem ao usar runtimeConfig.

Exemplo

.env
NUXT_API_SECRET=api_secret_token
NUXT_PUBLIC_API_BASE=https://nuxtjs.org
nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    apiSecret: '', // pode ser substituído pela variável de ambiente NUXT_API_SECRET
    public: {
      apiBase: '', // pode ser substituído pela variável de ambiente NUXT_PUBLIC_API_BASE
    }
  },
})

Leitura

Aplicação Vue

Dentro da parte Vue da sua aplicação Nuxt, você precisará chamar useRuntimeConfig() para acessar a configuração em tempo de execução.

O comportamento é diferente entre o lado do cliente e o lado do servidor:

  • No lado do cliente, apenas chaves em runtimeConfig.public e runtimeConfig.app (que é usado internamente pelo Nuxt) estão disponíveis, e o objeto é tanto gravável quanto reativo.

  • No lado do servidor, toda a configuração em tempo de execução está disponível, mas é somente leitura para evitar compartilhamento de contexto.

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

console.log('Configuração em tempo de execução:', config)
if (import.meta.server) {
  console.log('Segredo da API:', config.apiSecret)
}
</script>

<template>
  <div>
    <div>Verifique o console do desenvolvedor!</div>
  </div>
</template>

Nota de segurança: Tenha cuidado para não expor chaves de configuração em tempo de execução para o lado do cliente, seja renderizando-as ou passando-as para useState.

Plugins

Se você quiser usar a configuração em tempo de execução dentro de qualquer plugin (personalizado), você pode usar useRuntimeConfig() dentro da sua função defineNuxtPlugin.

plugins/config.ts
export default defineNuxtPlugin((nuxtApp) => {
  const config = useRuntimeConfig()

  console.log('URL base da API:', config.public.apiBase)
});

Rotas do Servidor

Você também pode acessar a configuração em tempo de execução dentro das rotas do servidor usando useRuntimeConfig.

server/api/test.ts
export default defineEventHandler(async (event) => {
  const { apiSecret } = useRuntimeConfig(event)
  const result = await $fetch('https://my.api.com/test', {
    headers: {
      Authorization: `Bearer ${apiSecret}`
    }
  })
  return result
})

Passar o event como argumento para useRuntimeConfig é opcional, mas é recomendado passá-lo para obter a configuração em tempo de execução substituída por variáveis de ambiente em tempo de execução para rotas do servidor.

Tipagem da Configuração em Tempo de Execução

O Nuxt tenta gerar automaticamente uma interface typescript a partir da configuração em tempo de execução fornecida usando unjs/untyped.

Mas também é possível tipar sua configuração em tempo de execução manualmente:

index.d.ts
declare module 'nuxt/schema' {
  interface RuntimeConfig {
    apiSecret: string
  }
  interface PublicRuntimeConfig {
    apiBase: string
  }
}
// É sempre importante garantir que você importe/exports algo ao aumentar um tipo
export {}

nuxt/schema é fornecido como uma conveniência para os usuários finais acessarem a versão do esquema usada pelo Nuxt em seu projeto. Autores de módulos devem, em vez disso, aumentar @nuxt/schema.