環境變數是什麼?為什麼不能把 API Key 寫在 Code 裡
English · 繁中 · Español · 日本語 · Português (BR)
作者: Danko Peng(@dankopeng)
更新: 2026 年 3 月
閱讀時間: 約 6 分鐘
先從一個真實的災難開始
2022 年,一個開發者把含有 AWS API key 的 code 推上了 GitHub。
四分鐘內,有自動化程式掃描到了這個 key。
八小時後,他收到一張 $50,000 的 AWS 帳單。
這不是特例。GitHub 上每天有數千個 API key 被意外公開,被自動化工具掃描並濫用。
什麼是環境變數?
你的 app 需要一些「秘密資訊」才能運作:
- Stripe 的 API key(用來收款)
- Resend 的 API key(用來發郵件)
- JWT secret(用來簽發登入 token)
- 資料庫連線字串
這些東西不能寫在 code 裡,因為 code 會被推上 GitHub。
環境變數就是把這些秘密資訊放在 code 以外的地方——作業系統或部署平台的「環境」裡。你的 code 在執行時去讀取這些值,但這些值本身不存在於 code 裡。
在本地開發:.env 檔案
本地開發時,你通常會建立一個 .env 檔案:
STRIPE_SECRET_KEY=sk_live_xxxxx
RESEND_API_KEY=re_xxxxx
JWT_SECRET=my-super-secret-key然後在 code 裡這樣讀取:
// Node.js / Remix
const stripeKey = process.env.STRIPE_SECRET_KEY
// Cloudflare Workers
const stripeKey = env.STRIPE_SECRET_KEY關鍵:.env 檔案絕對不能推上 GitHub。
確認你的 .gitignore 裡有這一行:
.env
.env.local
.env.production在正式環境:平台的 Secrets 管理
本地的 .env 只在你自己的電腦上有效。部署到正式環境,你需要在平台上設定環境變數。
Cloudflare Workers 的做法:
# 用 Wrangler CLI 設定 secret
npx wrangler secret put JWT_SECRET
# 輸入值之後,Cloudflare 會加密儲存,不會出現在任何 log 裡或者在 Cloudflare Dashboard 的 Workers → Settings → Variables 手動設定。
常見錯誤
錯誤一:.env 推上了 GitHub
# 補救方法:從 git 歷史裡移除
git rm --cached .env
git commit -m "remove .env from tracking"但如果已經推上去了,假設這個 key 已經洩漏,立刻去對應的平台撤銷並重新生成新的 key。
錯誤二:key 硬寫在 code 裡
// ❌ 這樣等於公開你的 key
const stripe = new Stripe("sk_live_xxxxx")
// ✅ 正確做法
const stripe = new Stripe(env.STRIPE_SECRET_KEY)錯誤三:把 .env 的值 console.log 出來
// ❌ log 可能被記錄下來
console.log("Stripe key:", env.STRIPE_SECRET_KEY)
// ✅ 只確認有沒有值,不印出值
console.log("Stripe key exists:", !!env.STRIPE_SECRET_KEY)總結
環境變數的核心概念很簡單:秘密的東西不能在 code 裡,要放在環境裡。
三個記住的原則:
.env加進.gitignore- 正式環境的 secret 在平台上設定,不要在 code 裡
- 不小心洩漏了就立刻撤銷重生成,不要心存僥倖
Danko Peng
X · YouTube · Threads
👉 回到教程首頁
想直接上手完整的 Cloudflare 全棧模板?
👉 vibefast.app — 早鳥 $99,2026 年 8 月 1 日漲至 $199。