← Cloudflare Workers / workers / wrangler / migration / v1-to-v2 / wrangler-legacy
Konfigurace
Kontext
Než budete moci Worker publikovat, bude váš projekt vyžadovat určitou konfiguraci. Ta se provádí úpravou klíčů a hodnot uložených v souboru Wrangler, který se nachází v kořenovém adresáři projektu. Tento soubor musíte před publikováním ručně upravit, abyste změnili příslušné klíče a hodnoty.
Prostředí
Konfigurace nejvyšší úrovně je soubor hodnot, které zadáte v horní části souboru Wrangler. Tyto hodnoty dědí všechna prostředí, pokud v daném prostředí nejsou definovány jinak.
Struktura konfigurace nejvyšší úrovně v konfiguračním souboru Wrangler vypadá takto:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "your-worker",
"type": "javascript",
"account_id": "your-account-id",
// This field specifies that the Worker
// will be deployed to a *.workers.dev domain
"workers_dev": true,
// -- OR --
// These fields specify that the Worker
// will deploy to a custom domain
"zone_id": "your-zone-id",
"routes": [
"example.com/*"
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "your-worker"
type = "javascript"
account_id = "your-account-id"
workers_dev = true
zone_id = "your-zone-id"
routes = [ "example.com/*" ]Konfigurace prostředí (volitelné): konfigurační hodnoty, které zadáte pod [env.name] ve vašem souboru Wrangler.
Prostředí umožňují nasadit stejný projekt na více míst pod více názvy. Tato prostředí se používají s --env nebo -e příznak na příkazy které nasazují živé Workers:
builddevpreviewpublishsecret
Některé vlastnosti prostředí lze zděděný z konfigurace nejvyšší úrovně, ale pokud jsou v prostředí nastaveny nové hodnoty, vždy přepíší hodnoty na nejvyšší úrovni.
Příklad [env.name] konfigurace vypadá takto:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"type": "javascript",
"name": "your-worker",
"account_id": "your-account-id",
"vars": {
"FOO": "default FOO value",
"BAR": "default BAR value"
},
"kv_namespaces": [
{
"binding": "FOO",
"id": "1a...",
"preview_id": "1b..."
}
],
"env": {
"helloworld": {
// Now adding configuration keys for the "helloworld" environment.
// These new values will override the top-level configuration.
"name": "your-worker-helloworld",
"account_id": "your-other-account-id",
"vars": {
"FOO": "env-helloworld FOO value",
"BAR": "env-helloworld BAR value"
},
"kv_namespaces": [
{
// Redeclare kv namespace bindings for each environment
// NOTE: In this case, passing new IDs because new `account_id` value.
"binding": "FOO",
"id": "888...",
"preview_id": "999..."
}
]
}
}
}"$schema" = "./node_modules/wrangler/config-schema.json"
type = "javascript"
name = "your-worker"
account_id = "your-account-id"
[vars]
FOO = "default FOO value"
BAR = "default BAR value"
[[kv_namespaces]]
binding = "FOO"
id = "1a..."
preview_id = "1b..."
[env.helloworld]
name = "your-worker-helloworld"
account_id = "your-other-account-id"
[env.helloworld.vars]
FOO = "env-helloworld FOO value"
BAR = "env-helloworld BAR value"
[[env.helloworld.kv_namespaces]]
binding = "FOO"
id = "888..."
preview_id = "999..."Chcete-li nasadit tento ukázkový Worker do helloworld prostředí byste spustili wrangler deploy --env helloworld.
Klíče
V souboru Wrangler existují tři typy klíčů:
-
Klíče pouze nejvyšší úrovně musí být nakonfigurovány výhradně na nejvyšší úrovni souboru Wrangler; všechna prostředí ve stejném projektu musí sdílet hodnotu tohoto klíče.
-
Zděděné klíče lze nastavit na nejvyšší úrovni a/nebo v prostředí. Pokud je klíč definovaný jen na nejvyšší úrovni, prostředí použije jeho hodnotu odtud. Pokud je klíč definovaný v prostředí, tato hodnota přepíše hodnotu z nejvyšší úrovně.
-
Nezděděné klíče je nutné definovat zvlášť pro každé prostředí.
-
namezděděné povinné- Název skriptu vašeho Workeru. Pokud je zděděný, název vašeho prostředí se připojí na nejvyšší úroveň.
-
typepovinné na nejvyšší úrovni- Určuje, jak
wrangler buildsestaví váš projekt. Existují tři možnosti:javascript,webpack, arust.javascriptkontroluje build příkaz zadaný v[build]sekci,webpacksestaví váš projekt pomocí webpacku v4 arustzkompiluje Rust kód v projektu do WebAssembly.
- Určuje, jak
-
account_idzděděné povinné- Toto je ID účtu přiřazeného k vaší zóně. Můžete mít více než jeden účet, proto se ujistěte, že používáte ID účtu přiřazeného k
zone_idzadáte, pokud nějakou zadáte. Lze ji také nastavit pomocíCF_ACCOUNT_IDproměnná prostředí.
- Toto je ID účtu přiřazeného k vaší zóně. Můžete mít více než jeden účet, proto se ujistěte, že používáte ID účtu přiřazeného k
-
zone_idzděděné volitelné- Toto je ID zóny nebo domény, na které chcete Worker spouštět. Lze jej také zadat pomocí
CF_ZONE_IDproměnná prostředí. Tento klíč je volitelný, pokud používáte pouze*.workers.devsubdoména.
- Toto je ID zóny nebo domény, na které chcete Worker spouštět. Lze jej také zadat pomocí
-
workers_devzděděné volitelné- Toto je booleovský příznak, který určuje, zda bude váš Worker nasazen do vašeho
*.workers.dev↗ subdoména. Pokud se vynechá, výchozí hodnota je false.
- Toto je booleovský příznak, který určuje, zda bude váš Worker nasazen do vašeho
-
routenezděděno volitelné- Route ve vaší zóně, zadaná pomocí vzoru URL, na které chcete spouštět svůj Worker.
route = "http://example.com/*".routeNEBOroutesklíč je vyžadován pouze v případě, že nepoužíváte*.workers.dev↗ subdoména.
- Route ve vaší zóně, zadaná pomocí vzoru URL, na které chcete spouštět svůj Worker.
-
routesnezděděno volitelné- Seznam rout, na kterých chcete Worker používat. Řídí se přesně stejnými pravidly jako
route, ale můžete zadat jejich seznam.routes = ["http://example.com/hello", "http://example.com/goodbye"].routeNEBOroutesklíč je vyžadován pouze v případě, že nepoužíváte*.workers.devsubdoména.
- Seznam rout, na kterých chcete Worker používat. Řídí se přesně stejnými pravidly jako
-
webpack_configzděděné volitelné- Toto je cesta k vlastnímu souboru s konfigurací webpacku pro váš Worker. Chcete-li použít vlastní konfiguraci webpacku, musíte toto pole vyplnit, jinak Wrangler použije výchozí konfiguraci. Podrobnosti najdete v Stránka o webpacku ve Wrangleru s dalšími informacemi.
-
varsnezděděno volitelné- Objekt obsahující textové proměnné, ke kterým lze přímo přistupovat ve skriptu Workeru.
-
kv_namespacesnezděděno volitelné- Ty určují jakékoli Workers KV Namespaces, ke kterým chcete přistupovat zevnitř svého Workeru.
-
sitezděděné volitelné- Určuje místní složku pro nahrání a obsluhu z Workeru.
-
devnezděděno volitelné- Argumenty pro
wrangler devkteré konfigurují lokální server.
- Argumenty pro
-
triggerszděděné volitelné- Konfiguruje cron triggery pro spouštění Workeru podle plánu.
-
usage_modelzděděné volitelné- Určuje Model využití pro váš Worker. Existují dvě možnosti:
bundledaunbound. U nově vytvořených Workerů platí, že pokud není Usage Model uveden, nastaví se na výchozí Usage Model nastavený na účtu ↗. U existujících Workerů platí, že pokud není Usage Model uveden, nastaví se na Usage Model nakonfigurovaný pro daný Worker v dashboardu.
- Určuje Model využití pro váš Worker. Existují dvě možnosti:
-
buildnepovinné na nejvyšší úrovni- Konfiguruje vlastní krok sestavení, který Wrangler spustí při sestavování vašeho Workeru. Viz dokumentace k vlastním sestavením pro další podrobnosti.
vars
vars klíč definuje tabulku proměnné prostředí poskytnuté vašemu Worker skriptu. Všechny hodnoty jsou ve formátu prostého textu.
Použití:
{
"vars": {
"FOO": "some value",
"BAR": "some other string"
}
}[vars]
FOO = "some value"
BAR = "some other string"Klíče tabulky jsou ve vašem Workeru dostupné jako globální proměnné, které obsahují přiřazené hodnoty.
// Worker code:
console.log(FOO);
//=> "some value"
console.log(BAR);
//=> "some other string"Alternativně můžete definovat vars ve formátu vložené tabulky (inline table). Aby byla konfigurace TOML platná, nesmí tento styl obsahovat žádné nové řádky:
{
"vars": {
"FOO": "some value",
"BAR": "some other string"
}
}[vars]
FOO = "some value"
BAR = "some other string"kv_namespaces
kv_namespaces definuje seznam vazeb na KV namespace pro váš Worker.
Použití:
{
"kv_namespaces": [
{
"binding": "FOO",
"id": "0f2ac74b498b48028cb68387c421e279",
"preview_id": "6a1ddb03f3ec250963f0a1e46820076f"
},
{
"binding": "BAR",
"id": "068c101e168d03c65bddf4ba75150fb0",
"preview_id": "fb69528dbc7336525313f2e8c3b17db0"
}
]
}[[kv_namespaces]]
binding = "FOO"
id = "0f2ac74b498b48028cb68387c421e279"
preview_id = "6a1ddb03f3ec250963f0a1e46820076f"
[[kv_namespaces]]
binding = "BAR"
id = "068c101e168d03c65bddf4ba75150fb0"
preview_id = "fb69528dbc7336525313f2e8c3b17db0"Alternativně můžete definovat kv namespaces takto:
{
"kv_namespaces": [
{
"binding": "FOO",
"preview_id": "abc456",
"id": "abc123"
},
{
"binding": "BAR",
"preview_id": "xyz456",
"id": "xyz123"
}
]
}[[kv_namespaces]]
binding = "FOO"
preview_id = "abc456"
id = "abc123"
[[kv_namespaces]]
binding = "BAR"
preview_id = "xyz456"
id = "xyz123"Podobně jako proměnné prostředí a secrets, binding názvy jsou ve vašem Workeru dostupné jako globální proměnné.
// Worker script:
let value = await FOO.get("keyname");
//=> gets the value for "keyname" from
//=> the FOO variable, which points to
//=> the "0f2ac...e279" KV namespace-
bindingpovinné- Název globální proměnné, na kterou bude váš kód odkazovat. Bude poskytnuta jako Instance KV runtime.
-
idpovinné- ID KV namespace, který váš
bindingby měl představovat. Vyžadováno prowrangler publish.
- ID KV namespace, který váš
-
preview_idpovinné- ID KV namespace, který váš
bindingby měl představovat běhemwrangler devnebowrangler preview. Vyžadováno prowrangler devawrangler preview.
- ID KV namespace, který váš
web
A Workers Site vygenerovaný pomocí wrangler generate --site nebo wrangler init --site.
Použití:
{
"site": {
"bucket": "./public",
"entry-point": "workers-site"
}
}[site]
bucket = "./public"
entry-point = "workers-site"-
bucketpovinné- Adresář obsahující vaše statické soubory. Musí jít o cestu relativní k souboru Wrangler. Příklad:
bucket = "./public"
- Adresář obsahující vaše statické soubory. Musí jít o cestu relativní k souboru Wrangler. Příklad:
-
entry-pointvolitelné- Umístění vašeho skriptu Workeru. Výchozí umístění je
workers-site. Příklad:entry-point = "./workers-site"
- Umístění vašeho skriptu Workeru. Výchozí umístění je
-
includevolitelné- Exkluzivní seznam
.gitignore-styl vzorů, které odpovídají názvům souborů nebo adresářů z vašehobucketumístění. Nahrány budou pouze odpovídající položky. Příklad:include = ["upload_dir"]
- Exkluzivní seznam
-
excludevolitelné- Seznam
.gitignore-styl vzorů, které odpovídají souborům nebo adresářům ve vašembucketkteré by měly být vyloučeny z nahrávání. Příklad:exclude = ["ignore_dir"]
- Seznam
Můžete si také definovat svůj site pomocí alternativní syntaxe TOML ↗.
Limity úložiště
Pro výjimečně velké stránky nemusí být Workers Sites ideální volbou. Platí limit 25 MiB na stránku nebo soubor. Wrangler navíc pro vaše soubory vytvoří manifest prostředků, který se započítává do limitu velikosti vašeho skriptu. Pokud máte příliš mnoho souborů, Workers Sites možná nebudete moci použít.
Výhradní zahrnování souborů/adresářů
Pokud chcete zahrnout jen určitou sadu souborů nebo adresářů ve svém bucket, přidejte include pole do svého
[site] sekci vašeho souboru Wrangler:
{
"site": {
"bucket": "./public",
"entry-point": "workers-site",
"include": [ // must be an array.
"included_dir"
]
}
}[site]
bucket = "./public"
entry-point = "workers-site"
include = [ "included_dir" ]Wrangler nahraje pouze soubory nebo adresáře odpovídající vzorům v include pole.
Vylučování souborů/adresářů
Pokud chcete vyloučit soubory nebo adresáře ve svém bucket, přidejte exclude pole do svého [site] sekci vašeho souboru Wrangler:
{
"site": {
"bucket": "./public",
"entry-point": "workers-site",
"exclude": [ // must be an array.
"excluded_dir"
]
}
}[site]
bucket = "./public"
entry-point = "workers-site"
exclude = [ "excluded_dir" ]Wrangler bude ignorovat soubory nebo adresáře odpovídající vzorům v exclude pole při nahrávání assetů do Workers KV.
Include > Exclude
Pokud zadáte oba include a exclude pole, include pole se použije a exclude pole bude ignorováno.
Položky ignorované ve výchozím nastavení
Wrangler vždy ignoruje:
node_modules- Skryté soubory a adresáře
- Symlinky
Více o vzorech include/exclude
Viz dokumentace ke gitignore ↗ kde se dozvíte více o standardních vzorech shody.
Přizpůsobení sestavení Sites
Projekty Workers Sites standardně používají webpack. Můžete však vlastní konfigurace webpacku, mějte na paměti svůj entry a context nastavení.
Můžete také použít [build] sekci s Workers Sites, pokud váš build krok vyřeší závislosti v node_modules. Přečtěte si vlastní sestavení sekci pro další informace.
triggery
Sada cron triggerů, které Worker volají podle plánu.
Použití:
{
"triggers": {
"crons": [
"0 0 * JAN-JUN FRI",
"0 0 LW JUL-DEC *"
]
}
}[triggers]
crons = [ "0 0 * JAN-JUN FRI", "0 0 LW JUL-DEC *" ]cronsvolitelné- Sada cron výrazy ↗, kde každý výraz představuje samostatný plán spuštění Workeru.
dev
Argumenty pro wrangler dev lze nastavit zde, abyste je nemuseli opakovaně zadávat.
Použití:
{
"dev": {
"port": 9000,
"local_protocol": "https"
}
}[dev]
port = 9_000
local_protocol = "https"-
ipvolitelné- IP adresa pro lokální
wrangler devserver má naslouchat, výchozí hodnota je127.0.0.1.
- IP adresa pro lokální
-
portvolitelné- Port pro místní
wrangler devserver má naslouchat, výchozí hodnota je8787.
- Port pro místní
-
local_protocolvolitelné- Protokol, který místní
wrangler devserver naslouchá požadavkům; výchozí hodnota jehttp.
- Protokol, který místní
-
upstream_protocolvolitelné- Protokol, který
wrangler devpřeposílá požadavky, výchozí hodnota jehttps.
- Protokol, který
sestavení
Vlastní build command pro váš projekt. Existují dvě konfigurace podle formátu vašeho Workeru: service-worker a modules.
Service Workers
Tato sekce se týká přizpůsobení Workers pomocí service-worker formát. Tito Workers používají addEventListener a vypadají následovně:
addEventListener("fetch", (event) => {
event.respondWith(new Response("I'm a service Worker!"));
});Použití:
{
"build": {
"command": "npm install && npm run build",
"upload": {
"format": "service-worker"
}
}
}[build]
command = "npm install && npm run build"
[build.upload]
format = "service-worker"[build]
-
commandvolitelné- Příkaz použitý k sestavení vašeho Workeru. Na Linuxu a macOS se příkaz spouští v
shshell acmdshell pro Windows.&&a||lze použít operátory shellu.
- Příkaz použitý k sestavení vašeho Workeru. Na Linuxu a macOS se příkaz spouští v
-
cwdvolitelné- Pracovní adresář pro příkazy, výchozí hodnotou je kořenový adresář projektu.
-
watch_dirvolitelné- Adresář, který se má sledovat kvůli změnám při použití
wrangler dev, ve výchozím stavu odpovídásrcvzhledem ke kořenovému adresáři projektu.
- Adresář, který se má sledovat kvůli změnám při použití
[build.upload]
formatpovinné- Formát skriptu Workeru musí být
"service-worker".
- Formát skriptu Workeru musí být
Moduly
Workers nyní podporují syntaxi ES Modules. Tento formát umožňuje exportovat kolekci souborů nebo modulů, na rozdíl od formátu Service Worker, který vyžaduje nahrání jediného souboru.
Moduly Workers export své obslužné rutiny událostí namísto použití addEventListener volání.
Moduly dostávají všechny vazby (KV Namespaces, Environment Variables a Secrets) jako argumenty exportovaných handlerů. Ve formátu Service Worker jsou tyto vazby dostupné jako globální proměnné.
Nahraný modul může import další nahrané ES moduly. Pokud používáte formát CommonJS, můžete require další nahrané moduly CommonJS.
import html from "./index.html";
export default {
// * request is the same as `event.request` from the service worker format
// * waitUntil() and passThroughOnException() are accessible from `ctx` instead of `event` from the service worker format
// * env is where bindings like KV namespaces, Durable Object namespaces, Config variables, and Secrets
// are exposed, instead of them being placed in global scope.
async fetch(request, env, ctx) {
const headers = { "Content-Type": "text/html;charset=UTF-8" };
return new Response(html, { headers });
},
};Chcete-li vytvořit projekt Workers pomocí Wrangler a modulů, přidejte [build] sekce:
{
"build": {
"command": "npm install && npm run build",
"upload": {
"format": "modules",
"main": "./worker.mjs"
}
}
}[build]
command = "npm install && npm run build"
[build.upload]
format = "modules"
main = "./worker.mjs"[build]
-
commandvolitelné- Příkaz použitý k sestavení vašeho Workeru. V systémech Linux a macOS se příkaz spouští v
shshell acmdshell pro Windows.&&a||lze použít operátory shellu.
- Příkaz použitý k sestavení vašeho Workeru. V systémech Linux a macOS se příkaz spouští v
-
cwdvolitelné- Pracovní adresář pro příkazy, výchozí hodnotou je kořenový adresář projektu.
-
watch_dirvolitelné- Adresář, který se má sledovat kvůli změnám při použití
wrangler dev, ve výchozím stavu odpovídásrcvzhledem ke kořenovému adresáři projektu.
- Adresář, který se má sledovat kvůli změnám při použití
[build.upload]
-
formatpovinné- Formát skriptu Workers musí být
"modules".
- Formát skriptu Workers musí být
-
dirvolitelné- Adresář, ze kterého chcete nahrát moduly, výchozí hodnotou je
distvzhledem ke kořenovému adresáři projektu.
- Adresář, ze kterého chcete nahrát moduly, výchozí hodnotou je
-
mainpovinné- Relativní cesta k hlavnímu modulu od
dir, včetně./prefix. Hlavní modul musí být ES modul. U projektů s build skriptem se tím obvykle míní výstup vašeho JavaScript bundleru.
- Relativní cesta k hlavnímu modulu od
rulesvolitelné- Seřazený seznam pravidel, které určují, jaké moduly importovat a jako jaký typ.
Pravidla je potřeba zadat, pokud chcete používat moduly Text, Data a CompiledWasm, nebo pokud chcete
mít
.jssoubor bude považován zaESModulemístoCommonJS.
- Seřazený seznam pravidel, které určují, jaké moduly importovat a jako jaký typ.
Pravidla je potřeba zadat, pokud chcete používat moduly Text, Data a CompiledWasm, nebo pokud chcete
mít
Výchozí hodnoty:
{
// You do not need to include these default rules in your [Wrangler configuration file](/workers/wrangler/configuration/), they are implicit.
// The default rules are treated as the last two rules in the list.
"build": {
"upload": {
"format": "modules",
"main": "./worker.mjs",
"rules": [
{
"type": "ESModule",
"globs": [
"**/*.mjs"
]
},
{
"type": "CommonJS",
"globs": [
"**/*.js",
"**/*.cjs"
]
}
]
}
}
}[build.upload]
format = "modules"
main = "./worker.mjs"
[[build.upload.rules]]
type = "ESModule"
globs = [ "**/*.mjs" ]
[[build.upload.rules]]
type = "CommonJS"
globs = [ "**/*.js", "**/*.cjs" ]-
typepovinné- Typ modulu, přípustné možnosti najdete v tabulce níže:
-
globspovinné- ve stylu UNIX glob pravidla ↗ které se používají k určení typu modulu pro daný soubor v
dir. Globy se porovnávají s relativní cestou modulu odbuild.upload.dirbez./prefix. Pravidla se vyhodnocují v pořadí odshora dolů.
- ve stylu UNIX glob pravidla ↗ které se používají k určení typu modulu pro daný soubor v
-
fallthroughvolitelné- Pokud je tato možnost nastavena na true, umožní zohlednit další pravidla pro tento typ modulu. Pokud není zadána nebo je nastavena na false, další pravidla pro tento typ modulu budou ignorována.
Příklad
Pro ilustraci, jak se tyto úrovně používají, uvádíme soubor Wrangler s více prostředími:
{
"$schema": "./node_modules/wrangler/config-schema.json",
// top level configuration
"type": "javascript",
"name": "my-worker-dev",
"account_id": "12345678901234567890",
"zone_id": "09876543210987654321",
"route": "dev.example.com/*",
"usage_model": "unbound",
"kv_namespaces": [
{
"binding": "FOO",
"id": "b941aabb520e61dcaaeaa64b4d8f8358",
"preview_id": "03c8c8dd3b032b0528f6547d0e1a83f3"
},
{
"binding": "BAR",
"id": "90e6f6abd5b4f981c748c532844461ae",
"preview_id": "e5011a026c5032c09af62c55ecc3f438"
}
],
"build": {
"command": "webpack",
"upload": {
"format": "service-worker"
}
},
"site": {
"bucket": "./public",
"entry-point": "workers-site"
},
"dev": {
"ip": "0.0.0.0",
"port": 9000,
"local_protocol": "http",
"upstream_protocol": "https"
},
"env": {
// environment configuration
"staging": {
"name": "my-worker-staging",
"route": "staging.example.com/*",
"kv_namespaces": [
{
"binding": "FOO",
"id": "0f2ac74b498b48028cb68387c421e279"
},
{
"binding": "BAR",
"id": "068c101e168d03c65bddf4ba75150fb0"
}
]
},
// environment configuration
"production": {
"workers_dev": true,
"kv_namespaces": [
{
"binding": "FOO",
"id": "0d2ac74b498b48028cb68387c421e233"
},
{
"binding": "BAR",
"id": "0d8c101e168d03c65bddf4ba75150f33"
}
]
}
}
}"$schema" = "./node_modules/wrangler/config-schema.json"
type = "javascript"
name = "my-worker-dev"
account_id = "12345678901234567890"
zone_id = "09876543210987654321"
route = "dev.example.com/*"
usage_model = "unbound"
[[kv_namespaces]]
binding = "FOO"
id = "b941aabb520e61dcaaeaa64b4d8f8358"
preview_id = "03c8c8dd3b032b0528f6547d0e1a83f3"
[[kv_namespaces]]
binding = "BAR"
id = "90e6f6abd5b4f981c748c532844461ae"
preview_id = "e5011a026c5032c09af62c55ecc3f438"
[build]
command = "webpack"
[build.upload]
format = "service-worker"
[site]
bucket = "./public"
entry-point = "workers-site"
[dev]
ip = "0.0.0.0"
port = 9_000
local_protocol = "http"
upstream_protocol = "https"
[env.staging]
name = "my-worker-staging"
route = "staging.example.com/*"
[[env.staging.kv_namespaces]]
binding = "FOO"
id = "0f2ac74b498b48028cb68387c421e279"
[[env.staging.kv_namespaces]]
binding = "BAR"
id = "068c101e168d03c65bddf4ba75150fb0"
[env.production]
workers_dev = true
[[env.production.kv_namespaces]]
binding = "FOO"
id = "0d2ac74b498b48028cb68387c421e233"
[[env.production.kv_namespaces]]
binding = "BAR"
id = "0d8c101e168d03c65bddf4ba75150f33"