Spaces:
Runtime error
Runtime error
| <div align="center"> | |
| 🎉 announcing <a href="https://github.com/dotenvx/dotenvx">dotenvx</a>. <em>run anywhere, multi-environment, encrypted envs</em>. | |
| </div> | |
| | |
| <div align="center"> | |
| <p> | |
| <sup> | |
| <a href="https://github.com/sponsors/motdotla">Dotenv es apoyado por la comunidad.</a> | |
| </sup> | |
| </p> | |
| <sup>Gracias espaciales a:</sup> | |
| <br> | |
| <br> | |
| <a href="https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=dotenv_p_20220831"> | |
| <div> | |
| <img src="https://res.cloudinary.com/dotenv-org/image/upload/v1661980709/warp_hi8oqj.png" width="230" alt="Warp"> | |
| </div> | |
| <b>Warp es una rápida e impresionante terminal basada en Rust, reinventado para funcionar como una aplicación moderna.</b> | |
| <div> | |
| <sup>Haga más en la CLI con edición de texto real, resultado básado en bloques, y busqueda de comandos de IA.</sup> | |
| </div> | |
| </a> | |
| <br> | |
| <a href="https://retool.com/?utm_source=sponsor&utm_campaign=dotenv"> | |
| <div> | |
| <img src="https://res.cloudinary.com/dotenv-org/image/upload/c_scale,w_300/v1664466968/logo-full-black_vidfqf.png" width="270" alt="Retool"> | |
| </div> | |
| <b>Retool ayuda a los desarrolladores a crear software interno personalizado, como aplicaciones CRUD y paneles de administración, realmente rápido.</b> | |
| <div> | |
| <sup>Construya Interfaces de Usuario de forma visual con componentes flexibles, conéctese a cualquier fuente de datos, y escriba lógica de negocio en JavaScript.</sup> | |
| </div> | |
| </a> | |
| <br> | |
| <a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=dotenv&utm_source=github"> | |
| <div> | |
| <img src="https://res.cloudinary.com/dotenv-org/image/upload/c_scale,w_400/v1665605496/68747470733a2f2f73696e647265736f726875732e636f6d2f6173736574732f7468616e6b732f776f726b6f732d6c6f676f2d77686974652d62672e737667_zdmsbu.svg" width="270" alt="WorkOS"> | |
| </div> | |
| <b>Su Apliación, Lista para la Empresa.</b> | |
| <div> | |
| <sup>Agrega Inicio de Sesión Único, Autenticación Multi-Factor, y mucho más, en minutos en lugar de meses.</sup> | |
| </div> | |
| </a> | |
| <hr> | |
| <br> | |
| <br> | |
| <br> | |
| <br> | |
| </div> | |
| # dotenv [](https://www.npmjs.com/package/dotenv) | |
| <img src="https://raw.githubusercontent.com/motdotla/dotenv/master/dotenv.svg" alt="dotenv" align="right" width="200" /> | |
| Dotenv es un módulo de dependencia cero que carga las variables de entorno desde un archivo `.env` en [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env). El almacenamiento de la configuración del entorno separado del código está basado en la metodología [The Twelve-Factor App](http://12factor.net/config). | |
| [](https://github.com/feross/standard) | |
| [](LICENSE) | |
| ## Instalación | |
| ```bash | |
| # instalación local (recomendado) | |
| npm install dotenv --save | |
| ``` | |
| O installación con yarn? `yarn add dotenv` | |
| ## Uso | |
| Cree un archivo `.env` en la raíz de su proyecto: | |
| ```dosini | |
| S3_BUCKET="YOURS3BUCKET" | |
| SECRET_KEY="YOURSECRETKEYGOESHERE" | |
| ``` | |
| Tan prónto como sea posible en su aplicación, importe y configure dotenv: | |
| ```javascript | |
| require('dotenv').config() | |
| console.log(process.env) // elimine esto después que haya confirmado que esta funcionando | |
| ``` | |
| .. o usa ES6? | |
| ```javascript | |
| import * as dotenv from 'dotenv' // vea en https://github.com/motdotla/dotenv#como-uso-dotenv-con-import | |
| // REVISAR LINK DE REFERENCIA DE IMPORTACIÓN | |
| dotenv.config() | |
| import express from 'express' | |
| ``` | |
| Eso es todo. `process.env` ahora tiene las claves y los valores que definiste en tu archivo `.env`: | |
| ```javascript | |
| require('dotenv').config() | |
| ... | |
| s3.getBucketCors({Bucket: process.env.S3_BUCKET}, function(err, data) {}) | |
| ``` | |
| ### Valores multilínea | |
| Si necesita variables de varias líneas, por ejemplo, claves privadas, ahora se admiten en la versión (`>= v15.0.0`) con saltos de línea: | |
| ```dosini | |
| PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY----- | |
| ... | |
| Kh9NV... | |
| ... | |
| -----END RSA PRIVATE KEY-----" | |
| ``` | |
| Alternativamente, puede usar comillas dobles y usar el carácter `\n`: | |
| ```dosini | |
| PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END RSA PRIVATE KEY-----\n" | |
| ``` | |
| ### Comentarios | |
| Los comentarios pueden ser agregados en tu archivo o en la misma línea: | |
| ```dosini | |
| # This is a comment | |
| SECRET_KEY=YOURSECRETKEYGOESHERE # comment | |
| SECRET_HASH="something-with-a-#-hash" | |
| ``` | |
| Los comentarios comienzan donde existe un `#`, entonces, si su valor contiene un `#`, enciérrelo entre comillas. Este es un cambio importante desde la versión `>= v15.0.0` en adelante. | |
| ### Análisis | |
| El motor que analiza el contenido de su archivo que contiene variables de entorno está disponible para su uso. Este Acepta una Cadena o un Búfer y devolverá un Objeto con las claves y los valores analizados. | |
| ```javascript | |
| const dotenv = require('dotenv') | |
| const buf = Buffer.from('BASICO=basico') | |
| const config = dotenv.parse(buf) // devolverá un objeto | |
| console.log(typeof config, config) // objeto { BASICO : 'basico' } | |
| ``` | |
| ### Precarga | |
| Puede usar el `--require` (`-r`) [opción de línea de comando](https://nodejs.org/api/cli.html#-r---require-module) para precargar dotenv. Al hacer esto, no necesita requerir ni cargar dotnev en el código de su aplicación. | |
| ```bash | |
| $ node -r dotenv/config tu_script.js | |
| ``` | |
| Las opciones de configuración a continuación se admiten como argumentos de línea de comandos en el formato `dotenv_config_<option>=value` | |
| ```bash | |
| $ node -r dotenv/config tu_script.js dotenv_config_path=/custom/path/to/.env dotenv_config_debug=true | |
| ``` | |
| Además, puede usar variables de entorno para establecer opciones de configuración. Los argumentos de línea de comandos precederán a estos. | |
| ```bash | |
| $ DOTENV_CONFIG_<OPTION>=value node -r dotenv/config tu_script.js | |
| ``` | |
| ```bash | |
| $ DOTENV_CONFIG_ENCODING=latin1 DOTENV_CONFIG_DEBUG=true node -r dotenv/config tu_script.js dotenv_config_path=/custom/path/to/.env | |
| ``` | |
| ### Expansión Variable | |
| Necesitaras agregar el valor de otro variable en una de sus variables? Usa [dotenv-expand](https://github.com/motdotla/dotenv-expand). | |
| ### Sincronizando | |
| Necesitas mentener sincronizados los archivos `.env` entre maquinas, entornos, o miembros del equipo? Usa | |
| [dotenv-vault](https://github.com/dotenv-org/dotenv-vault). | |
| ## Ejemplos | |
| Vea [ejemplos](https://github.com/dotenv-org/examples) sobre el uso de dotenv con varios frameworks, lenguajes y configuraciones. | |
| * [nodejs](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs) | |
| * [nodejs (depurar en)](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs-debug) | |
| * [nodejs (anular en)](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs-override) | |
| * [esm](https://github.com/dotenv-org/examples/tree/master/dotenv-esm) | |
| * [esm (precarga)](https://github.com/dotenv-org/examples/tree/master/dotenv-esm-preload) | |
| * [typescript](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript) | |
| * [typescript parse](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript-parse) | |
| * [typescript config](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript-config) | |
| * [webpack](https://github.com/dotenv-org/examples/tree/master/dotenv-webpack) | |
| * [webpack (plugin)](https://github.com/dotenv-org/examples/tree/master/dotenv-webpack2) | |
| * [react](https://github.com/dotenv-org/examples/tree/master/dotenv-react) | |
| * [react (typescript)](https://github.com/dotenv-org/examples/tree/master/dotenv-react-typescript) | |
| * [express](https://github.com/dotenv-org/examples/tree/master/dotenv-express) | |
| * [nestjs](https://github.com/dotenv-org/examples/tree/master/dotenv-nestjs) | |
| ## Documentación | |
| Dotenv expone dos funciones: | |
| * `configuración` | |
| * `analizar` | |
| ### Configuración | |
| `Configuración` leerá su archivo `.env`, analizará el contenido, lo asignará a [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env), | |
| y devolverá un Objeto con una clave `parsed` que contiene el contenido cargado o una clave `error` si falla. | |
| ```js | |
| const result = dotenv.config() | |
| if (result.error) { | |
| throw result.error | |
| } | |
| console.log(result.parsed) | |
| ``` | |
| Adicionalmente, puede pasar opciones a `configuracion`. | |
| #### Opciones | |
| ##### Ruta | |
| Por defecto: `path.resolve(process.cwd(), '.env')` | |
| Especifique una ruta personalizada si el archivo que contiene las variables de entorno se encuentra localizado en otro lugar. | |
| ```js | |
| require('dotenv').config({ path: '/personalizado/ruta/a/.env' }) | |
| ``` | |
| ##### Codificación | |
| Por defecto: `utf8` | |
| Especifique la codificación del archivo que contiene las variables de entorno. | |
| ```js | |
| require('dotenv').config({ encoding: 'latin1' }) | |
| ``` | |
| ##### Depurar | |
| Por defecto: `false` | |
| Active el registro de ayuda para depurar por qué ciertas claves o valores no se inician como lo esperabas. | |
| ```js | |
| require('dotenv').config({ debug: process.env.DEBUG }) | |
| ``` | |
| ##### Anular | |
| Por defecto: `false` | |
| Anule cualquier variable de entorno que ya se haya configurada en su maquina con los valores de su archivo .env. | |
| ```js | |
| require('dotenv').config({ override: true }) | |
| ``` | |
| ### Analizar | |
| El motor que analiza el contenido del archivo que contiene las variables de entorno está disponible para su uso. Acepta una Cadena o un Búfer y retornará un objecto con los valores analizados. | |
| ```js | |
| const dotenv = require('dotenv') | |
| const buf = Buffer.from('BASICO=basico') | |
| const config = dotenv.parse(buf) // devolverá un objeto | |
| console.log(typeof config, config) // objeto { BASICO : 'basico' } | |
| ``` | |
| #### Opciones | |
| ##### Depurar | |
| Por defecto: `false` | |
| Active el registro de ayuda para depurar por qué ciertas claves o valores no se inician como lo esperabas. | |
| ```js | |
| const dotenv = require('dotenv') | |
| const buf = Buffer.from('hola mundo') | |
| const opt = { debug: true } | |
| const config = dotenv.parse(buf, opt) | |
| // espere por un mensaje de depuración porque el búfer no esta listo KEY=VAL | |
| ``` | |
| ## FAQ | |
| ### ¿Por qué el archivo `.env` no carga mis variables de entorno correctamente? | |
| Lo más probable es que su archivo `.env` no esté en el lugar correcto. [Vea este stack overflow](https://stackoverflow.com/questions/42335016/dotenv-file-is-not-loading-environment-variables). | |
| Active el modo de depuración y vuelva a intentarlo... | |
| ```js | |
| require('dotenv').config({ debug: true }) | |
| ``` | |
| Recibirá un error apropiado en su consola. | |
| ### ¿Debo confirmar mi archivo `.env`? | |
| No. Recomendamos **enfáticamente** no enviar su archivo `.env` a la versión de control. Solo debe incluir los valores especificos del entorno, como la base de datos, contraseñas o claves API. | |
| ### ¿Debería tener multiples archivos `.env`? | |
| No. Recomendamos **enfáticamente** no tener un archivo `.env` "principal" y un archivo `.env` de "entorno" como `.env.test`. Su configuración debe variar entre implementaciones y no debe compartir valores entre entornos. | |
| > En una Aplicación de Doce Factores, las variables de entorno son controles diferenciados, cada uno totalmente independiente a otras variables de entorno. Nunca se agrupan como "entornos", sino que se gestionan de manera independiente para cada despliegue. Este es un modelo que se escala sin problemas a medida que la aplicación se expande de forma natural en más despliegues a lo largo de su vida. | |
| > | |
| > – [La Apliación de los Doce Factores](https://12factor.net/es/) | |
| ### ¿Qué reglas sigue el motor de análisis? | |
| El motor de análisis actualmente admite las siguientes reglas: | |
| - `BASICO=basico` se convierte en `{BASICO: 'basico'}` | |
| - las líneas vacías se saltan | |
| - las líneas que comienzan con `#` se tratan como comentarios | |
| - `#` marca el comienzo de un comentario (a menos que el valor esté entre comillas) | |
| - valores vacíos se convierten en cadenas vacías (`VACIO=` se convierte en `{VACIO: ''}`) | |
| - las comillas internas se mantienen (piensa en JSON) (`JSON={"foo": "bar"}` se convierte en `{JSON:"{\"foo\": \"bar\"}"`) | |
| - los espacios en blanco se eliminan de ambos extremos de los valores no citanos (aprende más en [`trim`](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)) (`FOO= algo ` se convierte en `{FOO: 'algo'}`) | |
| - los valores entre comillas simples y dobles se escapan (`CITA_SIMPLE='citado'` se convierte en `{CITA_SIMPLE: "citado"}`) | |
| - los valores entre comillas simples y dobles mantienen los espacios en blanco en ambos extremos (`FOO=" algo "` se convierte en `{FOO: ' algo '}`) | |
| - los valores entre comillas dobles expanden nuevas líneas (`MULTILINEA="nueva\nlínea"` se convierte en | |
| ``` | |
| {MULTILINEA: 'nueva | |
| línea'} | |
| ``` | |
| - se admite la comilla simple invertida (`` SIGNO_ACENTO=`Esto tiene comillas 'simples' y "dobles" en su interior.` ``) | |
| ### ¿Qué sucede con las variables de entorno que ya estaban configuradas? | |
| Por defecto, nunca modificaremos ninguna variable de entorno que ya haya sido establecida. En particular, si hay una variable en su archivo `.env` que colisiona con una que ya existe en su entorno, entonces esa variable se omitirá. | |
| Si por el contrario, quieres anular `process.env` utiliza la opción `override`. | |
| ```javascript | |
| require('dotenv').config({ override: true }) | |
| ``` | |
| ### ¿Por qué mis variables de entorno no aparecen para React? | |
| Su código React se ejecuta en Webpack, donde el módulo `fs` o incluso el propio `process` global no son accesibles fuera-de-la-caja. El módulo `process.env` sólo puede ser inyectado a través de la configuración de Webpack. | |
| Si estás usando [`react-scripts`](https://www.npmjs.com/package/react-scripts), el cual se distribuye a través de [`create-react-app`](https://create-react-app.dev/), tiene dotenv incorporado pero con una singularidad. Escriba sus variables de entorno con `REACT_APP_`. Vea [este stack overflow](https://stackoverflow.com/questions/42182577/is-it-possible-to-use-dotenv-in-a-react-project) para más detalles. | |
| Si estás utilizando otros frameworks (por ejemplo, Next.js, Gatsby...), debes consultar su documentación para saber cómo injectar variables de entorno en el cliente. | |
| ### ¿Puedo personalizar/escribir plugins para dotenv? | |
| Sí! `dotenv.config()` devuelve un objeto que representa el archivo `.env` analizado. Esto te da todo lo que necesitas para poder establecer valores en `process.env`. Por ejemplo: | |
| ```js | |
| const dotenv = require('dotenv') | |
| const variableExpansion = require('dotenv-expand') | |
| const miEnv = dotenv.config() | |
| variableExpansion(miEnv) | |
| ``` | |
| ### Cómo uso dotnev con `import`? | |
| Simplemente.. | |
| ```javascript | |
| // index.mjs (ESM) | |
| import * as dotenv from 'dotenv' // vea https://github.com/motdotla/dotenv#como-uso-dotenv-con-import | |
| dotenv.config() | |
| import express from 'express' | |
| ``` | |
| Un poco de historia... | |
| > Cuando se ejecuta un módulo que contiene una sentencia `import`, los módulos que importa serán cargados primero, y luego se ejecuta cada bloque del módulo en un recorrido en profundidad del gráfico de dependencias, evitando los ciclos al saltarse todo lo que ya se ha ejecutado. | |
| > | |
| > – [ES6 en Profundidad: Módulos](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/) | |
| ¿Qué significa esto en lenguaje sencillo? Significa que se podrías pensar que lo siguiente funcionaría pero no lo hará. | |
| ```js | |
| // notificarError.mjs | |
| import { Cliente } from 'mejor-servicio-para-notificar-error' | |
| export default new Client(process.env.CLAVE_API) | |
| // index.mjs | |
| import dotenv from 'dotenv' | |
| dotenv.config() | |
| import notificarError from './notificarError.mjs' | |
| notificarError.report(new Error('ejemplo documentado')) | |
| ``` | |
| `process.env.CLAVE_API` será vacio. | |
| En su lugar, el código anterior debe ser escrito como... | |
| ```js | |
| // notificarError.mjs | |
| import { Cliente } from 'mejor-servicio-para-notificar-errores' | |
| export default new Client(process.env.CLAVE_API) | |
| // index.mjs | |
| import * as dotenv from 'dotenv' | |
| dotenv.config() | |
| import notificarError from './notificarError.mjs' | |
| notificarError.report(new Error('ejemplo documentado')) | |
| ``` | |
| ¿Esto tiene algo de sentido? Esto es poco poco intuitivo, pero es como funciona la importación de módulos en ES6. Aquí hay un ejemplo [ejemplo práctico de esta trampa](https://github.com/dotenv-org/examples/tree/master/dotenv-es6-import-pitfall). | |
| Existen dos arternativas a este planteamiento: | |
| 1. Precarga dotenv: `node --require dotenv/config index.js` (_Nota: no es necesario usar `import` dotenv con este método_) | |
| 2. Cree un archivo separado que ejecutará `config` primero como se describe en [este comentario #133](https://github.com/motdotla/dotenv/issues/133#issuecomment-255298822) | |
| ### ¿Qué pasa con la expansión de variable? | |
| Prueba [dotenv-expand](https://github.com/motdotla/dotenv-expand) | |
| ### ¿Qué pasa con la sincronización y la seguridad de los archivos .env? | |
| Vea [dotenv-vault](https://github.com/dotenv-org/dotenv-vault) | |
| ## Guía de contribución | |
| Vea [CONTRIBUTING.md](CONTRIBUTING.md) | |
| ## REGISTRO DE CAMBIOS | |
| Vea [CHANGELOG.md](CHANGELOG.md) | |
| ## ¿Quiénes utilizan dotenv? | |
| [Estos módulos npm dependen de él.](https://www.npmjs.com/browse/depended/dotenv) | |
| Los proyectos que lo amplían suelen utilizar la [palabra clave "dotenv" en npm](https://www.npmjs.com/search?q=keywords:dotenv). | |