Cloud Functions for Firebase 的 Node.js 20 已停用:升級到 Node.js 24 或 22
Cloud Functions 的 Node.js 20 執行階段已於 2026 年 10 月 30 日停用(decommission)。現在無法再用 Node.js 20 部署新函式或更新現有函式,所以 firebase deploy 會因下面的錯誤而停止。要修改的只有 functions/package.json 中的一行。如果只有第 2 代函式,請升級到 Node.js 24;如果有第 1 代函式,請升級到 Node.js 22。
Error: Runtime Node.js 20 was decommissioned on 2026-10-30. To deploy you must
first upgrade your runtime version.重點整理
- 問題不只是無法部署。已部署的函式仍在執行,但不再提供安全性修補程式,也可能遭到停用,而且沒有確定的日期。日期與含義
- 改一行,再重新部署。把
engines.node改成"24"或"22"。如果firebase.json中有runtime,就以它為準。修改方法 - 第 2 代用 24,第 1 代用 22。第 1 代函式最後能用的是 Node.js 22,所以必須在 22 停用的 2027 年 10 月 31 日之前遷移至第 2 代。第 1 代函式
- 如果升級 SDK,請注意兩件事。
firebase-functions7 移除了functions.config(),firebase-admin14 只能在 Node.js 22 以上版本執行。SDK 版本
日期與含義
這是 Google Cloud 的執行階段支援時間表。淘汰(deprecation)期間仍可部署;停用(decommission)之後,既不能建立新函式,也不能更新函式。
| 執行階段 | 可用的函式 | 淘汰 | 停用 |
|---|---|---|---|
| Node.js 18 | 第 1 代、第 2 代 | 2025-04-30 | 2025-10-30 |
| Node.js 20 | 第 1 代、第 2 代 | 2026-04-30 | 2026-10-30 |
| Node.js 22 | 第 1 代、第 2 代 | 2027-04-30 | 2027-10-31 |
| Node.js 24 | 僅限第 2 代 | 2028-04-30 | 2028-10-31 |
停用後會有以下變化。
| 淘汰期間 | 停用後 | |
|---|---|---|
| 新部署或更新 | 可以 | 不可以 |
| 已部署的函式 | 照常執行 | 仍會執行,但可能遭到停用 |
| Node.js 和作業系統的安全性修補程式 | 有 | 無 |
政策沒有說明函式何時會遭到停用。即使是現在運作正常的函式,一到要修正錯誤的時候也無法部署,而且無法預知它何時會停止運作。也沒有繞過的方法。即使關閉 CLI 的執行階段檢查,伺服器端也會另外擋下(CLI 原始碼)。
升級到 Node.js 24 或 22
- 確認每個函式是第幾代、使用哪個執行階段。執行
firebase functions:list:Version 欄為v1表示第 1 代,為v2表示第 2 代;Runtime 欄是目前的執行階段。 - 選擇版本。執行階段不是依函式個別設定,而是每個程式碼集(通常是
functions資料夾)一個。只要有一個第 1 代函式就選 22,全部都是第 2 代就選 24。24 可以用到 2028 年 10 月 31 日,但不支援第 1 代。Firebase 說明文件的版本清單裡還沒有 24,不過 Google Cloud 的時間表已將它列為第 2 代可用,Firebase CLI 也從 14.26.0 開始支援。 - 修改
package.json中的一行。值是單一主要版本號碼。如果寫成>=22或22.x這類範圍,CLI 會產生Detected node engine ... which is not a supported version錯誤。{ "engines": { "node": "24" } }如果
firebase.json中有runtime,CLI 會優先使用這個值。這時請改那裡。{ "functions": { "source": "functions", "runtime": "nodejs24" } } - 本機和 CI 的 Node.js 也要統一成相同版本。模擬器會用本機安裝的 Node.js 執行函式。版本不同時,它只會發出
Your requested "node" version "24" doesn't match your global version "20"警告,然後照樣用 20 執行,結果測試就會在與正式環境不同的版本上執行。 - 部署。執行
firebase deploy --only functions,然後確認firebase functions:list的 Runtime 欄已變成nodejs24(或nodejs22)。
SDK 版本
如果在升級 Node.js 的同時也升級 SDK,請確認下列事項。
| 套件 | 要確認的事項 |
|---|---|
firebase-tools(CLI) | 從 13.11.0 開始可部署 nodejs22,從 14.26.0 開始可部署 nodejs24。 |
firebase-functions | 低於 6.2.0 的版本中,含有頂層 await 的 ESM 程式碼在 Node.js 22.12 以上版本會無法執行。7.0.0 移除了 functions.config(),呼叫時會發生執行階段錯誤。 |
firebase-admin | 14 只能在 Node.js 22 以上版本執行,而且必須搭配 firebase-functions 7.3.0 以上版本使用(peer 依附元件)。13 可在 Node.js 18 以上版本執行。 |
如果還在使用 functions.config(),請把 firebase-functions 維持在 6.x,只升級 Node.js。2027 年 3 月之後,使用 functions.config() 的部署也會失敗,所以在那之前要遷移到環境變數或 Secret Manager。
第 1 代函式
第 1 代函式能用的最後一個執行階段是 Node.js 22,而 22 將於 2027 年 10 月 31 日停用。在那之前必須遷移至第 2 代。Firebase CLI 15.35.0 的警告將 22 的停用日期顯示為 2028-10-31,但應以 Google Cloud 執行階段支援時間表上的 2027-10-31 為準(CLI 原始碼)。函式無法在名稱不變的情況下直接切換,所以 Firebase 建議用新名稱部署第 2 代函式,把流量轉移過去之後,再刪除第 1 代函式(升級指南)。遷移時容易遇到的問題如下。
- 網址會改變。HTTP、可呼叫和工作佇列函式的新名稱就是新網址。先把應用程式和 Webhook 改為使用新網址,再用
firebase functions:delete刪除舊函式。 - 事件會處理兩次。在兩個函式並存期間,Firestore、Storage 等事件觸發條件會讓兩個函式都針對同一個事件執行。請確保執行兩次也會得到相同結果。
- 有些功能沒有。第 2 代沒有
functions.config()和 Analytics 事件觸發條件,Authentication 的使用者建立和刪除觸發條件(onUserCreated、onUserDeleted)仍是預先發布版(Preview)。 - 預設值不同。一個執行個體預設最多同時處理 80 個要求,預設服務帳戶也會換成 Compute Engine 預設服務帳戶。如果你在全域變數中存放每個要求各不相同的值,或把 IAM 權限授予了 App Engine 預設服務帳戶,就需要修改。
擴充功能(Extensions)
已安裝的擴充功能同樣在 Cloud Functions 上執行,執行階段由擴充功能的版本決定。Firebase 建議將擴充功能更新至最新版本。
firebase ext:update <instance-id>
firebase deploy --only extensionsFirebase Extensions 服務將於 2027 年 3 月 31 日停止運作。已安裝的擴充功能在那之後仍會執行,但無法再使用更新等管理功能。大多數擴充功能是以第 1 代函式建構,執行階段停用後可能會停止執行或遭到停用。如果是要繼續使用的功能,也請規劃改用自己編寫的函式。
資料來源
- 執行階段支援時間表、Cloud Functions 版本資訊:日期、淘汰與停用的含義、第 1 代對 Node.js 22 和第 2 代對 Node.js 24 的支援
- 管理函式(設定 Node.js 版本)、Cloud Functions 常見問題:
engines和runtime、擴充功能的執行階段 - Firebase CLI 15.35.0 原始碼:執行階段檢查和錯誤訊息、執行階段日期、讀取
engines、模擬器如何選擇 Node.js、伺服器端檢查 - firebase-tools、firebase-functions、firebase-admin 14.0.0 的版本資訊、環境設定
- 從第 1 代升級至第 2 代、版本比較、Authentication 觸發條件、擴充功能常見問題、extension.yaml 參考資料
