¿Cuáles son los cambios más importantes en la versión 3.0.0 de dotenv-linter?
Hemos desarrollado dotenv-linter: una útil herramienta para validar archivos .env. Permite encontrar problemas en archivos .env que pueden pasarse por alto a primera vista y podrían causar que las aplicaciones funcionaran de forma incorrecta. La herramienta es universal y puede conectarse a cualquier proyecto, independientemente del lenguaje de programación que se haya usado. Dotenv-linter se ha desarrollado como un proyecto de código abierto por Mikhail Grachev, ingeniero de software de Singula.
¿Qué es un archivo.env?
Un archivo .env o dotenves un archivo de texto simple que contiene todas las variables de entorno de un proyecto. Guardar la configuración en las variables de entorno es uno de los principios del manifiesto de aplicaciones Twelve-Factor. El archivo .env tiene un sencillo formato de clave-valor, por ejemplo: FOO=BAR
Ya escribimos sobre la versión 2.2.0 de dotenv-linter. Han pasado dos meses y medio desde entonces, y ya estamos preparados para presentarle la nueva versión de dotenv-linter la versión 3.0.0. ¡Aquí encontrará un resumen de los cambios más importantes en esta versión!
Mejoras de la API 👍
En la versión anterior, dotenv-linter tenía varias marcas, que eran básicamente los comandos --fix and --show-checks:
FLAGS:
-f, --fix Automatically fixes warnings
-h, --help Prints help information
--no-backup Prevents .env files from being backed up when modified by -f/--fix
-q, --quiet Doesn't display additional information
-r, --recursive Recursively search and check .env files
--show-checks Shows list of available checks
-v, --version Prints version information
Esto ha causado cierta confusión. Las marcas entraban en conflicto y no funcionaban bien entre sí:
$ dotenv-linter --fix --show-checksEn la nueva versión, hemos corregido este problema y hemos convertido las marcas --fix y --show-checks en los comandos fix y list:
FLAGS:
-h, --help Prints help information
-q, --quiet Doesn't display additional information
-r, --recursive Recursively searches and checks .env files
-v, --version Prints version information
SUBCOMMANDS:
fix Automatically fixes warnings [aliases: f]
list Shows list of available checks [aliases: l]
Comparación de archivos .env 🤲
Además, en la nueva versión hemos añadido el comando compareque permite comparar claves en archivos .env:
$ dotenv-linter compare .env .env.example
Comparing .env
Comparing .env.example
.env is missing keys: BAR
.env.example is missing keys: FOO
Mostrar archivos analizados 👀
Al analizar varios archivos .env no era fácil determinar cuáles se comprobaban con dotenv-linter y cuáles no. Esto podría ocurrir al usar nombres de archivo no estándar, o bien si no se detectaban problemas en estos archivos. En la nueva versión, se muestran los archivos analizados:
$ dotenv-linter
Checking .env
.env:1 LeadingCharacter: Invalid leading character detected
Checking .env.example
Checking .env.test
Found 1 problem
Para deshabilitar esta opción, use la marca --quiet/-q:
$ dotenv-linter --quiet
.env:1 LeadingCharacter: Invalid leading character detectedResultados de colores 🌈
Para mejorar la usabilidad, hemos añadido advertencias de colores:
Puede deshabilitar los resultados de colores mediante la marca --no-color.
Compatibilidad con valores multilínea 💪
Los valores multilínea se pueden guardar en archivos .env. Una de las opciones es similar a esta:
# .env
MULTILINE="new\nline"Pero, al comprobar dichos valores, dotenv-linter solía mostrar una advertencia:
$ dotenv-linter
.env:1 QuoteCharacter: The value has quote characters (', ")
Found 1 problemHemos corregido esto y ahora dotenv-linterya no muestra advertencias para los valores multilínea delimitados mediante comillas.
Compatibilidad con el prefijo export 🔥
Algunas bibliotecas para trabajar con archivos .env (como dotenv, godotenv y python-dotenv) admiten el prefijo export:
# .env
export S3_BUCKET=YOURS3BUCKET
export SECRET_KEY=YOURSECRETKEYGOESHEREEl prefijo export permitía exportar las variables de entorno desde un archivo con el comando source:
$ source .envAl comprobar dichos archivos, dotenv-lintersiempre mostraba advertencias:
$ dotenv-linter
.env:1 IncorrectDelimiter: The export S3_BUCKET key has incorrect delimiter
.env:1 LowercaseKey: The export S3_BUCKET key should be in uppercase
.env:2 IncorrectDelimiter: The export SECRET_KEY key has incorrect delimiter
.env:2 LowercaseKey: The export SECRET_KEY key should be in uppercase
Found 4 problemsEn la nueva versión, hemos añadido compatibilidad con el prefijo export y ahora dotenv-linter ya no muestra ninguna advertencia.
Compatibilidad con espacios 🙌
Otra de las mejoras es la compatibilidad con el uso de espacios en los valores, que se delimitan con comillas:
# .env
WHITESPACES="a b c"Ahora, dotenv-linterya no mostrará advertencia para dichos valores.
Validación mejorada 👌
Además, hemos corregido un problema por el que dotenv-linter no mostraba todas las advertencias a la vez:
$ dotenv-linter fix .env
Fixing .env
Original file was backed up to: ".env_1606422805"
.env:1 KeyWithoutValue: The test key should be with a value or have an equal sign
All warnings are fixed. Total: 1
$ dotenv-linter .env
Checking .env
.env:1 LowercaseKey: The test key should be in uppercase
Found 1 problemMejoras de rendimiento 🚀
Por último, aunque ya era bastante rápido, también hemos mejorado el rendimiento de dotenv-linter. El tiempo máximo de inicio se ha reducido de 9,3 ms a 4,3 ms (más del 50 %).
Para comprobarlo, hemos creado una referencia con la utilidad hyperfine:
Command Mean [ms] Min [ms] Max [ms] Relative
dotenv-linter/dotenv-linter .env 2.7 ± 0.4 2.0 4.3 1.00
wemake-services/dotenv-linter .env 162.6 ± 12.1 153.0 201.3 60.83 ± 10.20Estos son los cambios más importantes de la nueva versión 3.0.0. ¡Gracias a todos los colaboradores! Para apoyar el proyecto, añádalo como favorito o patrocínelo en GitHub.
Puede convertirse en patrocinador en GitHub Sponsors o en OpenCollective ❤️
Al trabajar con archivos .env, pueden pasarse por alto algunos problemas a primera vista o al revisar el código, lo que podría causar problemas de funcionamiento de la aplicación. Aquí es donde resulta útil dotenv-linter, ya que se puede usar en cualquier proyecto, independientemente del lenguaje de programación.