Cloudflare Workers 本機秘密怎麼放:.dev.vars、.env 與 secrets.required 的選擇
把 API token 放進 wrangler.toml,本機看似方便,卻會讓秘密值跟著設定檔進入版本控制風險。Cloudflare Workers 的本機秘密應放在專案根目錄、與 Wrangler 設定檔同層的 .dev.vars 或 .env;這兩種載入路徑要先選一種,而不是同時堆疊。
直接結論是:**要明確把本機值當成秘密管理時用 .dev.vars;既有工具鏈已使用 dotenv 時用 .env;兩者不可混用。**部署環境的秘密仍要用 Cloudflare 的 secret 機制管理。
先分清楚 vars 與 secret
vars 適合不敏感的文字或 JSON 設定,例如功能開關。Cloudflare 文件明確提醒不要在 Wrangler 設定檔的 vars 放敏感資料。API key、OAuth client secret 這類值,本機放入未追蹤的 .dev.vars,正式環境再用 wrangler secret put 或 Dashboard 設定。
# .dev.vars(加入 .gitignore)API_BASE_URL="http://localhost:8787"UPSTREAM_API_TOKEN="replace-with-local-token"Worker 端仍從 env 讀取,不需要為本機另寫一條程式路徑:
export default { async fetch(_request: Request, env: Env) { return Response.json({ endpoint: env.API_BASE_URL }); },};.dev.vars 與 .env 為什麼不能一起放
Wrangler 偵測到 .dev.vars 時,不會再把 .env 的值載入 Worker env。這不是覆寫順序,而是兩套來源的選擇;同時維護很容易讓人以為某個值有載到、實際卻仍是 undefined。
若選 .env,可用 .env.local、.env.<environment-name> 與 .env 分層,較具體的檔案優先。若改用 .dev.vars.staging,以 --env staging 啟動時只會使用該環境檔,不會再與預設 .dev.vars 合併。
# 用 staging 對應的本機設定啟動pnpm wrangler dev --env staging用 secrets.required 把漏設變成警告
若專案只有少數必要秘密,可在 Wrangler 設定宣告名稱。如此本機只載入列出的 key,缺少值時會出現警告,也不會意外把資料夾裡多餘的 dotenv 值交給 Worker。
{ "secrets": { "required": ["UPSTREAM_API_TOKEN"] }}這個設定只是在本機建立輸入邊界,不能取代 .gitignore 或正式環境的 secret 管理。提交前用 git status --ignored 確認 .dev.vars 沒有被納入追蹤;部署前則檢查正式 secret 是否已建立。
最小驗證順序
- 選擇
.dev.vars或.env其中一種,並加入.gitignore。 - 用
pnpm wrangler dev啟動,讓缺失的必要秘密先在本機被看見。 - 以不同環境測試時,明確傳入
--env,不要靠終端機殘留的環境變數猜測。 - 正式部署將秘密改用
wrangler secret put;不要把值搬進vars。
若還要連接遠端 binding,先看 Cloudflare Workers compatibility_date 升級檢查;它是相容性設定,不能替代本機秘密的隔離。
參考資料:
回報錯字、失效連結,或告訴我你想看的延伸主題。