runlot

번들 규칙

배포 번들에 포함되는 파일과 제한 사항, 호환 플래그와 WASM 모듈 설정 방법을 안내합니다.

runlot deploy는 배포에 필요한 파일을 하나의 tar 번들로 만듭니다. CLI, 컨트롤 플레인, 노드는 각각 번들을 검증하며, 노드도 앞선 검증 결과에만 의존하지 않습니다.

크기 제한

항목제한
압축된 업로드64 MiB
압축 해제 후 총 크기512 MiB
파일 하나64 MiB
항목 수20,000
경로 길이255 바이트
runlot.json1 MiB

제한을 초과하면 bundle_too_large 오류가 발생합니다. 보통 assets 디렉토리에 node_modules 또는 빌드 캐시가 포함된 경우입니다.

compatibilityDate

runlot.json
{ "compatibilityDate": "2025-01-15" }

값은 YYYY-MM-DD 형식이어야 합니다. 지정하지 않으면 2024-09-23을 사용합니다. 런타임보다 미래의 날짜는 허용하지 않으며, 기본값은 자동으로 앞당기지 않습니다.

compatibilityFlags

호환 플래그는 허용 목록 방식으로 관리합니다. 현재 사용할 수 있는 플래그는 nodejs_compat 하나입니다.

runlot.json
{ "compatibilityFlags": ["nodejs_compat"] }

허용 목록에 없는 플래그는 사용할 수 없습니다. 예를 들어 unsafe_module은 사용자 코드가 워커 프로세스를 제어할 수 있게 하므로 매니페스트에서 설정할 수 없습니다.

일반적으로 직접 설정할 필요가 없습니다. 번들에서 node: 내장 모듈을 가져오면 CLI가 nodejs_compat를 자동으로 추가합니다. 이 설정이 없으면 모듈을 로드할 수 없으며, TypeORM, Sequelize, Knex를 사용할 때도 자동으로 추가됩니다.

nodejs_compat는 전역 객체(process, Buffer)와 모듈 해석 방식을 변경하므로 기본으로 활성화하지 않습니다. 이를 사용하지 않는 워커의 동작을 배포 과정에서 변경하지 않기 위해서입니다.

wasm 모듈

번들 안의 WASM은 new WebAssembly.Module(bytes)로 컴파일할 수 없습니다. 런타임에서 이 방식을 지원하지 않으므로, WASM 파일은 매니페스트의 모듈로 포함합니다.

runlot.json (번들 안)
{
  "main": "worker/index.js",
  "modules": [{ "name": "query_compiler.wasm", "type": "wasm", "path": "worker/query_compiler.wasm" }]
}

이 설정도 CLI가 자동으로 생성합니다. Prisma의 쿼리 컴파일러가 이 방식으로 포함됩니다.

type에는 wasm만 지정할 수 있습니다. worker는 진입 모듈 이름으로 예약되어 있으며, 모듈 이름은 중복할 수 없습니다.

사용할 수 없는 항목

  • 심볼릭 링크 — 의도하지 않은 노드 파일이 제공되는 것을 방지합니다.
  • 프로젝트 루트 밖을 가리키는 경로 — 예: "assets": "../../etc"
  • 절대 경로와 .. 경로 구성 요소
  • 중복된 tar 항목 — 검증한 번들과 실행하는 번들이 달라지는 것을 방지합니다.
  • 경로에 포함된 NUL 문자
  • 지원하지 않는 framework — 현재 지원하는 값은 next입니다.

이 페이지의 목차