정적 자산
정적 자산 디렉토리의 모든 파일은 번들에 포함되며, 워커에서는 `env.assets`로 제공합니다.
runlot.json의 assets가 가리키는 디렉토리에 있는 파일은 배포할 때 모두 업로드됩니다.
{ "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.svg는 public/logo.svg 파일을 가리킵니다.
자산 파일을 자동으로 우선 처리하지 않습니다. 어떤 경로에서 자산을 제공할지는 워커 코드에서 명시적으로 정하세요. 이렇게 하면 /about처럼 자산 경로와 애플리케이션 라우트가 겹치는 문제를 피할 수 있습니다.
워커보다 앞선 파일 제공
runWorkerFirst: false로 설정하면 순서가 반대가 됩니다. assets 디렉터리에 정확히 일치하는 파일이 있으면 그 파일이 제공되고, 그 밖의 모든 경로는 워커로 전달됩니다.
{ "name": "my-app", "main": "build/server/index.js", "assets": "build/client", "runWorkerFirst": false }이는 자체 워커를 빌드하는 프레임워크에 필요한 것입니다 — React Router, Astro, SvelteKit, Nuxt는 모두 렌더링을 수행하며 플랫폼이 이미 자신의 client 디렉터리를 제공했을 것으로 기대합니다. 프레임워크를 참조하세요.
파일이 아닌 경로는 확장자가 있는 경우를 포함해 여전히 워커로 전달됩니다. assets 디렉터리가 워커를 대신해 응답하는 일은 없습니다.
자산만 있는 배포
main 없이 assets만 지정하면, 모든 요청을 정적 자산으로 전달하는 진입점을 자동으로 만듭니다.
{ "name": "my-site", "assets": "dist" }같은 동작을 직접 구현하면 다음과 같습니다.
export default {
fetch(request, env) {
return env.assets.fetch(request);
},
};번들에 포함할 수 없는 항목
- 심볼릭 링크. 번들에는 실제 파일만 담깁니다.
- 프로젝트 루트 밖.
"assets": "../dist"는 거절됩니다. - 중복 항목. 같은 경로가 두 번 들어간 번들은 거절됩니다.
자산 디렉토리 안의 node_modules와 빌드 캐시도 모두 업로드됩니다. 번들 크기가 예상보다 크다면 먼저 이 파일들이 포함됐는지 확인하세요. 크기 제한은 번들 규칙에서 확인할 수 있습니다.