[ PROMPT_NODE_24434 ]
Workerd 配置说明
[ SKILL_DOCUMENTATION ]
# Workerd 配置
## 基本结构
capnp
using Workerd = import "/workerd/workerd.capnp";
const config :Workerd.Config = (
services = [(name = "main", worker = .mainWorker)],
sockets = [(name = "http", address = "*:8080", http = (), service = "main")]
);
const mainWorker :Workerd.Worker = (
modules = [(name = "index.js", esModule = embed "src/index.js")],
compatibilityDate = "2024-01-15",
bindings = [...]
);
## 服务 (Services)
**Worker**: 运行 JS/Wasm 代码
capnp
(name = "api", worker = (
modules = [(name = "index.js", esModule = embed "index.js")],
compatibilityDate = "2024-01-15",
bindings = [...]
))
**Network**: 互联网访问
capnp
(name = "internet", network = (allow = ["public"], tlsOptions = (trustBrowserCas = true)))
**External**: 反向代理
capnp
(name = "backend", external = (address = "api.com:443", http = (style = tls)))
**Disk**: 静态文件
capnp
(name = "assets", disk = (path = "/var/www", writable = false))
## 套接字 (Sockets)
capnp
(name = "http", address = "*:8080", http = (), service = "main")
(name = "https", address = "*:443", https = (options = (), tlsOptions = (keypair = (...))), service = "main")
(name = "app", address = "unix:/tmp/app.sock", http = (), service = "main")
## Worker 格式
capnp
# ES Modules (推荐)
modules = [(name = "index.js", esModule = embed "src/index.js"), (name = "wasm.wasm", wasm = embed "build/module.wasm")]
# Service Worker (旧版)
serviceWorkerScript = embed "worker.js"
# CommonJS
(name = "legacy.js", commonJsModule = embed "legacy.js", namedExports = ["foo"])
## 绑定 (Bindings)
绑定将资源暴露给 Worker。ES 模块使用 `env.BINDING`,Service Worker 使用全局变量。
### 原始类型
capnp
(name = "API_KEY", text = "secret") # 字符串
(name = "CONFIG", json = '{"key":"val"}') # 解析后的 JSON
(name = "DATA", data = embed "data.bin") # ArrayBuffer
(name = "DATABASE_URL", fromEnvironment = "DB_URL") # 系统环境变量
### 服务绑定
capnp
(name = "AUTH", service = "auth-worker") # 基础绑定
(name = "API", service = (
name = "backend",
entrypoint = "adminApi", # 命名导出
props = (json = '{"role":"admin"}') # ctx.props
))
### 存储
capnp
(name = "CACHE", kvNamespace = "kv-service") # KV 存储
(name = "STORAGE", r2Bucket = "r2-service") # R2 存储
(name = "ROOMS", durableObjectNamespace = (
s