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 shell 을 사용할 수 있습니다. 예를 들어 bun exec 명령입니다.

sh
bun exec 'FOO=helloworld bun run dev'

Windows 에서 bun run 으로 호출된 package.json 스크립트는 bun shell 을 자동으로 사용하여 bash 유사 구문과 많은 일반 명령을 지원합니다.

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

또는 process.env 에 속성을 할당하여 프로그래매틱하게 설정할 수 있습니다.

ts
process.env.FOO = "hello";

.env 파일 수동 지정

Bun 은 특정 .env 파일을 로드할 수 있는 --env-file 를 지원합니다. bun 런타임에서 스크립트를 실행하거나 package.json 스크립트를 실행할 때 --env-file 를 사용할 수 있습니다.

sh
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 파이프라인에서 유용합니다.

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

일반적으로 Bun 이 .env 파일을 자동으로 읽기 때문에 더 이상 dotenv 이나 dotenv-expand 가 필요하지 않습니다.

환경 변수 읽기

현재 환경 변수는 process.env 를 통해 접근할 수 있습니다.

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

Bun 은 이 변수들을 Bun.envimport.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
<lots more lines>

TypeScript

TypeScript 에서 process.env 의 모든 속성은 string | undefined 로 타입이 지정됩니다.

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

자동완성을 얻고 TypeScript 가 변수를 필수 문자열로 처리하도록 하려면 인터페이스 병합 을 사용합니다.

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

이 줄을 프로젝트의 어느 파일에나 추가합니다. 이는 전역적으로 AWESOME 속성을 process.envBun.env 에 추가합니다.

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

Bun 설정

이러한 환경 변수는 Bun 에서 읽으며 동작의 측면을 설정합니다.

이름설명
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 은 SSL 인증서 검증을 비활성화합니다. 이는 테스트와 디버깅에 유용하지만 프로덕션에서는 매우 신중하게 사용해야 합니다. 참고: 이 환경 변수는 원래 Node.js 에서 도입되었으며 호환성을 위해 이름을 유지했습니다.
BUN_CONFIG_VERBOSE_FETCHBUN_CONFIG_VERBOSE_FETCH=curl 이면 fetch 요청이 url, 메서드, 요청 헤더 및 응답 헤더를 콘솔에 로깅합니다. 이는 네트워크 요청 디버깅에 유용합니다. 이는 node:http 에서도 작동합니다. BUN_CONFIG_VERBOSE_FETCH=1curl 출력을 제외하고 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 가 설정되지 않으면 런타임 트랜스파일러는 트랜스파일된 출력을 플랫폼별 캐시 디렉토리에 캐시합니다.
TMPDIRBun 은 번들링이나 기타 작업 중 중간 자산을 저장하기 위해 가끔 디렉토리가 필요합니다. 설정되지 않으면 플랫폼별 임시 디렉토리를 기본값으로 사용합니다. Linux 는 /tmp, macOS 는 /private/tmp 입니다.
NO_COLORNO_COLOR=1 이면 ANSI 색상 출력이 비활성화됩니다.
FORCE_COLORFORCE_COLOR=1 이면 NO_COLOR 가 설정되어도 ANSI 색상 출력이 강제 활성화됩니다.
BUN_CONFIG_MAX_HTTP_REQUESTSfetch 와 bun install 이 보내는 동시 HTTP 요청의 최대 수를 제어합니다. 기본값은 256 입니다. 속도 제한이나 연결 문제에 직면하면 이 수를 줄일 수 있습니다.
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOADBUN_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 devbun --hot run dev 처럼 동작하게 합니다.

런타임 트랜스파일러 캐싱

50KB 보다 큰 파일의 경우 Bun 은 트랜스파일된 출력을 $BUN_RUNTIME_TRANSPILER_CACHE_PATH 나 플랫폼별 캐시 디렉토리에 캐시합니다. 이는 Bun 을 사용하는 CLI 의 로딩 속도를 높입니다.

이 트랜스파일러 캐시는 전역이며 모든 프로젝트에서 공유됩니다. 언제든지 캐시를 삭제해도 안전합니다. 콘텐츠 주소 가능 캐시이므로 중복 항목이 포함되지 않습니다. Bun 프로세스가 실행 중일 때도 캐시를 삭제해도 안전합니다.

Docker 와 같은 임시 파일시스템을 사용할 때는 이 캐시를 비활성화하는 것이 좋습니다. Bun 의 Docker 이미지는 자동으로 이 캐시를 비활성화합니다.

런타임 트랜스파일러 캐시 비활성화

런타임 트랜스파일러 캐시를 비활성화하려면 BUN_RUNTIME_TRANSPILER_CACHE_PATH 를 빈 문자열이나 "0" 문자열로 설정합니다.

sh
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev

무엇을 캐시하나요?

다음 항목을 캐시합니다.

  • 50KB 보다 큰 소스 파일의 트랜스파일된 출력
  • 파일의 트랜스파일된 출력에 대한 소스맵

이러한 캐시된 파일에는 .pile 파일 확장자가 사용됩니다.

Bun by www.bunjs.com.cn 편집