环境变量
本条目描述了处理环境变量最合理的方式,这种方式既适用于本地开发,也适用于应用程序部署到 Cloudflare Workers 之后。
在 Cloudflare 平台上,您的环境变量可以存储在 "环境变量" (opens in a new tab) 或 "密钥" (opens in a new tab) 中。区别在于,密钥在创建后无法从仪表板或 CLI 中读回。
本地开发
虽然在 Cloudflare 平台上有多种方式为本地开发设置环境变量(将它们添加到 wrangler 配置 (opens in a new tab) 或 .dev.vars (opens in a new tab) 文件中),但这与推荐的开发工作流不太兼容,因为在使用 next dev 时它们将不可用。
您应该做的是使用 Next.js 的 .env 文件 (opens in a new tab)。这样做后,无论是在运行 next dev 时,还是在使用 wrangler dev 在 Worker 上本地运行应用程序时,环境变量都将在 process.env 上可用。
Next.js .env 文件是特定于环境的。也就是说,当您使用 "development" 环境时,.env.development 的优先级将高于 .env 文件。请参阅 Next.js 网站以获取有关 加载顺序 (opens in a new tab) 的详细解释。
您应该使用 NEXTJS_ENV 环境变量来选择在 worker 上本地运行应用程序时使用的环境,以下是选择 "development" 环境的方法:
# .dev.vars
NEXTJS_ENV=development当未显式设置 NEXTJS_ENV 时,默认使用 "production" 环境。
生产环境
.env 和 .dev.vars 是本地文件,不应添加到版本控制中。您应该使用 Cloudflare 仪表板来设置生产环境的变量。
Workers 构建
当您使用 Workers Builds (opens in a new tab) 部署应用程序时,必须在 "构建变量和密钥" (opens in a new tab) 中设置环境变量。
通过设置“构建变量和密钥”,由 Workers Builds 执行的 Next 构建将能够访问环境变量。它需要该访问权限来内联 NEXT_PUBLIC_... 变量 (opens in a new tab) 并访问 SSG 页面所需的非 NEXT_PUBLIC_... 变量。
运行时变量
您的 Next 应用程序需要在运行时访问环境变量。您应该始终 在 Cloudflare 仪表板中 (opens in a new tab) 设置运行时环境变量。
如果您从仪表板设置环境变量,您可以使用 wrangler 的 --keep-vars (opens in a new tab) 选项来防止它们被部署删除,即 opennextjs-cloudflare deploy -- --keep-vars