Bun автоматически читает ваши файлы .env и предоставляет идиоматические способы программного чтения и записи переменных окружения. Кроме того, некоторые аспекты поведения среды выполнения Bun могут быть настроены с помощью специфичных для Bun переменных окружения.
Установка переменных окружения
Bun автоматически читает следующие файлы (перечислены в порядке возрастания приоритета).
.env.env.production,.env.development,.env.test(в зависимости от значенияNODE_ENV).env.local
FOO=hello
BAR=worldПеременные также могут быть установлены через командную строку.
FOO=helloworld bun run dev# Использование CMD
set FOO=helloworld && bun run dev
# Использование PowerShell
$env:FOO="helloworld"; bun run devКроссплатформенное решение с Windows
Для кроссплатформенного решения вы можете использовать оболочку bun. Например, команду bun exec.
bun exec 'FOO=helloworld bun run dev'На Windows скрипты package.json, вызываемые с помощью bun run, будут автоматически использовать оболочку bun, делая следующее также кроссплатформенным.
"scripts": {
"dev": "NODE_ENV=development bun --watch app.ts",
},Или программно, присвоив свойство process.env.
process.env.FOO = "hello";Ручное указание файлов .env
Bun поддерживает --env-file для переопределения того, какой конкретный файл .env загружать. Вы можете использовать --env-file при запуске скриптов в среде выполнения bun или при запуске скриптов package.json.
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, где вы хотите полагаться исключительно на системные переменные окружения.
bun run --no-env-file index.tsЭто также может быть настроено в bunfig.toml:
# Отключить загрузку файлов .env
env = falseЯвно предоставленные файлы окружения через --env-file всё ещё будут загружены, даже когда загрузка по умолчанию отключена.
Кавычки
Bun поддерживает двойные кавычки, одинарные кавычки и обратные кавычки шаблонных литералов:
FOO='hello'
FOO="hello"
FOO=`hello`Развёртывание
Переменные окружения автоматически развёртываются. Это означает, что вы можете ссылаться на ранее определённые переменные в ваших переменных окружения.
FOO=world
BAR=hello$FOOprocess.env.BAR; // => "helloworld"Это полезно для создания строк подключения или других составных значений.
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Это можно отключить, экранировав $ обратной косой чертой.
FOO=world
BAR=hello\$FOOprocess.env.BAR; // => "hello$FOO"dotenv
В целом, вам больше не понадобится dotenv или dotenv-expand, потому что Bun автоматически читает файлы .env.
Чтение переменных окружения
Текущие переменные окружения могут быть доступны через process.env.
process.env.API_TOKEN; // => "secret"Bun также предоставляет эти переменные через Bun.env и import.meta.env, который является простым псевдонимом process.env.
Bun.env.API_TOKEN; // => "secret"
import.meta.env.API_TOKEN; // => "secret"Чтобы вывести все текущие установленные переменные окружения в командную строку, выполните bun --print process.env. Это полезно для отладки.
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<ещё много строк>TypeScript
В TypeScript все свойства process.env типизированы как string | undefined.
Bun.env.whatever;
// string | undefinedЧтобы получить автодополнение и указать TypeScript обрабатывать переменную как необязательную строку, мы используем объединение интерфейсов.
declare module "bun" {
interface Env {
AWESOME: string;
}
}Добавьте эту строку в любой файл вашего проекта. Это глобально добавит свойство AWESOME в process.env и Bun.env.
process.env.AWESOME; // => stringНастройка Bun
Эти переменные окружения читаются Bun и настраивают аспекты его поведения.
| Имя | Описание |
|---|---|
NODE_TLS_REJECT_UNAUTHORIZED | NODE_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 не установлена, то среда выполнения будет кэшировать транслированный вывод в каталог кэша, специфичный для платформы. |
TMPDIR | Bun периодически требует каталог для хранения промежуточных активов во время сборки или других операций. Если не установлена, по умолчанию используется специфичный для платформы временный каталог: /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".
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run devЧто он кэширует?
Он кэширует:
- Транслированный вывод исходных файлов размером более 50 КБ.
- Карту источников для транслированного вывода файла
Расширение файла .pile используется для этих кэшированных файлов.