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
.
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.
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:
-
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. -
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
NUXT_API_SECRET=api_secret_token
NUXT_PUBLIC_API_BASE=https://nuxtjs.org
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
eruntimeConfig.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.
<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
.
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
.
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:
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
.
※Esta página é uma tradução não oficial da documentação oficial do Nuxt.js.
A página correspondente na documentação oficial está aqui:
https://nuxt.com/docs/3.x/guide/going-further/runtime-config