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 deNODE_ENV).env.local
FOO=hola
BAR=mundoLas variables también se pueden establecer mediante la línea de comandos.
FOO=helloworld bun run dev# Usando CMD
set FOO=helloworld && bun run dev
# Usando PowerShell
$env:FOO="helloworld"; bun run devSolución multiplataforma con Windows
Para una solución multiplataforma, puedes usar bun shell. Por ejemplo, el comando bun exec.
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.
"scripts": {
"dev": "NODE_ENV=development bun --watch app.ts",
},O programáticamente asignando una propiedad a process.env.
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.
bun --env-file=.env.1 src/index.ts
bun --env-file=.env.abc --env-file=.env.def run buildDeshabilitar 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.
bun run --no-env-file index.tsEsto también se puede configurar en bunfig.toml:
# Deshabilitar la carga de archivos .env
env = falseLos 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:
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.
FOO=mundo
BAR=hola$FOOprocess.env.BAR; // => "holamundo"Esto es útil para construir cadenas de conexión u otros valores compuestos.
DB_USER=postgres
DB_PASSWORD=secreto
DB_HOST=localhost
DB_PORT=5432
DB_URL=postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAMEEsto se puede deshabilitar escapando el $ con una barra invertida.
FOO=mundo
BAR=hola\$FOOprocess.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.
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.
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.
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.
Bun.env.loquesea;
// string | undefinedPara obtener autocompletado y decirle a TypeScript que trate una variable como una cadena no opcional, usaremos fusión de interfaces.
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.
process.env.AWESOME; // => stringConfigurar Bun
Estas variables de entorno son leídas por Bun y configuran aspectos de su comportamiento.
| Nombre | Descripción |
|---|---|
NODE_TLS_REJECT_UNAUTHORIZED | NODE_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_FETCH | Si 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_PATH | El 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. |
TMPDIR | Bun 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_COLOR | Si NO_COLOR=1, entonces la salida de color ANSI está deshabilitada. |
FORCE_COLOR | Si FORCE_COLOR=1, entonces la salida de color ANSI está forzosamente habilitada, incluso si NO_COLOR está establecido. |
BUN_CONFIG_MAX_HTTP_REQUESTS | Controla 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_RELOAD | Si BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true, entonces bun --watch no limpiará la consola al recargar |
DO_NOT_TRACK | Deshabilita 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_OPTIONS | Antepone 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".
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é.