Environment Nuxt 4
https://nuxt.com/docs/4.x/guide/going-further/runtime-config#environment-variables
En
nuxt.config.ts
, defines la secciónruntimeConfig
. Puedes separar configuraciones:- Privadas (solo servidor)
- Públicas (cliente y servidor)
Para usar variables de entorno que reemplacen estos valores en tiempo de ejecución, deben cumplir 2 requisitos:
- Deben estar definidas en
runtimeConfig
. - El nombre de la variable debe seguir esta convención: empezar con
NUXT_
, usar_
para separar niveles y reflejar la misma estructura.
- Deben estar definidas en
Ejemplo de configuración y
.env
:envNUXT_API_SECRET=api_secret_token NUXT_PUBLIC_API_BASE=https://nuxtjs.org
ts// nuxt.config.ts export default defineNuxtConfig({ runtimeConfig: { apiSecret: "", // será sustituido por NUXT_API_SECRET public: { apiBase: "", // será sustituido por NUXT_PUBLIC_API_BASE }, }, });
Acceso a la configuración desde el código:
- Cliente (Vue): solo puedes ver
public
(yapp
) viauseRuntimeConfig()
. - Servidor: puedes acceder al config completo, pero es solo lectura.
- Cliente (Vue): solo puedes ver
Tutorial paso a paso
1. Configuración del archivo .env
Crea un archivo .env
en la raíz del proyecto (y no lo subas al repositorio):
env
NUXT_API_SECRET=12345-privada-secreta
NUXT_PUBLIC_API_BASE=https://api.miapp.com
2. Configura runtimeConfig
en nuxt.config.ts
ts
export default defineNuxtConfig({
runtimeConfig: {
apiSecret: "", // privada: sólo servidor
public: {
apiBase: "", // pública: cliente + servidor
},
},
});
Esto asegura que las variables estén disponibles tanto en desarrollo como en producción y que se puedan sobrescribir en ejecución mediante las variables .env
con prefijo NUXT_
.
3. Cómo consumir estas variables
a) En un componente Vue (cliente/SSR):
vue
<script setup lang="ts">
const config = useRuntimeConfig();
console.log("Base API (cliente):", config.public.apiBase);
// config.apiSecret NO está disponible aquí
</script>
b) En un endpoint Server (/server/api/...
):
ts
export default defineEventHandler((event) => {
const config = useRuntimeConfig(event);
console.log("API base:", config.public.apiBase); // sí está disponible
console.log("API secret:", config.apiSecret); // solo servidor
});
¿Por qué usar Runtime Config?
Característica | Beneficio |
---|---|
Privadas vs públicas | Asegura que datos sensibles no lleguen al cliente |
Variables con NUXT_ | Permiten sobrescribir configuraciones en runtime sin rebuild |
Acceso diferenciado | public desde cliente; apiSecret solo en servidor |
Código completo de ejemplo
Archivo .env
:
env
NUXT_API_SECRET=mi-secreta-clave-2025
NUXT_PUBLIC_API_BASE=https://api.miapp.com
nuxt.config.ts
:
ts
export default defineNuxtConfig({
runtimeConfig: {
apiSecret: "",
public: {
apiBase: "",
},
},
});
Componente Vue:
vue
<script setup lang="ts">
const config = useRuntimeConfig();
console.log("API base en cliente:", config.public.apiBase);
// config.apiSecret – no disponible
</script>
Endpoint API:
ts
export default defineEventHandler((event) => {
const config = useRuntimeConfig(event);
// Solo en servidor
return {
base: config.public.apiBase,
secret: config.apiSecret,
};
});