[ PROMPT_NODE_24090 ]
Durable Objects 配置说明
[ SKILL_DOCUMENTATION ]
# Durable Objects 配置
## 基础设置
c
{
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2025-01-01", // 使用最新日期;≥2024-04-03 以支持 RPC
"durable_objects": {
"bindings": [
{
"name": "MY_DO", // 环境绑定名称
"class_name": "MyDO" // 此 worker 导出的类
},
{
"name": "EXTERNAL", // 从另一个 worker 访问 DO
"class_name": "ExternalDO",
"script_name": "other-worker"
}
]
},
"migrations": [
{ "tag": "v1", "new_sqlite_classes": ["MyDO"] } // 推荐使用 SQLite
]
}
## 绑定选项
c
{
"name": "BINDING_NAME",
"class_name": "ClassName",
"script_name": "other-worker", // 可选:外部 DO
"environment": "production" // 可选:按环境隔离
}
## 管辖区(数据本地化)
在创建 ID 时指定管辖区以符合数据驻留合规性:
typescript
// EU 数据驻留
const id = env.MY_DO.idFromName("user:123", { jurisdiction: "eu" })
// 可用管辖区
const jurisdictions = ["eu", "fedramp"] // 可能会添加更多
// 此 DO 上的所有操作都保持在管辖区内
const stub = env.MY_DO.get(id)
await stub.someMethod() // 数据保留在 EU
**关键点:**
- 在 ID 创建时设置,之后不可更改
- DO 实例物理位于管辖区内
- 存储和计算保证在边界内
- 用于 GDPR、FedRAMP 及其他合规性要求
- 不支持跨管辖区访问(如果 DO 在不同管辖区,请求将失败)
## 迁移
c
{
"migrations": [
{ "tag": "v1", "new_sqlite_classes": ["MyDO"] }, // 创建 SQLite(推荐)
// { "tag": "v1", "new_classes": ["MyDO"] }, // 创建 KV(仅限付费)
{ "tag": "v2", "renamed_classes": [{ "from": "Old", "to": "New" }] },
{ "tag": "v3", "transferred_classes": [{ "from": "Src", "from_script": "old", "to": "Dest" }] },
{ "tag": "v4", "deleted_classes": ["Obsolete"] } // 销毁所有数据!
]
}
**迁移规则:**
- 标签必须唯一且按顺序排列 (v1, v2, v3...)
- 不支持回滚(请先使用 `--dry-run` 测试)
- 部署时自动应用
- 推荐使用 `new_sqlite_classes` 而非 `new_classes` (SQLite vs KV)
- `deleted_classes` 会立即销毁所有数据(不可逆)
## 环境隔离
按环境分离 DO 命名空间(暂存/生产环境具有不同的对象