runlot

정적 자산

자산 디렉토리는 번들에 통째로 들어가고, 워커에서는 env.assets 로 꺼냅니다.

runlot.jsonassets 가 가리키는 디렉토리는 배포 때 통째로 올라갑니다.

runlot.json
{ "name": "my-app", "main": "src/index.ts", "assets": "public" }

워커에서 꺼내기

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);
    if (url.pathname.startsWith("/static/")) {
      return env.assets.fetch(
        new Request(new URL(url.pathname.slice("/static".length), url), request),
      );
    }
    return new Response("hello");
  },
};

경로는 자산 디렉토리 기준입니다. 위 예시에서 /static/logo.svgpublic/logo.svg 입니다.

"자산이 있으면 자산, 없으면 워커" 같은 자동 우선순위는 없습니다. 어느 경로를 자산으로 낼지는 워커가 정합니다 — 그래야 /about 같은 경로에서 자산과 라우트가 조용히 겹치지 않습니다.

자산만 있는 배포

main 없이 assets 만 있으면, 모든 요청을 자산으로 넘기는 진입점이 자동으로 들어갑니다.

runlot.json
{ "name": "my-site", "assets": "dist" }

직접 적으면 이런 모양입니다.

export default {
  fetch(request, env) {
    return env.assets.fetch(request);
  },
};

담기지 않는 것

  • 심볼릭 링크. 번들에는 실제 파일만 담깁니다.
  • 프로젝트 루트 밖. "assets": "../dist" 는 거절됩니다.
  • 중복 항목. 같은 경로가 두 번 들어간 번들은 거절됩니다.

node_modules 나 빌드 캐시가 자산 디렉토리 안에 있으면 그대로 올라갑니다. 번들 크기가 예상보다 크면 먼저 그것을 보세요. 상한은 번들 규칙 에 있습니다.

이 페이지에서