Comprobación previa de portabilidad de .env
Pega el contenido de un archivo .env para detectar valores que Node `dotenv`, Docker/Docker Compose y un shell POSIX interpretarían de forma distinta o que podrían fallar. Todo se procesa en el navegador: lo que pegues no se carga, registra ni envía, algo importante porque los archivos .env reales suelen contener secretos.
El análisis se realiza localmente en tu navegador. El archivo nunca se carga al servidor.
Cómo usar esta herramienta
- Pega el contenido de tu archivo .env (o un fragmento representativo). El análisis se realiza en el navegador, así que los valores secretos reales no salen de esta página.
- Selecciona «Analizar archivo .env».
- Revisa cada línea señalada: qué es ambiguo o arriesgado y en qué difieren dotenv, Docker Compose o un shell POSIX.
- Aplica la reescritura sugerida cuando se ofrezca. Algunos casos (comillas sin cerrar, clave duplicada, referencia de interpolación o nombre de clave no válido) quedan para resolución manual porque adivinar sería peor que no hacerlo.
Supuestos
- Espera una asignación KEY=value por línea, líneas de comentario con prefijo `#` y líneas vacías: la forma convencional de .env usada por dotenv, `env_file` de Docker Compose y el shell POSIX.
- Un valor solo se considera «entrecomillado» si comienza y termina con un par coincidente de comillas dobles o simples. Una comilla suelta en otra posición es precisamente el caso que comprueba la regla de comillas sin cerrar.
- No supone qué debería significar una clave duplicada, una referencia de interpolación o un nombre de clave no válido: los señala como problemas sin resolverlos silenciosamente.
Fuentes y datos de referencia
Metodología
Cada línea se divide en clave, valor sin procesar e indicador de entrecomillado; después se comprueban diferencias documentadas entre dotenv, Docker/Docker Compose y un shell POSIX: espacios sin comillas y `#` sin comillas (interpretación distinta o truncamiento), prefijo `export` (aceptado, eliminado o rechazado según el analizador), comillas sin cerrar (comportamiento multilínea inconsistente), interpolación `$VAR`/`${VAR}` (expandida por el shell/Compose y literal en dotenv salvo que también se use dotenv-expand), claves duplicadas (sobrescritas silenciosamente por la última aparición), espacios finales en valores sin comillas (conservados por dotenv, eliminados por una exportación de shell) y nombres de clave que no son identificadores válidos del shell POSIX. Solo se reescriben casos seguros: entrecomillar valores, eliminar espacios finales o quitar el prefijo export. Nunca se adivina la intención.
Ejemplo resuelto
Un valor que hace referencia a otra variable
Datos de entrada: API_URL=${BASE_URL}/api
Resultado: Por defecto, dotenv NO expande `${BASE_URL}`: el texto literal termina en API_URL salvo que también se use el paquete dotenv-expand. En cambio, un shell POSIX que cargue el archivo y Docker Compose sí la expanden. Se advierte del problema y no se reescribe porque no se puede inferir si se pretendía expandirla.
Prefijo export
Datos de entrada: export APP_NAME=My Example App
Resultado: Es sintaxis válida de shell POSIX, pero dotenv y Docker Compose discrepan sobre `export`: algunos lo rechazan y otros lo incorporan al nombre de clave. Se advierte y se propone eliminarlo de forma segura, ya que dotenv (consumidor común de estos archivos) espera la forma simple. El espacio sin comillas del valor se señala por separado como problema de mayor gravedad.
Clave duplicada
Datos de entrada: TIMEOUT=30 TIMEOUT=60
Resultado: La mayoría de los analizadores, incluido dotenv, conservan silenciosamente solo la última aparición: `TIMEOUT=30` se descarta. Se señala la segunda aparición como advertencia e indica la línea que reemplaza.
Orientación práctica
- Entrecomilla cualquier valor que contenga un espacio o `#`, aunque dotenv lo acepte sin comillas: las comillas hacen que el archivo se comporte igual si se carga directamente desde un shell o lo lee Docker Compose.
- Evita referencias `$VAR` / `${VAR}` en archivos .env salvo que hayas confirmado que todos sus consumidores las expanden igual. Es una de las causas más comunes de problemas de portabilidad .env.
- No dependas del prefijo `export` para compatibilidad con herramientas basadas en dotenv. Usa `KEY=value` sin prefijo y un script envolvente de shell si también necesitas cargar el archivo directamente.
Errores comunes
- Suponer que un valor es portable porque «la aplicación arranca»: un espacio sin comillas, una referencia sin expandir o una clave duplicada sobrescrita pueden cargarse y aun así producir un valor incorrecto.
- Tratar los nombres de clave .env como etiquetas libres. Los analizadores permisivos como dotenv aceptan guiones o dígitos iniciales, pero el archivo falla si se carga desde un shell real.
Preguntas frecuentes
¿Es seguro pegar aquí valores secretos reales?
El contenido que pegas se analiza en tu navegador y no se envía. El sitio sí registra analítica de páginas a nivel general; esa analítica no incluye el contenido pegado. Aun así, aplica el mismo criterio que con cualquier herramienta: si no te sientes cómodo pegando un valor, usa un marcador con la misma forma (longitud y caracteres especiales). Estas comprobaciones solo examinan sintaxis, no el significado del valor.
¿Por qué un espacio sin comillas es un error y un espacio final solo informativo?
Un espacio interno sin comillas rompe la asignación en un shell POSIX o en un analizador estricto de Docker Compose: es un fallo funcional. Los espacios finales después de un valor normal solo pueden añadir un carácter inesperado al leerlo con dotenv; suele ser menos grave y se pueden quitar automáticamente de forma segura.
¿Por qué la herramienta no corrige una clave duplicada o un nombre no válido?
Ambos casos exigen decidir qué pretendías: cuál de los valores duplicados es el correcto o cómo debería llamarse la clave corregida. Adivinar y cambiar el archivo silenciosamente sería peor que señalar el problema para que tú decidas.
¿Por qué `${BASE_URL}` se expande en Compose, pero queda literal en Node dotenv?
Docker Compose realiza interpolación en su configuración, mientras que el paquete `dotenv` no expande referencias a variables de forma predeterminada; en Node suele requerirse otro paquete, como `dotenv-expand`. El comportamiento exacto depende del archivo y del consumidor. Esta comprobación previa señala el riesgo de portabilidad sintáctica; no ejecuta Compose ni dotenv.
Última revisión:
Este comprobador de formas sintácticas no es un analizador completo de shell ni de Docker Compose: reconoce la estructura convencional KEY=value/comentario/línea vacía y las discrepancias indicadas, no todos los casos límite de cada implementación real de .env. Tampoco puede saber qué se pretendía en un caso realmente ambiguo (comillas sin cerrar, referencia de interpolación o clave duplicada); informa de la ambigüedad sin resolverla.
Las preferencias de tema y de herramientas, junto con las listas de herramientas guardadas y recientes, se almacenan solo en este navegador.