环境变量
本文档介绍处理环境变量的最佳实践方案,该方案在本地开发和部署到 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
文件。有关加载顺序 (opens in a new tab)的详细说明,请参阅 Next.js 官方文档。
您应该使用 NEXTJS_ENV
环境变量来选择在本地 Worker 上运行应用时使用的环境,以下是选择"development"环境的方式:
# .dev.vars
NEXTJS_ENV=development
当未显式设置 NEXTJS_ENV
时,默认使用 "production" 环境。
生产环境
.env
和 .dev.vars
是本地文件,不应添加到源代码控制中。你应该使用 Cloudflare 仪表板来设置生产环境的环境变量。
Workers 构建
当你使用 Workers 构建 (opens in a new tab)部署应用时,必须在"构建变量和密钥" (opens in a new tab)中设置环境变量。
通过设置"构建变量和密钥",Workers 构建执行的 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