检测我们是否在 CloudFlare Worker 中以开发模式或生产模式运行

问题描述 投票:0回答:3

我需要知道我的工作脚本是否在本地使用

wrangler dev
运行 或者它在
wrangelr publish
之后在 cloudflare 运行。

是否有环境变量告诉我这一点,或者请求标头?

代码片段将受到高度赞赏。 谢谢你。

cloudflare cloudflare-workers
3个回答
2
投票

没有内置变量,但您可以通过在 wrangler.toml 中定义 环境来自行填充此类信息

例如,如果我们说最上面的

[vars]
用于生产,我们可以声明另一个用于
local
环境的变量集。 (环境名称无关)

type = "webpack"
webpack_config = "webpack.config.js"

# these will be used in production
vars = { WORKER_ENV = "production", SENTRY_ENABLED = true }

[env.local]
# these will be used only when --env=local
vars = { WORKER_ENV = "local", SENTRY_ENABLED = false }

从那时起,如果您使用本地运行您的工作人员

wrangler dev --env=local

绑定值

WORKER_ENV
将按照
[env.local.vars]
下的定义进行填充。

顺便说一句,上面

wrangler.toml
的语法相当于

type = "webpack"
webpack_config = "webpack.config.js"

[vars]
  WORKER_ENV = "production"
  SENTRY_ENABLED = true

[env]

  [env.local]

    [env.local.vars]
      WORKER_ENV = "local"
      SENTRY_ENABLED = false

我相信这样更容易理解


1
投票

我相信现在有官方更新(截至 2022 年 11 月):

本地开发时,可以在目录下创建.dev.vars文件 项目根目录允许您定义将使用的变量 运行 Wrangler dev 或 Wrangler Pages dev 时,而不是使用 另一个环境和 [vars] 在 wrangler.toml 中。

Cloudflare Workers 文档


0
投票

这就是我正在使用的方式:

在项目根目录中创建一个文件

.dev.var
并定义一个变量来检测环境。在下面的例子中,我使用的是
IS_LOCAL_MODE

IS_LOCAL_MODE=true

现在将此变量放入 Cloudflare 以在生产环境中使用它

wrangler secret put IS_LOCAL_MODE

然后填写值为

false

就是这样。现在在您的代码中,为了检查模式,我们将执行类似的操作

if(env.IS_LOCAL_MODE){
    console.log("Hello admin, you are in dev mode")
}else{
    console.log("Silence is gold!")
}

编码快乐!

© www.soinside.com 2019 - 2024. All rights reserved.