어댑터 헬퍼
어댑터 헬퍼는 다양한 플랫폼과 통합된 인터페이스를 통해 원활하게 상호작용할 수 있는 방법을 제공한다.
임포트
ts
import { Hono } from 'hono'
import { env, getRuntimeKey } from 'hono/adapter'env()
env() 함수는 Cloudflare Workers의 바인딩을 넘어 다양한 런타임에서 환경 변수를 쉽게 가져올 수 있도록 도와준다. env(c)로 가져올 수 있는 값은 각 런타임마다 다를 수 있다.
ts
import { env } from 'hono/adapter'
app.get('/env', (c) => {
// Node.js나 Bun에서는 process.env.NAME
// Cloudflare에서는 `wrangler.toml`에 작성된 값
const { NAME } = env<{ NAME: string }>(c)
return c.text(NAME)
})지원하는 런타임, 서버리스 플랫폼, 클라우드 서비스:
- Cloudflare Workers
wrangler.toml
- Deno
Deno.env.env파일
- Bun
Bun.envprocess.env
- Node.js
process.env
- Vercel
- AWS Lambda
- Lambda@Edge
Lambda@Edge는 환경 변수를 지원하지 않는다. 대신 Lambda@Edge 이벤트를 사용해야 한다. - Fastly Compute
Fastly Compute에서는 ConfigStore를 사용해 사용자 정의 데이터를 관리할 수 있다. - Netlify
Netlify에서는 Netlify Contexts를 사용해 사용자 정의 데이터를 관리할 수 있다.
런타임 지정하기
환경 변수를 얻기 위해 두 번째 인자로 런타임 키를 전달하여 런타임을 지정할 수 있다.
ts
app.get('/env', (c) => {
const { NAME } = env<{ NAME: string }>(c, 'workerd')
return c.text(NAME)
})getRuntimeKey()
getRuntimeKey() 함수는 현재 런타임의 식별자를 반환한다.
ts
app.get('/', (c) => {
if (getRuntimeKey() === 'workerd') {
return c.text('You are on Cloudflare')
} else if (getRuntimeKey() === 'bun') {
return c.text('You are on Bun')
}
...
})사용 가능한 런타임 키
다음은 사용 가능한 런타임 키 목록이다. 지원되지 않는 런타임 키는 other로 표시될 수 있으며, 일부는 WinterCG의 런타임 키에서 영감을 받았다.
workerd- Cloudflare Workersdenobunnodeedge-light- Vercel Edge Functionsfastly- Fastly Computeother- 기타 알려지지 않은 런타임 키