跳转到内容
搜索文档

环境变量

最后更新 查看 MarkdownAgent 设置

背景

您可以添加环境变量(一种绑定类型),将文本字符串或 JSON 值附加到 Worker。环境变量可在传递给 Worker fetch 事件处理程序env 参数 上使用。

文本字符串和 JSON 值未加密,适用于存储应用程序配置。

通过 Wrangler 添加环境变量

要使用 Wrangler 添加环境变量,请在 Wrangler 文件的 [vars] 配置中定义文本和 JSON。在以下示例中,API_HOSTAPI_ACCOUNT_ID 是文本值,SERVICE_X_DATA 是 JSON 值。

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker-dev",
	"vars": {
		"API_HOST": "example.com",
		"API_ACCOUNT_ID": "example_user",
		"SERVICE_X_DATA": {
			"URL": "service-x-api.dev.example",
			"MY_ID": 123
		}
	}
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker-dev"

[vars]
API_HOST = "example.com"
API_ACCOUNT_ID = "example_user"

  [vars.SERVICE_X_DATA]
  URL = "service-x-api.dev.example"
  MY_ID = 123

请参考以下示例,了解如何在 Worker 代码中访问 API_HOST 环境变量:

export default {
	async fetch(request, env, ctx) {
		return new Response(`API host: ${env.API_HOST}`);
	},
};
export interface Env {
	API_HOST: string;
}

export default {
	async fetch(request, env, ctx): Promise<Response> {
		return new Response(`API host: ${env.API_HOST}`);
	},
} satisfies ExportedHandler<Env>;
from workers import WorkerEntrypoint, Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        # Environment variables are accessed via attribute access on self.env
        return Response(f"API host: {self.env.API_HOST}")

导入 env 以实现全局访问

您还可以从 cloudflare:workers 导入 env,以便在代码的任何位置(包括请求处理程序之外)访问环境变量:

import { env } from "cloudflare:workers";

// Access environment variables at the top level
const apiHost = env.API_HOST;

export default {
	async fetch(request) {
		return new Response(`API host: ${apiHost}`);
	},
};
import { env } from "cloudflare:workers";

// Access environment variables at the top level
const apiHost = env.API_HOST;

export default {
	async fetch(request: Request): Promise<Response> {
		return new Response(`API host: ${apiHost}`);
	},
};

当您需要以下功能时,此方法很有用:

  • 在 Worker 顶层初始化配置或 API 客户端。
  • 从深层嵌套函数访问环境变量,而无需在每个函数调用中传递 env

有关更多详细信息,请参阅env 作为全局变量导入

在 Wrangler 中配置不同环境

Wrangler 中的环境 允许您为同一 Worker 指定不同配置,包括每个环境中 vars 的不同值。 由于 vars不可继承的键,环境不会继承它们,必须为每个环境单独指定。

以下示例设置两个环境 stagingproduction,并为 API_HOST 设置不同的值。

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker-dev",
	// top level environment
	"vars": {
		"API_HOST": "api.example.com"
	},
	"env": {
		"staging": {
			"vars": {
				"API_HOST": "staging.example.com"
			}
		},
		"production": {
			"vars": {
				"API_HOST": "production.example.com"
			}
		}
	}
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker-dev"

[vars]
API_HOST = "api.example.com"

[env.staging.vars]
API_HOST = "staging.example.com"

[env.production.vars]
API_HOST = "production.example.com"

要在特定环境中运行 Wrangler 命令,可以传递 --env-e 标志。例如,您可以通过运行 npx wrangler dev --env staging 在名为 staging 的环境中开发 Worker,并使用 npx wrangler deploy --env staging 部署。

了解 Wrangler 中的环境

通过仪表板添加环境变量

要通过仪表板添加环境变量:

  1. 在 Cloudflare 仪表板中,前往 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. Overview(概览) 中,选择您的 Worker。

  3. 选择 Settings(设置)

  4. Variables and Secrets(变量和密钥) 下,选择 Add(添加)

  5. 选择 Type(类型),输入 Variable name(变量名称),并输入 Value(值)。此变量将对 Worker 可用。

  6. (可选)要添加多个环境变量,选择 Add variable(添加变量)

  7. 选择 Deploy(部署) 以应用更改。

比较 secrets 和环境变量

Secrets环境变量。区别在于 secret 值在你定义后不会在 Wrangler 或 Cloudflare 仪表板中可见。这意味着敏感数据(包括密码或 API 令牌)应始终加密以防止数据泄露。对你的 Worker 而言,环境变量和 secret 没有区别。secret 的值会按定义传递。

使用 secrets 进行本地开发

将本地开发使用的 secrets 放在 .dev.vars 文件或 .env 文件中,与 Wrangler 配置文件位于同一目录。

这些文件应使用 dotenv 语法格式化。例如:

.dev.vars / .envbash
SECRET_KEY="value"
API_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"

要为每个 Cloudflare 环境设置不同的 secrets,请创建名为 .dev.vars.<environment-name>.env.<environment-name> 的文件。

在本地开发中选择 Cloudflare 环境时,会先加载对应的环境特定文件,再加载通用的 .dev.vars(或 .env)文件。

  • 使用 .dev.vars.<environment-name> 文件时,每个环境必须定义所有 secrets。如果存在 .dev.vars.<environment-name>,则只会加载该文件;不会加载 .dev.vars 文件。
  • 相比之下,所有匹配的 .env 文件都会被加载,值会被合并。对于每个变量,使用最特定文件中的值,优先级如下:
    • .env.<environment-name>.local(最特定)
    • .env.local
    • .env.<environment-name>
    • .env(最不特定)

环境变量与 Node.js 兼容性

启用 nodejs_compatnodejs_compat_populate_process_env 兼容性标志(对于 2025-04-01 或更晚的兼容日期默认启用)后,环境变量可通过全局 process.env 使用。

process.env 将在 worker 中首次访问 process 时延迟填充。

文本变量值直接暴露。

计算结果为字符串值的 JSON 变量值以解析后的值暴露。

不计算为字符串值的 JSON 变量值以原始 JSON 字符串暴露。

例如,假设 Worker 有三个环境变量,两个文本值和一个 JSON 值:

[vars]
FOO =  "abc"
BAR =  "abc"
BAZ = { "a": 123 }

环境变量可以使用 wrangler.{json|jsonc|toml} 文件或通过 Cloudflare 仪表板 UI 添加。

process.env.FOOprocess.env.BAR 的值均为 JavaScript 字符串 "abc"

process.env.BAZ 的值为 JSON 编码字符串 "{ \"a\": 123 }"

:::note 另请注意,由于 secrets 是运行时中环境变量的一种形式,secrets 也会通过 process.env 暴露。

相关资源

这篇文档对您有帮助吗?