跳转到内容
搜索文档

更新日志

Cloudflare 的最新更新与改进。

Back to all posts

使用 `exports` 声明 Durable Object 类生命周期

Wrangler 配置文件中全新的声明式 exports 字段取代了用于管理 Durable Object 类生命周期的命令式 migrations 数组。您无需再编写带有唯一标签的有序迁移步骤列表,而是声明 Worker 导出的每个 Durable Object 类,Cloudflare 会将其与已部署的内容进行对比,以确定需要创建、重命名还是删除哪些 Durable Object 状态。

在使用旧版迁移时,将 ChatRoom 重命名为 Room 需要保留这两个标记的步骤:

Before — legacy migrationsjsonc
{
	"migrations": [
		{ "tag": "v1", "new_sqlite_classes": ["ChatRoom"] },
		{
			"tag": "v2",
			"renamed_classes": [{ "from": "ChatRoom", "to": "Room" }],
		},
	],
}

而使用 exports,您只需将 Room 声明为当前类,并将 ChatRoom 标记为已重命名:

After — declarative exportsjsonc
{
	"exports": {
		"ChatRoom": {
			"type": "durable-object",
			"state": "renamed",
			"renamed_to": "Room",
		},
		"Room": { "type": "durable-object", "storage": "sqlite" },
	},
}

每个条目都以类名作为键。state 字段承载生命周期(默认为 created——活动类——以及墓碑(tombstone)状态 deletedrenamedtransferred,和用于跨 Worker 传输的接收状态 expecting-transfer)。

与旧版 migrations 数组相比的关键改进:

  • 无需迁移标签。 当前的 exports 映射是唯一的真实数据源——无需维护 v1v2v3 条目的历史链。
  • 结构化的部署输出。 Wrangler 会在创建、更新、删除、重命名或传输 Durable Object 类时进行报告。它还会识别可安全删除的陈旧配置条目。没有更改或通知的部署不会打印此输出。
  • 零停机重命名和传输模式是一等公民。 墓碑(Tombstones)可以与代码中仍然存在的源类共存,从而实现 三次部署重命名四次部署跨 Worker 传输,在滚动部署期间不会出现运行时错误。
  • 跨 Worker 安全性。 当您删除或重命名类时,Cloudflare 会列出您账户中其绑定(binding)仍引用该命名空间的其他所有 Worker,以便您在更改生效前重新部署它们。

使用旧版 migrations 数组的现有 Workers 仍可照常工作,无需任何更改。要过渡到 exports,请参阅迁移指南。在单个 Worker 中,exportsmigrations 是互斥的。

欲了解完整的参考信息,请参阅 Durable Object 类导出