You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wrangler dev运行Worker时提示sonarkv未定义的问题排查

问题

我已查阅所有相关文档及Stack Overflow帖子,但使用wrangler dev本地运行Cloudflare Worker时仍提示**"sonarkv is not defined"**。已执行的操作如下:

  • 创建预览命名空间:
    $ wrangler kv:namespace create "sonarkv" --preview
    
  • 添加配置至wrangler.toml:
    kv_namespaces = [
        { binding = "sonarkv", id = "5138eb663ac04eb6af5fe72d11966626", preview_id = "67e98d40e1e74329bf2c30dd92289fce" }
    ]
    
  • 验证命名空间:
    执行$ wrangler kv:key list --binding sonarkv --preview返回包含somekey的列表,$ wrangler kv:key get somekey --binding sonarkv --preview返回正确值。
  • 在Worker脚本中引用:
    const secret = await sonarkv.get("somekey");
    
  • 当前Wrangler版本为3.9.0。

疑问:是否遗漏了操作步骤?是否需要在控制台单独绑定预览命名空间?尝试绑定提示**"A variable with that name already exists"**。

解决方法
  • 检查Worker脚本语法模式
    如果你的Worker使用ES模块语法,必须通过env参数访问KV绑定,不能直接调用全局变量:

    export default {
      async fetch(request, env) {
        const secret = await env.sonarkv.get("somekey");
        // 后续业务逻辑
      }
    };
    

    只有旧版Service Worker语法才支持直接使用全局绑定变量。

  • 重启本地开发进程
    修改wrangler.toml后,必须重启wrangler dev服务,否则新的绑定配置不会生效。

  • 确认配置文件位置
    确保wrangler.toml放在Worker项目的根目录,避免被子目录的配置文件覆盖,Wrangler只会加载根目录的配置。

  • 核对命名空间ID
    再次检查wrangler.toml中的id和preview_id,确保和创建命名空间时返回的ID完全一致,无拼写错误。

  • 无需重复绑定
    控制台提示变量已存在,说明绑定已生效,不需要再手动在控制台操作,绑定是通过wrangler.toml同步到云端的。

内容的提问来源于stack exchange,提问作者John Scalo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:23:24