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

  1. 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.
  2. Selecciona «Analizar archivo .env».
  3. Revisa cada línea señalada: qué es ambiguo o arriesgado y en qué difieren dotenv, Docker Compose o un shell POSIX.
  4. 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

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
Errores comunes

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.