添加DurableObject2后Cloudflare Worker部署报错[10061]求助
以下是针对该错误的具体排查方向:
严格匹配绑定名称与类名的大小写
Cloudflare对Durable Object的类名与绑定配置的匹配是大小写敏感的。检查wrangler.staging.toml中[[durable_objects.bindings]]下的class_name字段,必须与代码中导出的类名完全一致(包括大小写),比如代码里是export class DurableObject2,配置里就不能写成class_name = "durableobject2"或Durableobject2。验证wrangler版本与配置格式兼容性
旧版Worker对应的wrangler版本(比如wrangler 1.x)与新版(2.x+)的Durable Object配置格式存在差异。确认你的wrangler.staging.toml配置格式符合当前wrangler版本要求:- wrangler 1.x用
[durables]区块配置,绑定格式为binding_name = "ClassName" - wrangler 2.x+用
[[durable_objects.bindings]]数组,每个绑定包含name(绑定名)和class_name(类名)
如果版本不匹配,哪怕配置看着正确,Cloudflare也无法识别新的DO类。
- wrangler 1.x用
确认部署时使用的是正确的编译产物
检查wrangler.staging.toml中的main字段,确认指向的是编译后的dist/index.js而非未编译的src/index.ts。如果配置成直接上传TS文件,Cloudflare服务器无法解析TS的导出语法,会导致类无法被识别。另外,重新执行打包命令(比如npm run build),确保编译产物是最新的,没有缓存旧代码。检查DurableObject2的类定义规范
确认DurableObject2类正确继承了Cloudflare的DurableObject基类,且构造函数参数符合要求:export class DurableObject2 extends DurableObject { constructor(state: DurableObjectState, env: Env) { super(state, env); // 其他初始化逻辑 } // 必须实现fetch方法或其他处理请求的方法 async fetch(request: Request) { // 处理请求逻辑 } }如果类没有继承基类、构造函数未调用
super,或者没有实现请求处理方法,Cloudflare会无法将其识别为合法的Durable Object类,即使代码导出了也会报错。检查迁移规则的配置正确性
确认wrangler.staging.toml中的[[migrations]]配置里,new_classes数组包含了DurableObject2:[[migrations]] tag = "v2" # 版本标签需更新 new_classes = ["DurableObject", "DurableObject2"]如果迁移规则中未包含新的DO类,部署时Cloudflare会拒绝识别该类的绑定。
清理wrangler缓存后重新部署
执行wrangler cache clear命令清理本地缓存,再重新运行部署命令。有时候wrangler会缓存旧的代码或配置,导致部署时并未上传最新的DO类定义。
内容的提问来源于stack exchange,提问作者allevo

