wrangler 的环境为什么不继承绑定?
我在配置里让 staging 环境漏写了 kv_namespaces,wrangler dev --env staging 照常启动,没有任何报错。直到请求跑到 env.CACHE.put,才抛出 Cannot read properties of undefined。
环境里的绑定类字段不可继承,每个环境必须自己写全;漏写的绑定不会在启动时失败,而是在运行时变成 undefined。
这是官方文档定下的规则:环境不是「在顶层上打补丁」,而是各自声明。下面讲哪些字段继承、哪些不继承,怎么提前发现漏写,以及 deploy 时的一个默认行为。
env 到底怎么定义和选择?
env.<name> 给同一份代码定义多套配置,用 --env staging(或 CLOUDFLARE_ENV)选择。每个环境部署成一个独立的 Worker,名字是 <name>-<env>,比如 demo-staging。这是官方文档的说法,我没有部署验证。
{
"name": "demo",
"main": "src/index.ts",
"compatibility_date": "2026-10-01",
"kv_namespaces": [{ "binding": "CACHE", "id": "<PROD_KV_ID>" }],
"env": {
"staging": {
"vars": { "MODE": "staging" },
"kv_namespaces": [{ "binding": "CACHE", "id": "<STAGING_KV_ID>" }]
}
}
}哪些字段会继承,哪些不会?
name、main、compatibility_date、routes、assets 等是可继承的;vars、kv_namespaces、d1_databases、durable_objects、services、queues 等绑定类字段是不可继承的,每个环境必须自己写全。
我在本地验证的就是这条的后果:上面的配置如果 staging 里不写 kv_namespaces,启动没有问题,访问绑定时才失败。
怎么提前发现漏写的绑定?
用 wrangler types:漏写的绑定在生成的类型里是可选属性,一旦写 env.CACHE.put 类型检查就会提醒你。配合 wrangler dev 启动时的绑定清单,也能提前看出缺了什么。类型生成的细节见 Workers 的绑定是什么。
直接 wrangler deploy 会部署到哪个环境?
定义了多个环境时,直接 wrangler deploy 会部署顶层环境,wrangler 会警告未指定目标环境,建议显式传 --env,顶层环境用 --env=""。这条警告我用 --dry-run 在本地看到过。
生产环境不要依赖「不带参数 = 生产」的默认,在 CI 里写死。部署之后版本怎么流转,见 部署、版本与回滚。
临时环境该用 env 吗?
官方文档的建议是:env 适合同一份代码、少数几个长期存在的目的地,比如 dev、staging、prod;每个分支一套的临时环境不适合,应当用 Previews。我没有试过 Previews。
本地跑某个环境时变量文件怎么选,见 wrangler dev 本地和线上差在哪。
漏写kv_namespaces后启动正常、访问时报Cannot read properties of undefined、wrangler types中漏写绑定为可选属性、--dry-run下未指定环境的警告,我在 wrangler 4.151.3(workerd 2026-10-19)的本地环境里跑过;可继承与不可继承字段的划分、<name>-<env>的命名、CLOUDFLARE_ENV、Previews 的建议,来自 2026-10 的官方文档,我没有复现,行为会变化,以官方文档为准。本文没有执行任何会改动线上资源的命令。参考:Wrangler 环境。