| [81bc7da] | 1 | <div align="center">
|
|---|
| 2 | 🎉 announcing <a href="https://github.com/dotenvx/dotenvx">dotenvx</a>. <em>run anywhere, multi-environment, encrypted envs</em>.
|
|---|
| 3 | </div>
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 | <div align="center">
|
|---|
| 8 |
|
|---|
| 9 | <p>
|
|---|
| 10 | <sup>
|
|---|
| 11 | <a href="https://github.com/sponsors/motdotla">Dotenv es apoyado por la comunidad.</a>
|
|---|
| 12 | </sup>
|
|---|
| 13 | </p>
|
|---|
| 14 | <sup>Gracias espaciales a:</sup>
|
|---|
| 15 | <br>
|
|---|
| 16 | <br>
|
|---|
| 17 |
|
|---|
| 18 | <a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv"><img src="https://res.cloudinary.com/dotenv-org/image/upload/v1744035073/graphite_lgsrl8.gif" width="240" alt="Graphite" /></a>
|
|---|
| 19 |
|
|---|
| 20 | <a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv">
|
|---|
| 21 | <b>Graphite is the AI developer productivity platform helping teams on GitHub ship higher quality software, faster.</b>
|
|---|
| 22 | </a>
|
|---|
| 23 | <hr>
|
|---|
| 24 | </div>
|
|---|
| 25 |
|
|---|
| 26 | # dotenv [](https://www.npmjs.com/package/dotenv)
|
|---|
| 27 |
|
|---|
| 28 | <img src="https://raw.githubusercontent.com/motdotla/dotenv/master/dotenv.svg" alt="dotenv" align="right" width="200" />
|
|---|
| 29 |
|
|---|
| 30 | 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).
|
|---|
| 31 |
|
|---|
| 32 | [](https://github.com/feross/standard)
|
|---|
| 33 | [](LICENSE)
|
|---|
| 34 |
|
|---|
| 35 | ## Instalación
|
|---|
| 36 |
|
|---|
| 37 | ```bash
|
|---|
| 38 | # instalación local (recomendado)
|
|---|
| 39 | npm install dotenv --save
|
|---|
| 40 | ```
|
|---|
| 41 |
|
|---|
| 42 | O installación con yarn? `yarn add dotenv`
|
|---|
| 43 |
|
|---|
| 44 | ## Uso
|
|---|
| 45 |
|
|---|
| 46 | Cree un archivo `.env` en la raíz de su proyecto:
|
|---|
| 47 |
|
|---|
| 48 | ```dosini
|
|---|
| 49 | S3_BUCKET="YOURS3BUCKET"
|
|---|
| 50 | SECRET_KEY="YOURSECRETKEYGOESHERE"
|
|---|
| 51 | ```
|
|---|
| 52 |
|
|---|
| 53 | Tan prónto como sea posible en su aplicación, importe y configure dotenv:
|
|---|
| 54 |
|
|---|
| 55 | ```javascript
|
|---|
| 56 | require('dotenv').config()
|
|---|
| 57 | console.log(process.env) // elimine esto después que haya confirmado que esta funcionando
|
|---|
| 58 | ```
|
|---|
| 59 |
|
|---|
| 60 | .. o usa ES6?
|
|---|
| 61 |
|
|---|
| 62 | ```javascript
|
|---|
| 63 | import * as dotenv from 'dotenv' // vea en https://github.com/motdotla/dotenv#como-uso-dotenv-con-import
|
|---|
| 64 | // REVISAR LINK DE REFERENCIA DE IMPORTACIÓN
|
|---|
| 65 | dotenv.config()
|
|---|
| 66 | import express from 'express'
|
|---|
| 67 | ```
|
|---|
| 68 |
|
|---|
| 69 | Eso es todo. `process.env` ahora tiene las claves y los valores que definiste en tu archivo `.env`:
|
|---|
| 70 |
|
|---|
| 71 | ```javascript
|
|---|
| 72 | require('dotenv').config()
|
|---|
| 73 |
|
|---|
| 74 | ...
|
|---|
| 75 |
|
|---|
| 76 | s3.getBucketCors({Bucket: process.env.S3_BUCKET}, function(err, data) {})
|
|---|
| 77 | ```
|
|---|
| 78 |
|
|---|
| 79 | ### Valores multilínea
|
|---|
| 80 |
|
|---|
| 81 | 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:
|
|---|
| 82 |
|
|---|
| 83 | ```dosini
|
|---|
| 84 | PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
|
|---|
| 85 | ...
|
|---|
| 86 | Kh9NV...
|
|---|
| 87 | ...
|
|---|
| 88 | -----END RSA PRIVATE KEY-----"
|
|---|
| 89 | ```
|
|---|
| 90 |
|
|---|
| 91 | Alternativamente, puede usar comillas dobles y usar el carácter `\n`:
|
|---|
| 92 |
|
|---|
| 93 | ```dosini
|
|---|
| 94 | PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END RSA PRIVATE KEY-----\n"
|
|---|
| 95 | ```
|
|---|
| 96 |
|
|---|
| 97 | ### Comentarios
|
|---|
| 98 |
|
|---|
| 99 | Los comentarios pueden ser agregados en tu archivo o en la misma línea:
|
|---|
| 100 |
|
|---|
| 101 | ```dosini
|
|---|
| 102 | # This is a comment
|
|---|
| 103 | SECRET_KEY=YOURSECRETKEYGOESHERE # comment
|
|---|
| 104 | SECRET_HASH="something-with-a-#-hash"
|
|---|
| 105 | ```
|
|---|
| 106 |
|
|---|
| 107 | 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.
|
|---|
| 108 |
|
|---|
| 109 | ### Análisis
|
|---|
| 110 |
|
|---|
| 111 | 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.
|
|---|
| 112 |
|
|---|
| 113 | ```javascript
|
|---|
| 114 | const dotenv = require('dotenv')
|
|---|
| 115 | const buf = Buffer.from('BASICO=basico')
|
|---|
| 116 | const config = dotenv.parse(buf) // devolverá un objeto
|
|---|
| 117 | console.log(typeof config, config) // objeto { BASICO : 'basico' }
|
|---|
| 118 | ```
|
|---|
| 119 |
|
|---|
| 120 | ### Precarga
|
|---|
| 121 |
|
|---|
| 122 | 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.
|
|---|
| 123 |
|
|---|
| 124 | ```bash
|
|---|
| 125 | $ node -r dotenv/config tu_script.js
|
|---|
| 126 | ```
|
|---|
| 127 |
|
|---|
| 128 | Las opciones de configuración a continuación se admiten como argumentos de línea de comandos en el formato `dotenv_config_<option>=value`
|
|---|
| 129 |
|
|---|
| 130 | ```bash
|
|---|
| 131 | $ node -r dotenv/config tu_script.js dotenv_config_path=/custom/path/to/.env dotenv_config_debug=true
|
|---|
| 132 | ```
|
|---|
| 133 |
|
|---|
| 134 | Además, puede usar variables de entorno para establecer opciones de configuración. Los argumentos de línea de comandos precederán a estos.
|
|---|
| 135 |
|
|---|
| 136 | ```bash
|
|---|
| 137 | $ DOTENV_CONFIG_<OPTION>=value node -r dotenv/config tu_script.js
|
|---|
| 138 | ```
|
|---|
| 139 |
|
|---|
| 140 | ```bash
|
|---|
| 141 | $ DOTENV_CONFIG_ENCODING=latin1 DOTENV_CONFIG_DEBUG=true node -r dotenv/config tu_script.js dotenv_config_path=/custom/path/to/.env
|
|---|
| 142 | ```
|
|---|
| 143 |
|
|---|
| 144 | ### Expansión Variable
|
|---|
| 145 |
|
|---|
| 146 | Necesitaras agregar el valor de otro variable en una de sus variables? Usa [dotenv-expand](https://github.com/motdotla/dotenv-expand).
|
|---|
| 147 |
|
|---|
| 148 | ## Ejemplos
|
|---|
| 149 |
|
|---|
| 150 | Vea [ejemplos](https://github.com/dotenv-org/examples) sobre el uso de dotenv con varios frameworks, lenguajes y configuraciones.
|
|---|
| 151 |
|
|---|
| 152 | * [nodejs](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs)
|
|---|
| 153 | * [nodejs (depurar en)](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs-debug)
|
|---|
| 154 | * [nodejs (anular en)](https://github.com/dotenv-org/examples/tree/master/dotenv-nodejs-override)
|
|---|
| 155 | * [esm](https://github.com/dotenv-org/examples/tree/master/dotenv-esm)
|
|---|
| 156 | * [esm (precarga)](https://github.com/dotenv-org/examples/tree/master/dotenv-esm-preload)
|
|---|
| 157 | * [typescript](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript)
|
|---|
| 158 | * [typescript parse](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript-parse)
|
|---|
| 159 | * [typescript config](https://github.com/dotenv-org/examples/tree/master/dotenv-typescript-config)
|
|---|
| 160 | * [webpack](https://github.com/dotenv-org/examples/tree/master/dotenv-webpack)
|
|---|
| 161 | * [webpack (plugin)](https://github.com/dotenv-org/examples/tree/master/dotenv-webpack2)
|
|---|
| 162 | * [react](https://github.com/dotenv-org/examples/tree/master/dotenv-react)
|
|---|
| 163 | * [react (typescript)](https://github.com/dotenv-org/examples/tree/master/dotenv-react-typescript)
|
|---|
| 164 | * [express](https://github.com/dotenv-org/examples/tree/master/dotenv-express)
|
|---|
| 165 | * [nestjs](https://github.com/dotenv-org/examples/tree/master/dotenv-nestjs)
|
|---|
| 166 |
|
|---|
| 167 | ## Documentación
|
|---|
| 168 |
|
|---|
| 169 | Dotenv expone dos funciones:
|
|---|
| 170 |
|
|---|
| 171 | * `configuración`
|
|---|
| 172 | * `analizar`
|
|---|
| 173 |
|
|---|
| 174 | ### Configuración
|
|---|
| 175 |
|
|---|
| 176 | `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),
|
|---|
| 177 | y devolverá un Objeto con una clave `parsed` que contiene el contenido cargado o una clave `error` si falla.
|
|---|
| 178 |
|
|---|
| 179 | ```js
|
|---|
| 180 | const result = dotenv.config()
|
|---|
| 181 |
|
|---|
| 182 | if (result.error) {
|
|---|
| 183 | throw result.error
|
|---|
| 184 | }
|
|---|
| 185 |
|
|---|
| 186 | console.log(result.parsed)
|
|---|
| 187 | ```
|
|---|
| 188 |
|
|---|
| 189 | Adicionalmente, puede pasar opciones a `configuracion`.
|
|---|
| 190 |
|
|---|
| 191 | #### Opciones
|
|---|
| 192 |
|
|---|
| 193 | ##### Ruta
|
|---|
| 194 |
|
|---|
| 195 | Por defecto: `path.resolve(process.cwd(), '.env')`
|
|---|
| 196 |
|
|---|
| 197 | Especifique una ruta personalizada si el archivo que contiene las variables de entorno se encuentra localizado en otro lugar.
|
|---|
| 198 |
|
|---|
| 199 | ```js
|
|---|
| 200 | require('dotenv').config({ path: '/personalizado/ruta/a/.env' })
|
|---|
| 201 | ```
|
|---|
| 202 |
|
|---|
| 203 | ##### Codificación
|
|---|
| 204 |
|
|---|
| 205 | Por defecto: `utf8`
|
|---|
| 206 |
|
|---|
| 207 | Especifique la codificación del archivo que contiene las variables de entorno.
|
|---|
| 208 |
|
|---|
| 209 | ```js
|
|---|
| 210 | require('dotenv').config({ encoding: 'latin1' })
|
|---|
| 211 | ```
|
|---|
| 212 |
|
|---|
| 213 | ##### Depurar
|
|---|
| 214 |
|
|---|
| 215 | Por defecto: `false`
|
|---|
| 216 |
|
|---|
| 217 | Active el registro de ayuda para depurar por qué ciertas claves o valores no se inician como lo esperabas.
|
|---|
| 218 |
|
|---|
| 219 | ```js
|
|---|
| 220 | require('dotenv').config({ debug: process.env.DEBUG })
|
|---|
| 221 | ```
|
|---|
| 222 |
|
|---|
| 223 | ##### Anular
|
|---|
| 224 |
|
|---|
| 225 | Por defecto: `false`
|
|---|
| 226 |
|
|---|
| 227 | Anule cualquier variable de entorno que ya se haya configurada en su maquina con los valores de su archivo .env.
|
|---|
| 228 |
|
|---|
| 229 | ```js
|
|---|
| 230 | require('dotenv').config({ override: true })
|
|---|
| 231 | ```
|
|---|
| 232 |
|
|---|
| 233 | ### Analizar
|
|---|
| 234 |
|
|---|
| 235 | 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.
|
|---|
| 236 |
|
|---|
| 237 | ```js
|
|---|
| 238 | const dotenv = require('dotenv')
|
|---|
| 239 | const buf = Buffer.from('BASICO=basico')
|
|---|
| 240 | const config = dotenv.parse(buf) // devolverá un objeto
|
|---|
| 241 | console.log(typeof config, config) // objeto { BASICO : 'basico' }
|
|---|
| 242 | ```
|
|---|
| 243 |
|
|---|
| 244 | #### Opciones
|
|---|
| 245 |
|
|---|
| 246 | ##### Depurar
|
|---|
| 247 |
|
|---|
| 248 | Por defecto: `false`
|
|---|
| 249 |
|
|---|
| 250 | Active el registro de ayuda para depurar por qué ciertas claves o valores no se inician como lo esperabas.
|
|---|
| 251 |
|
|---|
| 252 | ```js
|
|---|
| 253 | const dotenv = require('dotenv')
|
|---|
| 254 | const buf = Buffer.from('hola mundo')
|
|---|
| 255 | const opt = { debug: true }
|
|---|
| 256 | const config = dotenv.parse(buf, opt)
|
|---|
| 257 | // espere por un mensaje de depuración porque el búfer no esta listo KEY=VAL
|
|---|
| 258 | ```
|
|---|
| 259 |
|
|---|
| 260 | ## FAQ
|
|---|
| 261 |
|
|---|
| 262 | ### ¿Por qué el archivo `.env` no carga mis variables de entorno correctamente?
|
|---|
| 263 |
|
|---|
| 264 | 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).
|
|---|
| 265 |
|
|---|
| 266 | Active el modo de depuración y vuelva a intentarlo...
|
|---|
| 267 |
|
|---|
| 268 | ```js
|
|---|
| 269 | require('dotenv').config({ debug: true })
|
|---|
| 270 | ```
|
|---|
| 271 |
|
|---|
| 272 | Recibirá un error apropiado en su consola.
|
|---|
| 273 |
|
|---|
| 274 | ### ¿Debo confirmar mi archivo `.env`?
|
|---|
| 275 |
|
|---|
| 276 | 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.
|
|---|
| 277 |
|
|---|
| 278 | ### ¿Debería tener multiples archivos `.env`?
|
|---|
| 279 |
|
|---|
| 280 | 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.
|
|---|
| 281 |
|
|---|
| 282 | > 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.
|
|---|
| 283 | >
|
|---|
| 284 | > – [La Apliación de los Doce Factores](https://12factor.net/es/)
|
|---|
| 285 |
|
|---|
| 286 | ### ¿Qué reglas sigue el motor de análisis?
|
|---|
| 287 |
|
|---|
| 288 | El motor de análisis actualmente admite las siguientes reglas:
|
|---|
| 289 |
|
|---|
| 290 | - `BASICO=basico` se convierte en `{BASICO: 'basico'}`
|
|---|
| 291 | - las líneas vacías se saltan
|
|---|
| 292 | - las líneas que comienzan con `#` se tratan como comentarios
|
|---|
| 293 | - `#` marca el comienzo de un comentario (a menos que el valor esté entre comillas)
|
|---|
| 294 | - valores vacíos se convierten en cadenas vacías (`VACIO=` se convierte en `{VACIO: ''}`)
|
|---|
| 295 | - las comillas internas se mantienen (piensa en JSON) (`JSON={"foo": "bar"}` se convierte en `{JSON:"{\"foo\": \"bar\"}"`)
|
|---|
| 296 | - 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'}`)
|
|---|
| 297 | - los valores entre comillas simples y dobles se escapan (`CITA_SIMPLE='citado'` se convierte en `{CITA_SIMPLE: "citado"}`)
|
|---|
| 298 | - los valores entre comillas simples y dobles mantienen los espacios en blanco en ambos extremos (`FOO=" algo "` se convierte en `{FOO: ' algo '}`)
|
|---|
| 299 | - los valores entre comillas dobles expanden nuevas líneas (`MULTILINEA="nueva\nlínea"` se convierte en
|
|---|
| 300 |
|
|---|
| 301 | ```
|
|---|
| 302 | {MULTILINEA: 'nueva
|
|---|
| 303 | línea'}
|
|---|
| 304 | ```
|
|---|
| 305 |
|
|---|
| 306 | - se admite la comilla simple invertida (`` SIGNO_ACENTO=`Esto tiene comillas 'simples' y "dobles" en su interior.` ``)
|
|---|
| 307 |
|
|---|
| 308 | ### ¿Qué sucede con las variables de entorno que ya estaban configuradas?
|
|---|
| 309 |
|
|---|
| 310 | 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á.
|
|---|
| 311 |
|
|---|
| 312 | Si por el contrario, quieres anular `process.env` utiliza la opción `override`.
|
|---|
| 313 |
|
|---|
| 314 | ```javascript
|
|---|
| 315 | require('dotenv').config({ override: true })
|
|---|
| 316 | ```
|
|---|
| 317 |
|
|---|
| 318 | ### ¿Por qué mis variables de entorno no aparecen para React?
|
|---|
| 319 |
|
|---|
| 320 | 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.
|
|---|
| 321 |
|
|---|
| 322 | 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.
|
|---|
| 323 |
|
|---|
| 324 | 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.
|
|---|
| 325 |
|
|---|
| 326 | ### ¿Puedo personalizar/escribir plugins para dotenv?
|
|---|
| 327 |
|
|---|
| 328 | 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:
|
|---|
| 329 |
|
|---|
| 330 | ```js
|
|---|
| 331 | const dotenv = require('dotenv')
|
|---|
| 332 | const variableExpansion = require('dotenv-expand')
|
|---|
| 333 | const miEnv = dotenv.config()
|
|---|
| 334 | variableExpansion(miEnv)
|
|---|
| 335 | ```
|
|---|
| 336 |
|
|---|
| 337 | ### Cómo uso dotnev con `import`?
|
|---|
| 338 |
|
|---|
| 339 | Simplemente..
|
|---|
| 340 |
|
|---|
| 341 | ```javascript
|
|---|
| 342 | // index.mjs (ESM)
|
|---|
| 343 | import * as dotenv from 'dotenv' // vea https://github.com/motdotla/dotenv#como-uso-dotenv-con-import
|
|---|
| 344 | dotenv.config()
|
|---|
| 345 | import express from 'express'
|
|---|
| 346 | ```
|
|---|
| 347 |
|
|---|
| 348 | Un poco de historia...
|
|---|
| 349 |
|
|---|
| 350 | > 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.
|
|---|
| 351 | >
|
|---|
| 352 | > – [ES6 en Profundidad: Módulos](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/)
|
|---|
| 353 |
|
|---|
| 354 | ¿Qué significa esto en lenguaje sencillo? Significa que se podrías pensar que lo siguiente funcionaría pero no lo hará.
|
|---|
| 355 |
|
|---|
| 356 | ```js
|
|---|
| 357 | // notificarError.mjs
|
|---|
| 358 | import { Cliente } from 'mejor-servicio-para-notificar-error'
|
|---|
| 359 |
|
|---|
| 360 | export default new Client(process.env.CLAVE_API)
|
|---|
| 361 |
|
|---|
| 362 | // index.mjs
|
|---|
| 363 | import dotenv from 'dotenv'
|
|---|
| 364 | dotenv.config()
|
|---|
| 365 |
|
|---|
| 366 | import notificarError from './notificarError.mjs'
|
|---|
| 367 | notificarError.report(new Error('ejemplo documentado'))
|
|---|
| 368 | ```
|
|---|
| 369 |
|
|---|
| 370 | `process.env.CLAVE_API` será vacio.
|
|---|
| 371 |
|
|---|
| 372 | En su lugar, el código anterior debe ser escrito como...
|
|---|
| 373 |
|
|---|
| 374 | ```js
|
|---|
| 375 | // notificarError.mjs
|
|---|
| 376 | import { Cliente } from 'mejor-servicio-para-notificar-errores'
|
|---|
| 377 |
|
|---|
| 378 | export default new Client(process.env.CLAVE_API)
|
|---|
| 379 |
|
|---|
| 380 | // index.mjs
|
|---|
| 381 | import * as dotenv from 'dotenv'
|
|---|
| 382 | dotenv.config()
|
|---|
| 383 |
|
|---|
| 384 | import notificarError from './notificarError.mjs'
|
|---|
| 385 | notificarError.report(new Error('ejemplo documentado'))
|
|---|
| 386 | ```
|
|---|
| 387 |
|
|---|
| 388 | ¿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).
|
|---|
| 389 |
|
|---|
| 390 | Existen dos arternativas a este planteamiento:
|
|---|
| 391 |
|
|---|
| 392 | 1. Precarga dotenv: `node --require dotenv/config index.js` (_Nota: no es necesario usar `import` dotenv con este método_)
|
|---|
| 393 | 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)
|
|---|
| 394 |
|
|---|
| 395 | ### ¿Qué pasa con la expansión de variable?
|
|---|
| 396 |
|
|---|
| 397 | Prueba [dotenv-expand](https://github.com/motdotla/dotenv-expand)
|
|---|
| 398 |
|
|---|
| 399 | ## Guía de contribución
|
|---|
| 400 |
|
|---|
| 401 | Vea [CONTRIBUTING.md](CONTRIBUTING.md)
|
|---|
| 402 |
|
|---|
| 403 | ## REGISTRO DE CAMBIOS
|
|---|
| 404 |
|
|---|
| 405 | Vea [CHANGELOG.md](CHANGELOG.md)
|
|---|
| 406 |
|
|---|
| 407 | ## ¿Quiénes utilizan dotenv?
|
|---|
| 408 |
|
|---|
| 409 | [Estos módulos npm dependen de él.](https://www.npmjs.com/browse/depended/dotenv)
|
|---|
| 410 |
|
|---|
| 411 | Los proyectos que lo amplían suelen utilizar la [palabra clave "dotenv" en npm](https://www.npmjs.com/search?q=keywords:dotenv).
|
|---|