什么是 cloudflare KV preview_ids 以及如何获取?

Vek*_*ksi 4 cloudflare cloudflare-workers

我有一个追随者wrangler.toml。当我想使用devor preview(例如npx wrangler devor npx wrangler preview) wrangler 要求将 a 添加preview_id到 KV 命名空间时。这是现有 KV 命名空间的标识符吗?

我在https://github.com/cloudflare/wrangler/issues/1458 上看到Cloudflare Workers GH 中有一张票,它告诉我们应该澄清这一点,但该票已通过添加错误消息关闭

为了预览具有 KV 命名空间的 worker,您必须在配置文件中为要预览的每个 KV 命名空间指定一个 preview_id。”

这就是我在这里的原因。:)

至于更大的上下文,如果有人能澄清一下,我会很高兴:我看到如果我给出现有命名空间的值,我可以预览并看到__some-worker-dev-1234-workers_sites_assets_previewCloudflare 中生成了一个 KV 命名空间类型。这与 中使用的标识符所指向的 KV 命名空间具有不同的标识符,preview_id并且我所使用的标识符所指向的 KV 命名空间preview_id为空。为什么给出现有 KV 命名空间的标识符会删除错误消息、部署资产并允许预览,但实际的 KV 命名空间为空并创建了一个新的命名空间?

kv-asset-handler如何知道查看这个生成的命名空间以检索资产?

我目前正在使用默认生成的 Cloudare Worker 对我的站点进行测试,我想知道我是否误解了某些内容,或者是否有一些机制在预览/发布站点命名空间到 scipt 期间捆绑在一起。

如果有一些带有自动映射的随机机制,那么这是否可以让每个开发人员都可以拥有自己的私有预览 KV 命名空间?

type = "javascript"
name = "some-worker-dev-1234"
account_id = "<id>"
workers_dev = true

kv_namespaces = [
  { binding = "site_data", id = "<test-site-id>" }
]

[site]
# The location for the site.
bucket = "./dist"

# The entry directory for the package.json that contains 
# main field for the file name of the compiled worker file in "main" field.
entry-point = ""

[env.production]
name = "some-worker-1234"
zone_id = "<zone-id>"
routes = [
  "http://<site>/*",
  "https://www.<site>/*"
]

# kv_namespaces = [
#  { binding = "site_data", id = "<production-site-id>" }
# ]

Run Code Online (Sandbox Code Playgroud)
type = "javascript"
name = "some-worker-dev-1234"
account_id = "<id>"
workers_dev = true

kv_namespaces = [
  { binding = "site_data", id = "<test-site-id>" }
]

[site]
# The location for the site.
bucket = "./dist"

# The entry directory for the package.json that contains 
# main field for the file name of the compiled worker file in "main" field.
entry-point = ""

[env.production]
name = "some-worker-1234"
zone_id = "<zone-id>"
routes = [
  "http://<site>/*",
  "https://www.<site>/*"
]

# kv_namespaces = [
#  { binding = "site_data", id = "<production-site-id>" }
# ]

Run Code Online (Sandbox Code Playgroud)

Mat*_*ols 7

如果格式不明显(对我来说不是),这里是文档中的示例配置块,其中为几个 KV 命名空间指定了 preview_id:

kv_namespaces = [  
  { binding = "FOO", id = "0f2ac74b498b48028cb68387c421e279", preview_id = "6a1ddb03f3ec250963f0a1e46820076f" },
  { binding = "BAR", id = "068c101e168d03c65bddf4ba75150fb0", preview_id = "fb69528dbc7336525313f2e8c3b17db0" }
]
Run Code Online (Sandbox Code Playgroud)

您可以在仪表板的 Workers KV 部分或使用 Wrangler CLI 生成新的命名空间 ID: wrangler kv:namespace create "SOME_NAMESPACE" --preview

  • 好点。我认为文档并没有明确说明“开发”模式和“预览”模式之间的区别以及它与 KV 命名空间的关系。这就是导致我最初对那些似乎具有不相关 ID 的示例片段感到困惑的原因。我认为文档应该更清晰,并且还要注意,在使用 Rollup (=JavaScript) 等情况下,需要在 `package.json` 中包含 `main`。 (3认同)

小智 4

此答案适用于 Wrangler >= 1.10.0 的版本

wrangler 要求将 Preview_id 添加到 KV 命名空间。这是现有 KV 命名空间的标识符吗?

是的!预览命名空间有不同标识符的原因是,在开发时,wrangler devwrangler preview不会意外地使用可能有错误或不兼容的代码对现有生产数据进行更改。您可以--preview向大多数wrangler kv命令添加标志以与预览命名空间交互。


对于您这里的情况,实际上发生了一些事情。

  1. 您正在使用工人网站
  2. 您有一个 KV 命名空间定义在wrangler.toml

Workers Sites 将自动为您运行的每个环境配置生产命名空间wrangler publish,并为您运行的每个环境配置预览命名wrangler dev空间wrangler preview。如果您只需要工作人员站点,则根本不需要kv-namepsaces在清单中指定表。该表用于您可能想要从中读取数据或向其写入数据的其他KV 命名空间。如果这就是您所需要的,则需要配置自己的命名空间,并添加idwrangler.toml(如果您想使用wrangler publish, )和(如果您想使用或preview_id)(应该不同)。wrangler devwrangler preview