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와 빌드 캐시도 모두 업로드됩니다. 번들 크기가 예상보다 크다면 먼저 이 파일들이 포함됐는지 확인하세요. 크기 제한은 번들 규칙에서 확인할 수 있습니다.

이 페이지의 목차