Workers Sites には Wrangler ↗ が必要です。最新版 を使ってください。
既存の Worker プロジェクトがある場合は、Workers Sites でその Worker に静的アセットを配信できます。
-
プロジェクトのルートに、アセットを置くディレクトリを作成します(例:
./public) -
Wrangler ファイルに、そのディレクトリを指す設定を追加します。
{ "site": { "bucket": "./public" // Add the directory with your static assets! } }[site] bucket = "./public" -
プロジェクトに
@cloudflare/kv-asset-handlerパッケージをインストールします。npm i -D @cloudflare/kv-asset-handler -
Worker のエントリーポイントに
getAssetFromKV()関数をインポートし、静的アセットで応答するようにします。
import { getAssetFromKV } from "@cloudflare/kv-asset-handler";
import manifestJSON from "__STATIC_CONTENT_MANIFEST";
const assetManifest = JSON.parse(manifestJSON);
export default {
async fetch(request, env, ctx) {
try {
// Add logic to decide whether to serve an asset or run your original Worker code
return await getAssetFromKV(
{
request,
waitUntil: ctx.waitUntil.bind(ctx),
},
{
ASSET_NAMESPACE: env.__STATIC_CONTENT,
ASSET_MANIFEST: assetManifest,
},
);
} catch (e) {
let pathname = new URL(request.url).pathname;
return new Response(`"${pathname}" not found`, {
status: 404,
statusText: "not found",
});
}
},
};import { getAssetFromKV } from "@cloudflare/kv-asset-handler";
addEventListener("fetch", (event) => {
event.respondWith(handleEvent(event));
});
async function handleEvent(event) {
try {
// Add logic to decide whether to serve an asset or run your original Worker code
return await getAssetFromKV(event);
} catch (e) {
let pathname = new URL(event.request.url).pathname;
return new Response(`"${pathname}" not found`, {
status: 404,
statusText: "not found",
});
}
}getAssetFromKV() の設定オプションについては、kv-asset-handler のドキュメント ↗ を参照してください。
-
通常どおり
wrangler deployまたはnpx wrangler deployを実行します。 Wrangler は、設定したディレクトリ内のアセットを自動でアップロードします。npx wrangler deploy