函数可以使用外部 Node.js 模块以及本地数据。Node.js 中的依赖项可通过 npm 进行管理,并在名为 package.json
的元数据文件中表示。Cloud Functions Node.js 运行时通常支持使用 npm 或 yarn 进行安装。
要为您的函数指定依赖项,请将依赖项添加到 package.json
文件中。
在此示例中,package.json
文件中列出了一个依赖项:
{ "dependencies": { "escape-html": "^1.0.3" } }
此依赖项随后被导入函数中:
JavaScript
const escapeHtml = require('escape-html');
// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});
TypeScript
import * as escapeHtml from 'escape-html';
// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}
包括本地 Node.js 模块
您还可以将本地 Node.js 模块作为函数的一部分。要实现此目的,您可在 package.json
中使用 file:
前缀声明相关模块。在以下示例中,mymodule
引用您的模块名称,而 mymoduledir
是包含您的模块的目录:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
此本地模块的代码应存储在函数根目录内的 node_modules
文件夹之外。
针对 TypeScript 的额外步骤
使用包含类型信息的库时,TypeScript 最为有用。
这种情况下,TypeScript 可以发现语法错误,并使编辑器提供更好的自动填充建议。有些库(例如 firebase-admin
和 firebase-functions
)本身就带有 TypeScript 定义。
许多库没有自己的 TypeScript 定义。DefinitelyTyped 项目提供适用于大多数常用库的社区维护的定义。
DefinitelyTyped 以同一个 NPM 软件包名发布这些定义,但这些定义位于“@types”组织内。例如,您可以使用以下命令为 uuid
库安装类型信息:
npm install @types/uuid
随着对 TypeScript 越来越熟悉,您可以将两种安装方法结合使用:
npm install uuid @types/uuid
类型依赖项应与库依赖项为同一种类。例如,不应将 uuid
保存为普通依赖项,而将 @types/uuid
保存为开发依赖项或对等依赖项。
加载 Node.js 模块
使用 Node.js require()
函数加载已安装的任何 Node.js 模块。您还可以使用 require()
函数导入与您的函数一起部署的本地文件。
import
语句来加载您已安装的任何 Node.js 模块。
使用专用模块
您可以使用专用 npm 模块,方法是在函数目录下的 .npmrc
文件中提供向注册表进行身份验证的设置。如果您使用 Yarn v2 或更高版本作为软件包管理器,则此文件以 .yarnrc.yml
格式命名。
Artifact Registry 中的专用模块
Artifact Registry Node.js 软件包代码库可以托管您的函数的专用模块。部署 Google Cloud Functions 函数时,构建流程会自动为 Cloud Build 服务帐号生成 Artifact Registry 凭据。您只需在 .npmrc
中列出 Artifact Registry 代码库,而不需要生成额外的凭据。例如:
@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true
此方法也适用于 Yarn v1 软件包管理器。如果您使用的是 Yarn v2 或更高版本,则只需在 .yarnrc.yml
中列出 Artifact Registry 代码库,不需要额外凭据。例如:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
其他代码库中的专用模块
npm 文档说明了如何创建自定义只读访问令牌。我们不建议使用在主目录中创建的 .npmrc
文件,因为它包含读写令牌。部署期间不需要写入权限,写入权限可能会带来安全风险。
如果您未使用私有代码库,请勿添加 .npmrc
文件,因为该文件可能会延长函数的部署时间。
文件格式
如果您使用 .npmrc
文件设置自定义身份验证令牌,则应包含下面所示的一行内容。
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
替换:
- REGISTRY_DOMAIN:您的私有 npm 注册表的域名。如果您的代码库由
npmjs.org
托管,请将此字段设置为registry.npmjs.org
。 AUTH_TOKEN:npm 注册表的授权令牌。它可以是令牌的字面量文本值或文本字符串
${NPM_TOKEN}
(npm
会将其替换为环境中的实际令牌值)。您可以使用
gcloud functions deploy
命令的--set-build-env-vars
参数设置$NPM_TOKEN
环境变量。如需详细了解 NPM 身份验证令牌,请参阅有关专用模块的 NPM 教程。