runlot
참조

runlot.json

프로젝트 디렉토리의 설정 파일입니다. 이름·진입점·자산 디렉토리와, 무엇을 켰는지의 기록이 들어갑니다.

정본은 web/apps/cli/src/config.tsinternal/bundle/bundle.go 입니다. 이 페이지는 빌드할 때 그 코드에서 만들어집니다.
runlot.json
{
  "name": "my-app",
  "org": "me",
  "main": "src/index.ts",
  "assets": "public",
  "database": true
}

필드

필드필수
namestring프로젝트 이름. 배포 주소의 첫 라벨이 됩니다
orgstring아니오조직 slug. --org 가 이 값을 이깁니다
mainstring아니오워커 진입점. 없으면 정적 자산만 배포합니다
assetsstring아니오정적 자산 디렉토리
compatibilityDatestring아니오workerd 호환 날짜 (YYYY-MM-DD)
databaseboolean아니오데이터베이스를 쓴다는 기록. runlot pg create 가 적습니다
storageboolean아니오파일 저장소를 쓴다는 기록. runlot storage create 가 적습니다
authboolean아니오앱의 로그인을 쓴다는 기록. runlot auth create 가 적습니다
framework"next"아니오프레임워크 어댑터. 지금 아는 값은 next 하나입니다

name 은 없으면 배포가 거절됩니다. mainassets 중 적어도 하나는 있어야 합니다 — 둘 다 없으면 서빙할 것이 없기 때문입니다. framework 를 적은 프로젝트는 예외입니다: 진입점과 자산을 빌드가 만듭니다.

기록이지 선언이 아닙니다

database · storage · authrunlot pg create · runlot storage create · runlot auth create 가 적는 기록입니다. runlot deploy 는 이 값을 보고 만들지 않습니다 — 배포가 프로비저닝 경로이면 오타 하나가 조용히 데이터베이스를 만들고, 그것을 지우는 길은 배포에 없기 때문입니다. 기록과 실제가 어긋나면 배포가 경고합니다.

값이 이름이 아니라 true 인 이유는 한 프로젝트에 한 벌씩이기 때문입니다. 고를 것이 없으니 워커에서는 늘 env.db · env.storage · env.auth 입니다.

번들 매니페스트

runlot deploy 는 위 파일을 그대로 올리지 않습니다. 번들 안에 들어가는 runlot.json 은 빌드 결과를 가리키는 매니페스트이고, CLI 가 만듭니다. 사용자가 직접 적을 일은 없지만 검사 규칙은 알아 둘 만합니다.

필드
main번들 안의 워커 진입 모듈. 없으면 자산만 서빙하는 진입점이 자동으로 들어갑니다
assets번들 안의 자산 디렉토리
compatibilityDateYYYY-MM-DD. 없으면 2024-09-23 입니다
compatibilityFlags허용 목록입니다. 지금 켤 수 있는 것은 nodejs_compat 하나뿐입니다
modules추가 모듈. wasm 형만 받습니다
framework프레임워크 어댑터. 아는 값은 next 하나입니다

compatibilityFlags 가 허용 목록인 이유는, 사용자 코드가 프로세스를 통째로 쥐게 하는 플래그를 어떤 매니페스트도 켤 수 없어야 하기 때문입니다. nodejs_compat 은 CLI 가 알아서 켭니다 — 번들에 Node 내장 모듈 import 가 있으면 그 플래그 없이는 로드 오류라, 사용자가 고를 것이 없습니다.

WASM 이 modules 로만 들어가는 이유는 workerd 가 번들 안에서 new WebAssembly.Module(bytes) 로 컴파일하는 길을 막기 때문입니다. Prisma 의 쿼리 컴파일러가 이 길로 들어갑니다.

번들 상한

상한
업로드(압축)64 << 20
푼 뒤 누적512 << 20
항목 하나64 << 20
항목 수20_000

번들에는 실제 파일만 담깁니다. 심볼릭 링크, 프로젝트 루트 밖을 가리키는 경로, 중복 항목은 모두 거절됩니다.

이 페이지에서