Skip to content

Bun автоматически читает ваши файлы .env и предоставляет идиоматические способы программного чтения и записи переменных окружения. Кроме того, некоторые аспекты поведения среды выполнения Bun могут быть настроены с помощью специфичных для Bun переменных окружения.

Установка переменных окружения

Bun автоматически читает следующие файлы (перечислены в порядке возрастания приоритета).

  • .env
  • .env.production, .env.development, .env.test (в зависимости от значения NODE_ENV)
  • .env.local
ini
FOO=hello
BAR=world

Переменные также могут быть установлены через командную строку.

sh
FOO=helloworld bun run dev
sh
# Использование CMD
set FOO=helloworld && bun run dev

# Использование PowerShell
$env:FOO="helloworld"; bun run dev

Кроссплатформенное решение с Windows

Для кроссплатформенного решения вы можете использовать оболочку bun. Например, команду bun exec.

sh
bun exec 'FOO=helloworld bun run dev'

На Windows скрипты package.json, вызываемые с помощью bun run, будут автоматически использовать оболочку bun, делая следующее также кроссплатформенным.

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

Или программно, присвоив свойство process.env.

ts
process.env.FOO = "hello";

Ручное указание файлов .env

Bun поддерживает --env-file для переопределения того, какой конкретный файл .env загружать. Вы можете использовать --env-file при запуске скриптов в среде выполнения bun или при запуске скриптов package.json.

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

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

Отключение автоматической загрузки .env

Используйте --no-env-file для отключения автоматической загрузки файлов .env в Bun. Это полезно в производственных средах или конвейерах CI/CD, где вы хотите полагаться исключительно на системные переменные окружения.

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

Это также может быть настроено в bunfig.toml:

toml
# Отключить загрузку файлов .env
env = false

Явно предоставленные файлы окружения через --env-file всё ещё будут загружены, даже когда загрузка по умолчанию отключена.


Кавычки

Bun поддерживает двойные кавычки, одинарные кавычки и обратные кавычки шаблонных литералов:

ini
FOO='hello'
FOO="hello"
FOO=`hello`

Развёртывание

Переменные окружения автоматически развёртываются. Это означает, что вы можете ссылаться на ранее определённые переменные в ваших переменных окружения.

ini
FOO=world
BAR=hello$FOO
ts
process.env.BAR; // => "helloworld"

Это полезно для создания строк подключения или других составных значений.

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

Это можно отключить, экранировав $ обратной косой чертой.

ini
FOO=world
BAR=hello\$FOO
ts
process.env.BAR; // => "hello$FOO"

dotenv

В целом, вам больше не понадобится dotenv или dotenv-expand, потому что Bun автоматически читает файлы .env.

Чтение переменных окружения

Текущие переменные окружения могут быть доступны через process.env.

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

Bun также предоставляет эти переменные через Bun.env и import.meta.env, который является простым псевдонимом process.env.

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

Чтобы вывести все текущие установленные переменные окружения в командную строку, выполните bun --print process.env. Это полезно для отладки.

sh
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<ещё много строк>

TypeScript

В TypeScript все свойства process.env типизированы как string | undefined.

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

Чтобы получить автодополнение и указать TypeScript обрабатывать переменную как необязательную строку, мы используем объединение интерфейсов.

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

Добавьте эту строку в любой файл вашего проекта. Это глобально добавит свойство AWESOME в process.env и Bun.env.

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

Настройка Bun

Эти переменные окружения читаются Bun и настраивают аспекты его поведения.

ИмяОписание
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 отключает проверку SSL-сертификатов. Это полезно для тестирования и отладки, но вы должны очень осторожно использовать это в продакшене. Примечание: Эта переменная окружения была изначально представлена Node.js, и мы сохранили имя для совместимости.
BUN_CONFIG_VERBOSE_FETCHЕсли BUN_CONFIG_VERBOSE_FETCH=curl, то запросы fetch будут логировать URL, метод, заголовки запроса и заголовки ответа в консоль. Это полезно для отладки сетевых запросов. Это также работает с node:http. BUN_CONFIG_VERBOSE_FETCH=1 эквивалентно BUN_CONFIG_VERBOSE_FETCH=curl, за исключением вывода curl.
BUN_RUNTIME_TRANSPILER_CACHE_PATHСреда выполнения кэширует транслированный вывод исходных файлов размером более 50 КБ. Это ускоряет загрузку CLI, использующих Bun. Если BUN_RUNTIME_TRANSPILER_CACHE_PATH установлена, то среда выполнения будет кэшировать транслированный вывод в указанный каталог. Если BUN_RUNTIME_TRANSPILER_CACHE_PATH установлена в пустую строку или строку "0", то среда выполнения не будет кэшировать транслированный вывод. Если BUN_RUNTIME_TRANSPILER_CACHE_PATH не установлена, то среда выполнения будет кэшировать транслированный вывод в каталог кэша, специфичный для платформы.
TMPDIRBun периодически требует каталог для хранения промежуточных активов во время сборки или других операций. Если не установлена, по умолчанию используется специфичный для платформы временный каталог: /tmp на Linux, /private/tmp на macOS.
NO_COLORЕсли NO_COLOR=1, то вывод ANSI-цветов отключён.
FORCE_COLORЕсли FORCE_COLOR=1, то вывод ANSI-цветов принудительно включён, даже если установлена NO_COLOR.
BUN_CONFIG_MAX_HTTP_REQUESTSУправляет максимальным количеством одновременных HTTP-запросов, отправляемых через fetch и bun install. По умолчанию 256. Если вы сталкиваетесь с ограничениями скорости или проблемами подключения, вы можете уменьшить это число.
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOADЕсли BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true, то bun --watch не будет очищать консоль при перезагрузке
DO_NOT_TRACKОтключает загрузку отчётов о сбоях на bun.report при сбое. На macOS и Windows загрузка отчётов о сбоях включена по умолчанию. В противном случае телеметрия ещё не отправляется по состоянию на 21 мая 2024 года, но мы планируем добавить телеметрию в ближайшие недели. Если DO_NOT_TRACK=1, то автоматическая загрузка отчётов о сбоях и телеметрия обе отключены.
BUN_OPTIONSДобавляет аргументы командной строки к любому выполнению Bun. Например, BUN_OPTIONS="--hot" заставляет bun run dev вести себя как bun --hot run dev

Кэширование транслятора среды выполнения

Для файлов размером более 50 КБ Bun кэширует транслированный вывод в $BUN_RUNTIME_TRANSPILER_CACHE_PATH или в каталог кэша, специфичный для платформы. Это ускоряет загрузку CLI, использующих Bun.

Этот кэш транслятора является глобальным и общим для всех проектов. Безопасно удалять кэш в любое время. Это кэш с адресацией по содержимому, поэтому он никогда не будет содержать дублирующихся записей. Также безопасно удалять кэш во время работы процесса Bun.

Рекомендуется отключать этот кэш при использовании эфемерных файловых систем, таких как Docker. Docker-образы Bun автоматически отключают этот кэш.

Отключение кэша транслятора среды выполнения

Чтобы отключить кэш транслятора среды выполнения, установите BUN_RUNTIME_TRANSPILER_CACHE_PATH в пустую строку или строку "0".

sh
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev

Что он кэширует?

Он кэширует:

  • Транслированный вывод исходных файлов размером более 50 КБ.
  • Карту источников для транслированного вывода файла

Расширение файла .pile используется для этих кэшированных файлов.

Bun от www.bunjs.com.cn