Skip to content

Bun lee tus archivos .env automáticamente y proporciona formas idiomáticas de leer y escribir tus variables de entorno programáticamente. Además, algunos aspectos del comportamiento del runtime de Bun se pueden configurar con variables de entorno específicas de Bun.

Establecer variables de entorno

Bun lee los siguientes archivos automáticamente (listados en orden de precedencia creciente).

  • .env
  • .env.production, .env.development, .env.test (dependiendo del valor de NODE_ENV)
  • .env.local
ini
FOO=hola
BAR=mundo

Las variables también se pueden establecer mediante la línea de comandos.

sh
FOO=helloworld bun run dev
sh
# Usando CMD
set FOO=helloworld && bun run dev

# Usando PowerShell
$env:FOO="helloworld"; bun run dev

Solución multiplataforma con Windows

Para una solución multiplataforma, puedes usar bun shell. Por ejemplo, el comando bun exec.

sh
bun exec 'FOO=helloworld bun run dev'

En Windows, los scripts de package.json llamados con bun run usarán automáticamente el bun shell, haciendo que lo siguiente también sea multiplataforma.

json
"scripts": {
  "dev": "NODE_ENV=development bun --watch app.ts",
},

O programáticamente asignando una propiedad a process.env.

ts
process.env.FOO = "hola";

Especificar manualmente archivos .env

Bun soporta --env-file para anular qué archivo .env específico cargar. Puedes usar --env-file al ejecutar scripts en el runtime de bun, o al ejecutar scripts de package.json.

sh
bun --env-file=.env.1 src/index.ts

bun --env-file=.env.abc --env-file=.env.def run build

Deshabilitar la carga automática de .env

Usa --no-env-file para deshabilitar la carga automática de archivos .env de Bun. Esto es útil en entornos de producción o pipelines CI/CD donde quieres confiar únicamente en las variables de entorno del sistema.

sh
bun run --no-env-file index.ts

Esto también se puede configurar en bunfig.toml:

toml
# Deshabilitar la carga de archivos .env
env = false

Los archivos de entorno proporcionados explícitamente mediante --env-file aún se cargarán incluso cuando la carga predeterminada esté deshabilitada.


Comillas

Bun soporta comillas dobles, comillas simples y comillas invertidas de plantilla literal:

ini
FOO='hola'
FOO="hola"
FOO=`hola`

Expansión

Las variables de entorno se expanden automáticamente. Esto significa que puedes hacer referencia a variables definidas previamente en tus variables de entorno.

ini
FOO=mundo
BAR=hola$FOO
ts
process.env.BAR; // => "holamundo"

Esto es útil para construir cadenas de conexión u otros valores compuestos.

ini
DB_USER=postgres
DB_PASSWORD=secreto
DB_HOST=localhost
DB_PORT=5432
DB_URL=postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME

Esto se puede deshabilitar escapando el $ con una barra invertida.

ini
FOO=mundo
BAR=hola\$FOO
ts
process.env.BAR; // => "hola$FOO"

dotenv

En general, no necesitarás dotenv o dotenv-expand más, porque Bun lee los archivos .env automáticamente.

Leer variables de entorno

Las variables de entorno actuales se pueden acceder mediante process.env.

ts
process.env.API_TOKEN; // => "secreto"

Bun también expone estas variables mediante Bun.env e import.meta.env, que es un alias simple de process.env.

ts
Bun.env.API_TOKEN; // => "secreto"
import.meta.env.API_TOKEN; // => "secreto"

Para imprimir todas las variables de entorno actualmente establecidas en la línea de comandos, ejecuta bun --print process.env. Esto es útil para depuración.

sh
bun --print process.env
BAZ=cosas
FOOBAR=aaaaaa
<muchas más líneas>

TypeScript

En TypeScript, todas las propiedades de process.env están tipadas como string | undefined.

ts
Bun.env.loquesea;
// string | undefined

Para obtener autocompletado y decirle a TypeScript que trate una variable como una cadena no opcional, usaremos fusión de interfaces.

ts
declare module "bun" {
  interface Env {
    AWESOME: string;
  }
}

Agrega esta línea a cualquier archivo en tu proyecto. Agregará globalmente la propiedad AWESOME a process.env y Bun.env.

ts
process.env.AWESOME; // => string

Configurar Bun

Estas variables de entorno son leídas por Bun y configuran aspectos de su comportamiento.

NombreDescripción
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 deshabilita la validación de certificados SSL. Esto es útil para pruebas y depuración, pero debes ser muy cauteloso al usar esto en producción. Nota: Esta variable de entorno fue introducida originalmente por Node.js y mantuvimos el nombre por compatibilidad.
BUN_CONFIG_VERBOSE_FETCHSi BUN_CONFIG_VERBOSE_FETCH=curl, entonces las solicitudes fetch registrarán la url, método, encabezados de solicitud y encabezados de respuesta en la consola. Esto es útil para depurar solicitudes de red. Esto también funciona con node:http. BUN_CONFIG_VERBOSE_FETCH=1 es equivalente a BUN_CONFIG_VERBOSE_FETCH=curl excepto sin la salida curl.
BUN_RUNTIME_TRANSPILER_CACHE_PATHEl transpilador de runtime almacena en caché la salida transpilada de archivos fuente mayores a 50 kb. Esto hace que las CLIs que usan Bun se carguen más rápido. Si BUN_RUNTIME_TRANSPILER_CACHE_PATH está establecido, entonces el transpilador de runtime almacenará en caché la salida transpilada en el directorio especificado. Si BUN_RUNTIME_TRANSPILER_CACHE_PATH está establecido en una cadena vacía o la cadena "0", entonces el transpilador de runtime no almacenará en caché la salida transpilada. Si BUN_RUNTIME_TRANSPILER_CACHE_PATH no está establecido, entonces el transpilador de runtime almacenará en caché la salida transpilada en el directorio de caché específico de la plataforma.
TMPDIRBun ocasionalmente requiere un directorio para almacenar activos intermedios durante la compilación u otras operaciones. Si no está establecido, usa por defecto el directorio temporal específico de la plataforma: /tmp en Linux, /private/tmp en macOS.
NO_COLORSi NO_COLOR=1, entonces la salida de color ANSI está deshabilitada.
FORCE_COLORSi FORCE_COLOR=1, entonces la salida de color ANSI está forzosamente habilitada, incluso si NO_COLOR está establecido.
BUN_CONFIG_MAX_HTTP_REQUESTSControla el número máximo de solicitudes HTTP concurrentes enviadas por fetch y bun install. Por defecto es 256. Si tienes problemas con límites de tasa o conexiones, puedes reducir este número.
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOADSi BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true, entonces bun --watch no limpiará la consola al recargar
DO_NOT_TRACKDeshabilita la carga de informes de fallas a bun.report en caso de falla. En macOS y Windows, la carga de informes de fallas está habilitada por defecto. De lo contrario, la telemetría no se envía aún hasta el 21 de mayo de 2024, pero planeamos agregar telemetría en las próximas semanas. Si DO_NOT_TRACK=1, entonces tanto la carga automática de informes de fallas como la telemetría están deshabilitadas.
BUN_OPTIONSAntepone argumentos de línea de comando a cualquier ejecución de Bun. Por ejemplo, BUN_OPTIONS="--hot" hace que bun run dev se comporte como bun --hot run dev

Caché del transpilador de runtime

Para archivos mayores a 50 KB, Bun almacena en caché la salida transpilada en $BUN_RUNTIME_TRANSPILER_CACHE_PATH o en el directorio de caché específico de la plataforma. Esto hace que las CLIs que usan Bun se carguen más rápido.

Esta caché del transpilador es global y se comparte entre todos los proyectos. Es seguro eliminar la caché en cualquier momento. Es una caché direccionable por contenido, por lo que nunca contendrá entradas duplicadas. También es seguro eliminar la caché mientras un proceso de Bun está en ejecución.

Se recomienda deshabilitar esta caché al usar sistemas de archivos efímeros como Docker. Las imágenes de Docker de Bun deshabilitan automáticamente esta caché.

Deshabilitar la caché del transpilador de runtime

Para deshabilitar la caché del transpilador de runtime, establece BUN_RUNTIME_TRANSPILER_CACHE_PATH en una cadena vacía o la cadena "0".

sh
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev

¿Qué almacena en caché?

Almacena en caché:

  • La salida transpilada de archivos fuente mayores a 50 KB.
  • El sourcemap para la salida transpilada del archivo

La extensión de archivo .pile se usa para estos archivos en caché.

Bun por www.bunjs.com.cn editar