Node.js 运行时
Cloud Run 函数在由操作系统版本、插件软件包、语言支持以及支持和调用函数的 Functions 框架库组成的环境中运行。此环境由语言版本进行标识,称为运行时。
如需了解运行时的一般信息以及每个 Node.js 运行时使用的 Ubuntu 版本,请参阅 Cloud Run 函数执行环境。
如需开始使用 Node.js 构建和部署 Cloud Run functions 函数,请参阅快速入门。
如需在本地系统上构建和测试函数,请参阅使用 Functions 框架运行函数。
选择运行时
Cloud Run functions 函数支持运行时支持页面上列出的多个 Node.js 版本。您可以在部署期间为您的函数选择首选 Node.js 运行时:
如需详细了解如何通过 Google Cloud CLI 进行部署,请参阅使用 Google Cloud CLI 进行部署。
如需详细了解如何通过 Google Cloud 控制台进行部署,请参阅 Google Cloud 控制台快速入门。
执行环境
执行环境包括运行时、操作系统、软件包和调用函数的库。
Node.js 18 及更高版本使用基于 Ubuntu 22.04 的执行环境。Node.js 18 之前的版本基于 Ubuntu 18.04。如需了解详情,请参阅 Cloud Run 函数执行环境。
调用您的函数的库是 Node.js 版 Functions 框架。
源代码结构
要让 Cloud Run functions 函数找到您的函数定义,每个运行时都对您的源代码有一定的结构要求。如需了解详情,请参阅编写 Cloud Run 函数。
指定依赖项
如需为您的函数指定依赖项,您可以在 package.json
文件中列出这些依赖项。如需了解详情,请参阅指定 Node.js 依赖项。
NPM 构建脚本
默认情况下,如果 package.json
中检测到 build
脚本,则 Node.js 运行时会执行 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 functions 函数提供与 ExpressJS 兼容的 request
和 response
对象,以简化处理 HTTP 请求的过程。Cloud Run functions 函数会自动读取请求正文,因此不管媒体类型如何,您始终会收到请求正文。这意味着,在您的代码执行时,HTTP 请求应被视为已完全读取。嵌套 ExpressJS 应用时,应注意这条事项。具体而言,如果中间件预计请求正文未被读取,那么该中间件可能无法按预期运行。
使用 ES 模块
ECMAScript 模块(ES 模块或 ESM)是 Node.js 14+ 中用于加载 JavaScript 模块的 TC39 标准、未标记功能。与 CommonJS 不同,ESM 提供了一个用于加载模块的异步 API。它还通过可在 Cloud Run 函数中使用的 import
和 export
语句(而不是 require
语句)提供常见的语法改进。
如需在 Cloud Run 函数中使用 ESM,您必须在 package.json
中声明 "type": "module"
。
{
...
"type": "module",
...
}
然后,您可以使用 import
和 export
语句。