¿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 Evrone.
¿Qué es un archivo.env
?
Un archivo .env
o dotenv
es 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-checks
En 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 compare
que 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 detected
Resultados 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 problem
Hemos corregido esto y ahora dotenv-linter
ya 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=YOURSECRETKEYGOESHERE
El prefijo export
permitía exportar las variables de entorno desde un archivo con el comando source
:
$ source .env
Al comprobar dichos archivos, dotenv-linter
siempre 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 problems
En 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-linter
ya 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 problem
Mejoras 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.20
Estos 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 ❤️