Cloud Run 函式的執行環境包含作業系統版本、附加套件、語言支援,以及支援和叫用函式的 Node.js Functions Framework 程式庫。這個環境由語言版本識別,稱為執行階段 ID。
函式準備
您可以直接透過 Google Cloud 控制台準備函式,也可以在本機電腦上編寫函式後再上傳。如要準備本機電腦,用於 Node.js 開發作業,請參閱「設定 Node.js 開發環境」。
支援的 Node.js 執行階段和基本映像檔
| 執行階段 | 執行階段 ID | 堆疊 | 執行階段基礎映像檔 | 淘汰 | 停用 |
|---|---|---|---|---|---|
| Node.js 24 | nodejs24 |
|
|
2028-04-30 | 2028-10-31 |
| Node.js 22 | nodejs22 |
|
|
2027-04-30 | 2027-10-31 |
| Node.js 20 | nodejs20 |
|
|
2026-04-30 | 2026-10-30 |
| Node.js 18 | nodejs18 |
|
|
2025-04-30 | 2025-10-30 |
| Node.js 16 | nodejs16 | google-18-full | google-18-full/nodejs16 | 2024-01-30 | 2025-01-30 |
| Node.js 14 | nodejs14 | google-18-full | google-18-full/nodejs14 | 2024-01-30 | 2025-01-30 |
| Node.js 12 | nodejs12 | google-18-full | google-18-full/nodejs12 | 2024-01-30 | 2025-01-30 |
| Node.js 10 | nodejs10 | google-18-full | google-18-full/nodejs10 | 2024-01-30 | 2025-01-30 |
| Node.js 8 | nodejs8 | 已停用 | 已停用 | 2020-06-05 | 2021 年 2 月 |
| Node.js 6 | nodejs6 | 已停用 | 已停用 | 2019-04-17 | 2020 年 8 月 |
選取執行階段
您可以在部署期間,為函式選取其中一個支援的 Node.js 執行階段。
您可以使用 Google Cloud 控制台或 gcloud CLI 選取執行階段版本。按一下分頁標籤,瞭解如何使用自選工具:
gcloud
部署函式時,請使用 --base-image 旗標,為函式指定 Node.js 基本映像檔。例如:
gcloud run deploy FUNCTION \
--source . \
--function FUNCTION_ENTRYPOINT \
--base-image nodejs24
更改項目:
將 FUNCTION 替換為您要部署的函式名稱。您可以完全省略這個參數,但這樣系統會提示您輸入名稱。
FUNCTION_ENTRYPOINT,指定原始碼中函式的進入點。這是 Cloud Run 在函式執行時執行的程式碼。此旗標的值必須是原始碼中既有的函式名稱或完整類別名稱。
如需使用 gcloud CLI 部署函式的詳細操作說明,請參閱「在 Cloud Run 中部署函式」。
控制台
在 Google Cloud 控制台中建立或更新 Cloud Run 函式時,可以選取執行階段版本。如需部署函式的詳細操作說明,請參閱「在 Cloud Run 中部署函式」。
如要在 Google Cloud 控制台建立函式時選取執行階段,請按照下列步驟操作:
前往 Google Cloud 控制台的 Cloud Run 頁面:
按一下「編寫函式」。
在「Runtime」(執行階段) 清單中,選取 Node.js 執行階段版本。
按一下「建立」,然後等待 Cloud Run 使用預留位置修訂版本建立服務。
控制台會將您重新導向至「來源」分頁,您可以在這裡查看函式的原始碼。按一下「儲存並重新部署」。
如需在部署函式後更新執行階段版本的詳細操作說明,請參閱「重新部署新的原始碼」。
原始碼結構
原始碼必須遵循特定結構,Cloud Run functions 才能找到函式的定義。詳情請參閱「編寫 Cloud Run 函式」。
指定依附元件
若要指定函式的依附元件,將其列入 package.json 檔案即可。詳情請參閱「在 Node.js 中指定依附元件」。
NPM 建構指令碼
根據預設,如果 Node.js 執行階段在 package.json 中偵測到 build 指令碼,就會執行 npm run build。如要在啟動應用程式前進一步控管建構步驟,請在 package.json 檔案中新增 gcp-build 指令碼,提供自訂建構步驟。
如要防止建構作業執行 npm run build 指令碼,請採取下列任一做法:
在
package.json檔案中新增值為空白的gcp-build指令碼:"gcp-build":""。將建構環境變數
GOOGLE_NODE_RUN_SCRIPTS設為空字串,防止所有指令碼執行。
非同步函式完成
處理涉及回呼或 Promise 物件的非同步工作時,您必須明確告知執行階段,函式已完成執行這些工作。您可以透過幾種不同方式執行此操作,如下列範例所示。重點是,程式碼必須等待非同步工作或 Promise 完成,才能傳回值,否則函式的非同步元件可能會在完成前終止。
事件導向函式
隱含回傳
exports.implicitlyReturning = async (event, context) => {
return await asyncFunctionThatReturnsAPromise();
};
明確回傳
exports.explicitlyReturning = function (event, context) {
return asyncFunctionThatReturnsAPromise();
};
HTTP 函式
使用中介軟體處理 HTTP 要求
Node.js HTTP 函式提供與 ExpressJS 相容的 request 和 response 物件,可簡化耗時的 HTTP 要求。Cloud Run functions 會自動讀取要求主體,因此,您一律會收到與內容類型無關的要求主體。這表示,在執行程式碼時,應將 HTTP 要求視為已完全讀取。使用 ExpressJS 應用程式的巢狀架構時,請務必留意這項限制,某些中介軟體會預期要求主體保持未讀取狀態,這類軟體就可能無法正常運作。
使用 ES 模組
ECMAScript 模組 (ES 模組或 ESM) 是 TC39 標準,在 Node 14 以上版本中,是載入 JavaScript 模組的未標記功能。與 CommonJS 不同,ESM 提供非同步 API,用於載入模組。此外,這個版本也提供熱門的語法改良功能,可搭配 import 和 export 陳述式使用,在 Cloud Run 函式中取代 require 陳述式。
如要在 Cloud Run 函式中使用 ESM,請在 package.json 中宣告 "type": "module"。
{
...
"type": "module",
...
}
這樣您就能使用 import 和 export 陳述式。
進一步瞭解如何使用 ES 模組。