Cómo utilizar archivos de entorno con env-cmd
Introducción
Las variables de entorno le permiten cambiar entre su desarrollo local, pruebas, preparación, pruebas de aceptación del usuario (UAT), producción y cualquier otro entorno que sea parte del flujo de trabajo de su proyecto.
En lugar de pasar variables a sus scripts individualmente, env-cmd
le permite agrupar variables en un archivo de entorno ( .env
) y pasarlas a su script.
En este artículo lo instalarás y lo usarás env-cmd
en un proyecto de ejemplo.
Prerrequisitos
Para completar este tutorial, necesitarás:
- Node.js instalado localmente, lo cual puedes hacer siguiendo Cómo instalar Node.js y crear un entorno de desarrollo local .
- Hay una sección opcional sobre cómo agregar archivos a
.gitignore
. Es posible que deba instalarla y configurarlagit
si desea continuar. - También será beneficioso estar familiarizado con la ventana de terminal y un editor de código.
Nota: Este tutorial se ha actualizado para utilizar los comandos env-cmd
posteriores a la versión 9.0.0.
Este tutorial fue verificado con Node v15.14.0, npm
v7.10.0 y env-cmd
v10.0.1.
Paso 1 – Configuración del proyecto
En este tutorial se supone que tienes un nuevo proyecto. Crea un nuevo directorio:
- mkdir env-cmd-example
Luego navega hasta el directorio:
- cd env-cmd-example
En general, se considera una mala práctica enviar los archivos de entorno al sistema de control de versiones. Si el repositorio se bifurca o se comparte, las credenciales estarán disponibles para otros, ya que se registrarán para siempre en el historial del proyecto.
Se recomienda agregar el archivo a su .gitignore
.
Nota: Esto no será necesario para el alcance de este tutorial, pero se presenta aquí con fines educativos.
Inicializar un nuevo git
proyecto:
- git init
Crea un .gitignore
archivo y agrega los patrones para excluir tu archivo de entorno:
.gitignore
.env.env.js.env.json.env-cmdrc
Para este tutorial, puedes excluir .env
, .env.js
, .env.json
, .env-cmdrc
.
Luego, crea un .env
archivo para el proyecto.
Abra el archivo en su editor de código y agregue la siguiente línea de código:
.env
creature=sharkgreen=#008f68yellow=#fae042
Esto define creature
a shark
, green
a #008f68
, yellow
a #fae042
.
Luego, crea un nuevo log.js
archivo:
registro.js
console.log('NODE_ENV:', process.env.NODE_ENV);console.log('Creature:', process.env.creature);console.log('Green:', process.env.green);console.log('Yellow:', process.env.yellow);
Esto registrará las variables definidas previamente en la consola y también imprimirá el NODE_ENV
valor.
Ahora, su ejemplo está preparado para usar archivos de entorno con env-cmd
.
Paso 2 – Usoenv-cmd
Moderno npm
y yarn
puede ejecutarse env-cmd
sin necesidad de dependencia.
Utilice npx :
- npx env-cmd node log.js
O yarn run
:
- yarn run env-cmd node log.js
De lo contrario, puede instalar el paquete como una dependencia o devDependency:
- npm install env-cmd@10.0.1
El env-cmd
paquete instala un script ejecutable llamado env-cmd
que puede llamarse antes que sus scripts para cargar fácilmente variables de entorno desde un archivo externo.
Dependiendo de su configuración, puede hacer referencia env-cmd
de diferentes maneras.
Quizás la forma más compatible entre administradores de paquetes es agregar un script personalizado a su package.json
archivo:
paquete.json
{ "scripts": { "print-log": "env-cmd node log.js" }}
Por ejemplo, con npm
, podrá ejecutar este script personalizado con el siguiente comando:
- npm run print-log
Si prefieres usarlo env-cmd
directamente desde la línea de comandos, puedes llamarlo directamente desde node_modules
:
- ./node_modules/.bin/env-cmd node log.js
De ahora en adelante, este tutorial utilizará este npx
enfoque, pero todos los enfoques están diseñados para funcionar de manera similar.
Ahora, utiliza uno de los enfoques en tu terminal.
Independientemente de cómo elija ejecutar el script, env-cmd
se cargará el .env
archivo y el script de registro informará las variables.
OutputNODE_ENV: undefinedCreature: sharkGreen: #008f68Yellow: #fae042
Es posible que hayas notado que el NODE_ENV
valor es undefined
. Esto se debe a que NODE_ENV
no estaba definido en el .env
archivo.
Es posible pasar NODE_ENV
antes de llamar env-cmd
.
Por ejemplo, aquí está el comando para npx
:
- NODE_ENV=development npx env-cmd node log.js
Ejecute el comando nuevamente con lo NODE_ENV
definido:
OutputNODE_ENV: developmentCreature: sharkGreen: #008f68Yellow: #fae042
En este punto ya has aprendido a utilizar env-cmd
un .env
archivo.
Paso 3 – Uso de diferentes formatos de archivos
env-cmd
De forma predeterminada, se espera un .env
archivo en el directorio raíz del proyecto. Sin embargo, puede cambiar el tipo de archivo y la ruta con la opción --file
( ).-f
Independientemente de cómo lo haga referencia, tiene una amplia variedad de formatos de archivos disponibles para almacenar sus variables de entorno.
Archivo JSON
A continuación se muestra un ejemplo de un .env.json
archivo:
.env.json
{ "creature": "shark", "green": "#008f68", "yellow": "#fae042"}
Y aquí hay un ejemplo del uso de este archivo con env-cmd
:
- NODE_ENV=development npx env-cmd --file .env.json node log.js
Ahora ha aprendido a utilizar un archivo de entorno JSON.
JavaScript
A continuación se muestra un ejemplo de un .env.js
archivo:
.env.js
module.exports = { creature: 'shark', green: '#008f68', yellow: '#fae042'};
Y aquí hay un ejemplo del uso de este archivo con env-cmd
:
- NODE_ENV=development npx env-cmd --file .env.js node log.js
Ahora ha aprendido a utilizar un archivo de entorno JavaScript.
Archivo RC
El rc
formato de archivo es especial porque le permite definir múltiples entornos en un solo archivo JSON y hacer referencia al entorno por nombre en lugar de por archivo.
El archivo “runcom” también es especial porque debe tener nombre .env-cmdrc
y estar presente en la raíz del proyecto.
A continuación se muestra un ejemplo de un .env-cmdrc
archivo con entornos definidos para development
, staging
, y production
:
.env-cmdrc
{ "development": { "NODE_ENV": "development", "creature": "shark", "green": "#008f68", "yellow": "#fae042", "otherVar1": 1 }, "staging": { "NODE_ENV": "staging", "creature": "whale", "green": "#6db65b", "yellow": "#efbb35", "otherVar2": 2 }, "production": { "NODE_ENV": "production", "creature": "octopus", "green": "#4aae9b", "yellow": "#dfa612", "otherVar3": 3 }}
Para utilizar los .env-cmdrc
valores será necesaria una opción --environments
( -e
).
Luego puedes hacer referencia a un único entorno:
- npx env-cmd --environments development node log.js
Incluso puedes hacer referencia a múltiples entornos, lo que fusionará cada una de las variables del entorno y el último entorno tendrá prioridad si hay variables superpuestas:
- npx env-cmd --environments development,staging,production node log.js
Al especificar nuestros tres entornos, otherVar
se establecerá cada uno de los valores y el resto de las variables se obtendrán del entorno final indicado production
.
Paso 4 – Uso de alternativas elegantes con--fallback
En situaciones donde no está presente un archivo de entorno personalizado:
npx env-cmd -f .env.missing node log.js
env-cmd
arrojará un error:
OutputError: Failed to find .env file at path: .env.missing
En situaciones en las que hay un problema inesperado con la ruta del archivo env personalizado, env-cmd
puede intentar cargar un .env
archivo desde la raíz de su proyecto. Para ello, pase el --fallback
indicador:
- npx env-cmd --file .env.missing --fallback node log.js
Ahora, si hay un .env
archivo válido al cual recurrir, este comando no mostrará ningún error.
Paso 5 – Uso de valores de entorno existentes con--no-override
Hay situaciones en las que es posible que desees conservar todas o algunas de las variables ya configuradas en el entorno.
Para respetar las variables de entorno existentes en lugar de utilizar los valores de su .env
archivo, pase env-cmd
el --no-override
indicador:
- NODE_ENV=development creature=squid npx env-cmd --no-override node log.js
Esto dará como resultado el siguiente resultado:
OutputNODE_ENV: developmentCreature: squidGreen: #008f68Yellow: #fae042
Tenga en cuenta que el creature
valor se ha establecido en squid
lugar shark
del que se definió en el .env
archivo.
Conclusión
En este artículo lo instaló y utilizó env-cmd
en un proyecto de ejemplo.
El uso de archivos de entorno puede ayudarle a cambiar entre entornos de “desarrollo” y “producción”.
Deja una respuesta