← Cloudflare Workers / workers
Lokální vývoj
Kód Workeru můžete sestavit, spustit a otestovat na vlastním lokálním počítači ještě před nasazením do sítě Cloudflare. Umožňuje to Miniflare, simulátor, který spouští kód vašeho Workeru pomocí stejného runtime jako v produkci, workerd ↗.
Ve výchozím nastavení, vazby vašeho Workeru připojit se k lokálně simulovaným prostředkům, ale lze je nakonfigurovat tak, aby komunikovaly se skutečným produkčním prostředkem pomocí vzdálené bindings.
Základní koncepty
Provádění Workeru vs. Bindings
Při vývoji Workerů je důležité rozumět dvěma odlišným konceptům:
-
Provádění Workeru: Kde váš kód Workeru skutečně běží (na vašem lokálním počítači, nebo na infrastruktuře Cloudflare).
-
Bindings: Jak váš Worker interaguje se zdroji Cloudflare (jako KV namespaces, R2 buckety, Databáze D1, Queues, Durable Objects, atd.). V kódu Workeru k nim přistupujete přes
envobjekt (napříkladenv.MY_KV).
Spusťte lokální vývojový server
Lokální vývojový server můžete spustit pomocí:
- CLI Cloudflare Workers Wrangler, pomocí vestavěného
wrangler devpříkazu.
npx wrangler dev- Vite ↗, pomocí Cloudflare Vite plugin.
npx vite devWrangler i Cloudflare Vite plugin používají Miniflare pod kapotou a jsou vyvíjeny a udržovány týmem Cloudflare. Pro pomoc s výběrem, kdy použít Wrangler a kdy Vite, se podívejte na náš návod Volba mezi Wrangler a Vite.
Výchozí hodnoty
Ve výchozím nastavení spuštění wrangler dev / vite dev (při použití Plugin Vite) znamená, že:
- Kód vašeho Workeru běží na vašem lokálním počítači.
- Všechny prostředky, ke kterým je váš Worker navázán ve svém Konfigurace Wrangleru jsou simulovány lokálně.
- Lokální
workerdruntime běží sTZ=UTCtak, abyDateaIntlAPI ve vašem Workeru pracují s časem UTC, stejně jako produkční prostředí Cloudflare runtime, bez ohledu na časové pásmo vašeho počítače.
Bindings během místního vývoje
Bindings jsou rozhraní, která vašemu Workeru umožňují komunikovat s různými prostředky Cloudflare (například KV namespaces, R2 buckety, Databáze D1, Queues, Durable Objects, atd.). V kódu Workeru k nim přistupujete přes env objekt (například env.MY_KV).
Během místního vývoje váš kód Workeru komunikuje s těmito vazbami pomocí naprosto stejných volání API (například env.MY_KV.put()) stejně jako v nasazeném prostředí. Tyto lokální prostředky jsou zpočátku prázdné, ale můžete je naplnit daty podle postupu popsaného v Přidávání lokálních dat.
- Ve výchozím nastavení se bindingy připojují k simulace lokálních prostředků (kromě AI bindings, protože AI modely vždy běží vzdáleně).
- Toto výchozí chování můžete přepsat a připojit se ke vzdálenému prostředku pro jednotlivé bindingy pomocí vzdálené bindings. Díky tomu se můžete připojit ke skutečným produkčním zdrojům, přestože kód Workeru stále spouštíte lokálně.
- Při použití
wrangler dev, můžete dočasně vypnout všechny vzdálené bindings (a připojit se pouze k lokálním zdrojům) tím, že poskytnete--localpříznak (tj.wrangler dev --local)
Remote Bindings
Remote Bindings jsou bindingy nakonfigurované tak, aby se během místního vývoje připojovaly k nasazenému vzdálenému prostředku místo toho lokálně simulovaného prostředku. Remote bindings podporuje Wrangler, Cloudflare Vite plugin, a @cloudflare/vitest-plugin balíček. Remote bindings můžete nakonfigurovat nastavením remote: true v definici bindingu.
Příklad konfigurace
{
"name": "my-worker",
// Set this to today's date
"compatibility_date": "2026-08-28",
"r2_buckets": [
{
"bucket_name": "screenshots-bucket",
"binding": "screenshots_bucket",
"remote": true,
},
],
}name = "my-worker"
# Set this to today's date
compatibility_date = "2026-08-28"
[[r2_buckets]]
bucket_name = "screenshots-bucket"
binding = "screenshots_bucket"
remote = trueKdyž jsou nakonfigurovány vzdálené bindingy, váš Worker stále spouští se lokálně, mění se pouze podkladové prostředky, ke kterým se vaše bindingy připojují. U všech bindingů označených remote: true, Miniflare bude směrovat své operace (například env.MY_KV.put()) k nasazenému prostředku. Všechny ostatní bindings, které nejsou výslovně nakonfigurované pomocí remote: true nadále používají výchozí lokální simulace.
Integrace s prostředími
Remote Bindings dobře fungují společně s Workers Environments. Chcete-li chránit produkční data, můžete vytvořit vývojové nebo staging prostředí a určit jiné zdroje ve svém Konfigurace Wrangleru než byste použili pro produkci.
Například:
{
"name": "my-worker",
// Set this to today's date
"compatibility_date": "2026-08-28",
"env": {
"production": {
"r2_buckets": [
{
"bucket_name": "screenshots-bucket",
"binding": "screenshots_bucket",
},
],
},
"staging": {
"r2_buckets": [
{
"bucket_name": "preview-screenshots-bucket",
"binding": "screenshots_bucket",
"remote": true,
},
],
},
},
}name = "my-worker"
# Set this to today's date
compatibility_date = "2026-08-28"
[[env.production.r2_buckets]]
bucket_name = "screenshots-bucket"
binding = "screenshots_bucket"
[[env.staging.r2_buckets]]
bucket_name = "preview-screenshots-bucket"
binding = "screenshots_bucket"
remote = trueSpouštění wrangler dev -e staging (nebo CLOUDFLARE_ENV=staging vite dev) s výše uvedenou konfigurací znamená, že:
- Kód vašeho Workeru běží lokálně
- Všechna volání směřující na
env.screenshots_bucketpoužijepreview-screenshots-bucketresource, a ne produkčníscreenshots-bucket.
Doporučené vzdálené bindings
Doporučujeme nakonfigurovat konkrétní bindings tak, aby se připojovaly ke svým vzdáleným protějškům. Tyto služby často závisí na síťové infrastruktuře Cloudflare, nebo mají komplexní backendy, které nelze lokálně plně simulovat.
U následujících bindings se doporučuje mít remote: true ve vaší konfiguraci Wrangler:
Pro interakci se skutečným headless prohlížečem za účelem renderování. Pro Browser Run v současnosti neexistuje lokální simulace.
{
"browser": {
"binding": "MY_BROWSER",
"remote": true
},
}[browser]
binding = "MY_BROWSER"
remote = trueK využití skutečných modelů AI nasazených v síti Cloudflare pro inferenci. Pro Workers AI v současnosti neexistuje žádná místní simulace.
{
"ai": {
"binding": "AI",
"remote": true
},
}[ai]
binding = "AI"
remote = trueChcete-li se připojit ke svým produkčním indexům Vectorize kvůli přesnému vektorovému vyhledávání a operacím podobnosti. Pro Vectorize v současnosti neexistuje žádná lokální simulace.
{
"vectorize": [
{
"binding": "MY_VECTORIZE_INDEX",
"index_name": "my-prod-index",
"remote": true
}
],
}[[vectorize]]
binding = "MY_VECTORIZE_INDEX"
index_name = "my-prod-index"
remote = truemTLS:
K ověření, že proces výměny a validace certifikátů funguje podle očekávání. Pro bindings mTLS v současnosti neexistuje žádná místní simulace.
{
"mtls_certificates": [
{
"binding": "MY_CLIENT_CERT_FETCHER",
"certificate_id": "<YOUR_UPLOADED_CERT_ID>",
"remote": true
}
]
}[[mtls_certificates]]
binding = "MY_CLIENT_CERT_FETCHER"
certificate_id = "<YOUR_UPLOADED_CERT_ID>"
remote = trueChcete-li se připojit k věrné verzi Images API a ověřit, že všechny transformace fungují podle očekávání. Lokální simulace pro Cloudflare Images je omezené pouze na podmnožinu funkcí.
{
"images": {
"binding": "IMAGES" ,
"remote": true
}
}[images]
binding = "IMAGES"
remote = trueUživatelé Workers for Platforms mohou nakonfigurovat remote: true v definicích vazeb dispatch namespace:
{
"dispatch_namespaces": [
{
"binding": "DISPATCH_NAMESPACE",
"namespace": "testing",
"remote":true
}
]
}[[dispatch_namespaces]]
binding = "DISPATCH_NAMESPACE"
namespace = "testing"
remote = trueTo vám umožňuje spustit váš dynamic dispatch Worker lokálně a přitom jej připojit k vaší vzdálené vazbě dispatch namespace. Díky tomu můžete testovat změny ve své hlavní logice dispatchování proti reálným, nasazeným uživatelské Workers.
Nepodporované vzdálené bindings
Určité bindings nejsou podporovány pro vzdálená připojení (tj. s remote: true) během lokálního vývoje. Ty vždy používají lokální simulace nebo lokální hodnoty.
Pokud remote: true je zadáno v konfiguraci Wrangler pro některý z následujících nepodporovaných typů bindings, Cloudflare vydá chybu. Viz všechny podporované a nepodporované vazby pro vzdálené vazby.
-
Durable Objects: Podpora vzdálených připojení pro Durable Objects může být přidána v budoucnu, zatím ale vždy běží lokálně. Durable Objects je ovšem možné používat v kombinaci se vzdálenými bindings. Více informací najdete v Použití vzdálených prostředků s Durable Objects a Workflows níže.
-
Workflows: Podpora vzdálených připojení pro Workflows může být přidána v budoucnu, zatím ale běží pouze lokálně. Workflows je ovšem možné používat v kombinaci se vzdálenými bindings. Více informací najdete v Použití vzdálených prostředků s Durable Objects a Workflows níže.
-
Proměnné prostředí (
vars): Proměnné prostředí se mají mezi lokálním vývojem a nasazenými prostředími lišit. Lokálně je lze snadno nastavit například v.dev.varssoubor, nebo přímo v konfiguraci Wrangleru). -
Tajné klíče: Stejně jako proměnné prostředí mají mít z bezpečnostních důvodů i secrets v lokálním vývoji a v nasazených prostředích odlišné hodnoty. Použijte
.dev.varspro správu lokálních tajných hodnot. -
Static Assets Statické assety se během vývoje vždy poskytují z lokálního disku, aby byla zajištěna rychlost a okamžitá zpětná vazba na změny.
-
Metadata verze: Protože kód vašeho Workeru běží lokálně, metadata verze (jako hash commitu nebo verzovací tagy) spojená s konkrétní nasazenou verzí nejsou relevantní ani přesná.
-
Analytics Engine: Relace lokálního vývoje obvykle nepřispívají daty přímo do produkčního Analytics Engine.
-
Hyperdrive: Na tomto se aktivně pracuje, ale zatím to není podporováno.
-
Rate Limiting: Relace lokálního vývoje by obvykle neměly sdílet ani ovlivňovat rate limity vašich nasazených Workerů. Logiku rate limitingu byste měli testovat proti lokálním simulacím.
Použití vzdálených prostředků s Durable Objects a Workflows
Bindings pro Durable Object a Workflow aktuálně nemohou být remote, přesto je můžete používat při lokálním vývoji a nechat je pracovat se vzdálenými prostředky.
Pro toto jsou doporučeny dva vzory:
-
Lokální Durable Objects/Workflows se vzdálenými bindings:
Když povolíte remote bindings ve svém Konfigurace Wrangleru, vaše lokálně spuštěné Durable Objects a Workflows mohou přistupovat ke vzdáleným prostředkům. Díky tomu mohou tyto vazby, i když běží lokálně, během lokálního vývoje pracovat se vzdálenými prostředky.
-
Přístup ke vzdáleným Durable Objects/Workflows přes service bindings:
Chcete-li interagovat se vzdálenými instancemi Durable Object nebo Workflow, nasaďte Worker, který je definuje. Poté ve svém lokálním Workeru nakonfigurujte vzdálený service binding směřující na nasazený Worker. Váš lokální Worker pak bude moci komunikovat se vzdáleným nasazeným Workerem, který následně komunikuje se vzdálenými Durable Objects/Workflows. Tímto způsobem vytvoříte komunikační kanál přes remote service binding a nasazený Worker efektivně použijete jako proxy rozhraní ke vzdáleným bindings během lokálního vývoje.
Důležité poznámky
-
Cloudflare Access: Pokud je váš Worker chráněný službou Cloudflare Access, musí se Wrangler při připojování ke vzdáleným bindings ověřit vůči Access. Více informací najdete v Připojte se k Workers chráněným pomocí Access.
-
Úprava dat: Operace (zápisy, mazání, aktualizace) na vzdáleně připojených bindings ovlivní vaše skutečná data v cílovém zdroji Cloudflare, ať už jde o preview, nebo produkci.
-
Billing: Interakce se vzdálenými službami Cloudflare prostřednictvím těchto připojení podléhají standardním provozním nákladům daných služeb (například operace KV, úložiště/operace R2, požadavky AI, využití D1).
-
Síťová latence: U operací s těmito vzdáleně připojenými bindings počítejte se síťovou latencí, protože probíhají přes internet.
Připojte se k Workers chráněným pomocí Access
Pokud je váš Worker chráněn Cloudflare Access, Wrangler se musí při připojování k vzdáleným vazbám ověřit pomocí Access. Platí to bez ohledu na to, zda Access chrání samotný Worker, všechny Workers v účtu, nebo workers.dev hostname, Custom Domain nebo jiný hostname či cestu, které směrují na Worker.
Existují dva způsoby, jak se můžete ověřit vůči Access:
-
Interaktivní přihlášení (lokální vývoj): Pokud máte definovanou zásadu, která přijímá přihlášení uživatele, Wrangler spustí interaktivní
cloudflared access logintok ve svém prohlížeči. Kromě přihlášení ke správnému účtu není nutné žádné další nastavení. Pokud zásada povoluje pouze ověřování pomocí service tokenu, Wrangler interaktivní tok přeskočí a vyvolá chybu s informací, že jsou vyžadovány přihlašovací údaje service tokenu. -
Service token (CI / neinteraktivní prostředí): V CI/CD pipeline a dalších neinteraktivních kontextech, nebo tam, kde zásady povolují pouze ověřování pomocí service tokenu, nemůže Wrangler spustit interaktivní proces přes prohlížeč. Ověření musí proběhnout pomocí servisní token Cloudflare Access místo toho. Pokud v neinteraktivním prostředí nenastavíte service token, Wrangler vyvolá chybu místo pokusu o interaktivní postup.
Chcete-li nastavit ověřování pomocí Service Token:
-
Vytvořte service token.
V Cloudflare dashboardu přejděte na Zero Trust > Access > Service Auth > Service Tokens a vytvořte nový token. Viz Service tokens pro úplnou referenci. Zobrazí se vám Client ID a Client Secret, uložte si je na bezpečné místo, protože secret se znovu nezobrazí.
-
Přidejte zásadu Service Auth do aplikace Access, která chrání váš Worker.
Otevřete existující aplikaci Access, která již chrání Worker nebo hostname používaný pro vzdálené vazby, a připojte novou zásadu pomocí:
- Akce: Service Auth
- Include: Token služby, který jste vytvořili, nebo možnost "Any Access Service Token", pokud chcete povolit přístup k Workeru libovolnému tokenu služby.
-
Zpřístupněte přihlašovací údaje Wrangleru.
Nastavte
CLOUDFLARE_ACCESS_CLIENT_IDaCLOUDFLARE_ACCESS_CLIENT_SECRETsystémové proměnné prostředí v prostředí, ve kterém běží Wrangler:export CLOUDFLARE_ACCESS_CLIENT_ID=<CLIENT_ID> export CLOUDFLARE_ACCESS_CLIENT_SECRET=<CLIENT_SECRET>V CI ukládejte hodnoty jako secrets a zpřístupněte je jako proměnné prostředí kroku, který spouští Wrangler.
API
Wrangler poskytuje programové nástroje, které autorům vývojářských nástrojů pomáhají podporovat vzdálená připojení bindingů při spouštění kódu Workers pomocí Miniflare.
Mezi klíčová API patří:
startRemoteProxySession: Spustí proxy relaci, která umožňuje interakci se vzdálenými bindings.unstable_convertConfigBindingsToStartWorkerBindings: Nástroj pro převod definic vazeb.experimental_maybeStartOrUpdateProxySession: Pomocná funkce pro snadné spuštění nebo aktualizaci proxy relace.
startRemoteProxySession
Tato funkce spustí proxy relaci pro danou sadu vazeb. Přijímá možnosti pro řízení chování relace, včetně auth možnost s ID účtu Cloudflare a API tokenem pro přístup přes remote binding.
Vrací objekt s:
readyPromise<void>: Vyřeší se (resolve), jakmile je relace připravena.dispose() => Promise<void>: Ukončí relaci.updateBindings(bindings: StartDevWorkerInput['bindings']) => Promise<void>: Aktualizuje vazby relace.remoteProxyConnectionStringremoteProxyConnectionString: Řetězec, který se předává Miniflare pro přístup ke vzdálenému bindingu.
unstable_convertConfigBindingsToStartWorkerBindings
unstable_readConfig nástroj vrací Unstable_Config objekt, který obsahuje definici bindingů uvedených v konfiguračním souboru. Tyto definice bindingů
však nejsou přímo kompatibilní s startRemoteProxySession. Přesto může být praktické číst deklarace bindings pomocí unstable_readConfig a poté
předejte je startRemoteProxySession, proto pro tento účel wrangler zpřístupňuje unstable_convertConfigBindingsToStartWorkerBindings což je jednoduchý nástroj pro převod
bindingů v Unstable_Config objekt do struktury, kterou lze předat do startRemoteProxySession.
maybeStartOrUpdateRemoteProxySession
Tento wrapper zjednodušuje správu proxy relací. Přijímá:
- Objekt, který obsahuje jedno z následujícího:
- cesta ke konfiguraci Wrangler a případné cílové prostředí
- název Workeru a bindings, které používá
- Podrobnosti aktuální proxy relace (tento parametr lze nastavit na
nullnebo se neposkytne, pokud žádný neexistuje). - Volitelně ověřovací údaje, které se použijí pro relaci vzdáleného proxy serveru.
Vrací objekt s podrobnostmi o proxy relaci, pokud byla spuštěna nebo aktualizována, nebo null pokud není potřeba proxy relace.
Funkce:
- Na základě prvního argumentu připraví vstupní argumenty pro proxy relaci.
- Pokud nejsou k dispozici žádné remote bindings (ani existující proxy relace), vrátí null, což signalizuje, že proxy relace není potřeba.
- Pokud jsou zadány podrobnosti existující proxy relace, odpovídajícím způsobem ji aktualizuje.
- V opačném případě se spustí nová proxy relace.
- Vrátí podrobnosti relace proxy (které lze později předat jako druhý argument do
maybeStartOrUpdateRemoteProxySession).
Příklad
Následuje základní příklad použití Miniflare s maybeStartOrUpdateRemoteProxySession pro poskytnutí lokální vývojové relace se vzdálenými bindings. Tento příklad používá jeden pevně zadaný KV binding.
import { Miniflare, MiniflareOptions } from "miniflare";
import { maybeStartOrUpdateRemoteProxySession } from "wrangler";
let mf;
let remoteProxySessionDetails = null;
async function startOrUpdateDevSession() {
remoteProxySessionDetails = await maybeStartOrUpdateRemoteProxySession(
{
bindings: {
MY_KV: {
type: "kv_namespace",
id: "kv-id",
remote: true,
},
},
},
remoteProxySessionDetails,
);
const miniflareOptions = {
scriptPath: "./worker.js",
kvNamespaces: {
MY_KV: {
id: "kv-id",
remoteProxyConnectionString:
remoteProxySessionDetails?.session.remoteProxyConnectionString,
},
},
};
if (!mf) {
mf = new Miniflare(miniflareOptions);
} else {
mf.setOptions(miniflareOptions);
}
}
// ... tool logic that invokes `startOrUpdateDevSession()` ...
// ... once the dev session is no longer needed run
// `remoteProxySessionDetails?.session.dispose()`import { Miniflare, MiniflareOptions } from "miniflare";
import { maybeStartOrUpdateRemoteProxySession } from "wrangler";
let mf: Miniflare | null;
let remoteProxySessionDetails: Awaited<
ReturnType<typeof maybeStartOrUpdateRemoteProxySession>
> | null = null;
async function startOrUpdateDevSession() {
remoteProxySessionDetails = await maybeStartOrUpdateRemoteProxySession(
{
bindings: {
MY_KV: {
type: "kv_namespace",
id: "kv-id",
remote: true,
},
},
},
remoteProxySessionDetails,
);
const miniflareOptions: MiniflareOptions = {
scriptPath: "./worker.js",
kvNamespaces: {
MY_KV: {
id: "kv-id",
remoteProxyConnectionString:
remoteProxySessionDetails?.session.remoteProxyConnectionString,
},
},
};
if (!mf) {
mf = new Miniflare(miniflareOptions);
} else {
mf.setOptions(miniflareOptions);
}
}
// ... tool logic that invokes `startOrUpdateDevSession()` ...
// ... once the dev session is no longer needed run
// `remoteProxySessionDetails?.session.dispose()`wrangler dev --remote (Legacy)
Kromě lokálního vývoje poháněného nástrojem Miniflare nabízí Wrangler také plně vzdálený režim vývoje pomocí wrangler dev --remote. Vzdálený vývoj je ne podporováno v pluginu Vite.
npx wrangler dev --remoteBěhem vzdálený vývoj, veškerý kód vašeho Workeru se nahraje do dočasného náhledového prostředí v infrastruktuře Cloudflare a změny v kódu se automaticky nahrávají při každém uložení.
Při vzdáleném vývoji se všechny bindings automaticky připojují ke svým vzdáleným prostředkům. Na rozdíl od lokálního vývoje nelze bindings nakonfigurovat tak, aby používaly lokální simulace, vždy použijí nasazené prostředky v síti Cloudflare.
Kdy použít vzdálený vývoj
- Pro většinu vývojářských úkolů bude nejefektivnější a nejproduktivnější lokální vývoj spolu s vzdálené bindings podle potřeby.
- Můžete použít
wrangler dev --remotepro testování funkcí nebo chování, které jsou vysoce specifické pro síť Cloudflare a nelze je dostatečně simulovat lokálně ani testovat prostřednictvím remote bindings.
Co zvážit
- Iterace je výrazně pomalejší než lokální vývoj kvůli kroku nahrání/nasazení při každé změně.
Omezení
- Když spustíte relaci vzdáleného vývoje pomocí
--remotepříznak, limit 50 trasy na zónu se vynucuje. Další informace najdete v limity platformy Workers.