Node.js 執行階段
Cloud Run 函式會在環境中執行,該環境包含作業系統版本、外掛程式套件、語言支援,以及支援和叫用函式的 Functions Framework 程式庫。這個環境由語言版本識別,稱為執行階段。
如要瞭解一般執行階段,以及各個 Node.js 執行階段使用的 Ubuntu 版本,請參閱 Cloud Run functions 執行環境。
如要開始使用 Node.js 建構及部署 Cloud Run 函式,請參閱快速入門導覽課程。
如要在本機系統上建構及測試函式,請參閱「使用 Functions Framework 執行函式」。
選取執行階段
Cloud Run functions 支援多個版本的 Node.js,詳情請參閱「執行階段支援」頁面。您可以在部署期間,針對函式選取偏好的 Node.js 執行階段:
如要瞭解如何透過 Google Cloud CLI 部署,請參閱「部署 Cloud Run 函式」。
如要瞭解如何從 Google Cloud 控制台部署,請參閱Google Cloud 控制台快速入門導覽課程。
執行環境
執行環境包括執行階段、作業系統、套件以及叫用函式的程式庫。
Node.js 18 以上版本使用以 Ubuntu 22.04 為基礎的執行環境。Node.js 18 之前的版本以 Ubuntu 18.04 為基礎。詳情請參閱 Cloud Run functions 執行環境。
呼叫函式的程式庫是 Node.js Functions Framework。
原始碼結構
為使 Cloud Run 函式能夠找到您函式的定義,每個執行階段都對原始碼有一定的結構要求。詳情請參閱編寫 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 函式
Node.js
使用中介軟體處理 HTTP 要求
Node.js HTTP Cloud Run 函式提供與 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
陳述式。