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 devWindows 와의 크로스플랫폼 솔루션">
크로스플랫폼 솔루션을 원하면 bun shell 을 사용할 수 있습니다. 예를 들어 bun exec 명령입니다.
bun exec 'FOO=helloworld bun run dev'Windows 에서 bun run 으로 호출된 package.json 스크립트는 bun shell 을 자동으로 사용하여 bash 유사 구문과 많은 일반 명령을 지원합니다.
"scripts": {
"dev": "NODE_ENV=development bun --watch app.ts",
},또는 process.env 에 속성을 할당하여 프로그래매틱하게 설정할 수 있습니다.
process.env.FOO = "hello";.env 파일 수동 지정
Bun 은 특정 .env 파일을 로드할 수 있는 --env-file 를 지원합니다. bun 런타임에서 스크립트를 실행하거나 package.json 스크립트를 실행할 때 --env-file 를 사용할 수 있습니다.
bun --env-file=.env.1 src/index.ts
bun --env-file=.env.abc --env-file=.env.def run build자동 .env 로딩 비활성화
--no-env-file 를 사용하여 Bun 의 자동 .env 파일 로딩을 비활성화합니다. 이는 프로덕션 환경이나 시스템 환경 변수에만 의존하려는 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
일반적으로 Bun 이 .env 파일을 자동으로 읽기 때문에 더 이상 dotenv 이나 dotenv-expand 가 필요하지 않습니다.
환경 변수 읽기
현재 환경 변수는 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
<lots more lines>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; // => stringBun 설정
이러한 환경 변수는 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 은 curl 출력을 제외하고 BUN_CONFIG_VERBOSE_FETCH=curl 과 동일합니다. |
BUN_RUNTIME_TRANSPILER_CACHE_PATH | 런타임 트랜스파일러는 50kb 보다 큰 소스 파일의 트랜스파일된 출력을 캐시합니다. 이는 Bun 을 사용하는 CLI 의 로딩 속도를 높입니다. BUN_RUNTIME_TRANSPILER_CACHE_PATH 가 설정되면 런타임 트랜스파일러는 트랜스파일된 출력을 지정된 디렉토리에 캐시합니다. BUN_RUNTIME_TRANSPILER_CACHE_PATH 가 빈 문자열이나 "0" 문자열로 설정되면 런타임 트랜스파일러는 트랜스파일된 출력을 캐시하지 않습니다. BUN_RUNTIME_TRANSPILER_CACHE_PATH 가 설정되지 않으면 런타임 트랜스파일러는 트랜스파일된 출력을 플랫폼별 캐시 디렉토리에 캐시합니다. |
TMPDIR | Bun 은 번들링이나 기타 작업 중 중간 자산을 저장하기 위해 가끔 디렉토리가 필요합니다. 설정되지 않으면 플랫폼별 임시 디렉토리를 기본값으로 사용합니다. Linux 는 /tmp, macOS 는 /private/tmp 입니다. |
NO_COLOR | NO_COLOR=1 이면 ANSI 색상 출력이 비활성화됩니다. |
FORCE_COLOR | FORCE_COLOR=1 이면 NO_COLOR 가 설정되어도 ANSI 색상 출력이 강제 활성화됩니다. |
BUN_CONFIG_MAX_HTTP_REQUESTS | fetch 와 bun install 이 보내는 동시 HTTP 요청의 최대 수를 제어합니다. 기본값은 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 에서 충돌 보고서 업로드는 기본적으로 활성화되어 있습니다. 그렇지 않으면 2024 년 5 월 21 일 현재 텔레메트리는 아직 전송되지 않지만 향후 몇 주 내에 텔레메트리를 추가할 계획입니다. DO_NOT_TRACK=1 이면 자동 업로드 충돌 보고서와 텔레메트리가 모두 비활성화됩니다. |
BUN_OPTIONS | 모든 Bun 실행에 명령줄 인수를 추가합니다. 예를 들어 BUN_OPTIONS="--hot" 은 bun run dev 가 bun --hot run dev 처럼 동작하게 합니다. |
런타임 트랜스파일러 캐싱
50KB 보다 큰 파일의 경우 Bun 은 트랜스파일된 출력을 $BUN_RUNTIME_TRANSPILER_CACHE_PATH 나 플랫폼별 캐시 디렉토리에 캐시합니다. 이는 Bun 을 사용하는 CLI 의 로딩 속도를 높입니다.
이 트랜스파일러 캐시는 전역이며 모든 프로젝트에서 공유됩니다. 언제든지 캐시를 삭제해도 안전합니다. 콘텐츠 주소 가능 캐시이므로 중복 항목이 포함되지 않습니다. Bun 프로세스가 실행 중일 때도 캐시를 삭제해도 안전합니다.
Docker 와 같은 임시 파일시스템을 사용할 때는 이 캐시를 비활성화하는 것이 좋습니다. Bun 의 Docker 이미지는 자동으로 이 캐시를 비활성화합니다.
런타임 트랜스파일러 캐시 비활성화
런타임 트랜스파일러 캐시를 비활성화하려면 BUN_RUNTIME_TRANSPILER_CACHE_PATH 를 빈 문자열이나 "0" 문자열로 설정합니다.
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev무엇을 캐시하나요?
다음 항목을 캐시합니다.
- 50KB 보다 큰 소스 파일의 트랜스파일된 출력
- 파일의 트랜스파일된 출력에 대한 소스맵
이러한 캐시된 파일에는 .pile 파일 확장자가 사용됩니다.