获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

处理依赖关系

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

允许函数使用外部 Node.js 模块以及本地数据。 Node.js 中的依赖项使用npm进行管理,并在名为package.json的元数据文件中表示。 Cloud Functions Node.js 运行时通常支持使用npmyarn安装。

要为您的函数指定依赖项,请将其添加到您的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')}!`);
});

打字稿

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 模块作为函数的一部分。您可以通过使用file: prefixpackage.json中声明您的模块来实现这一点。在以下示例中, mymodule指的是您的模块名称, mymoduledir是包含您的模块的目录:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

此本地模块的代码应存储在函数根目录中node_modules文件夹以外的其他位置。

TypeScript 的附加步骤

当您使用具有类型信息的库时,TypeScript 对您的帮助最大。这让 TypeScript 可以捕获语法错误,并让编辑器为您提供更好的自动完成建议。一些库,如firebase-adminfirebase-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()函数导入与函数一起部署的本地文件。

如果您在 TypeScript 中编写函数,请以相同的方式使用import语句来加载您已安装的任何 Node.js 模块。

使用私有模块

您可以通过在函数目录中的.npmrc文件中提供用于使用注册表进行身份验证的设置来使用私有 npm 模块

来自 Artifact Registry 的私有模块

Artifact Registry Node.js 包存储库可以为您的函数托管私有模块。部署到 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

来自其他存储库的私有模块

npm 文档解释了如何创建自定义只读访问令牌。我们不鼓励使用在主目录中创建的.npmrc文件,因为它包含读写令牌。部署期间不需要写入权限,但可能会带来安全风险。

如果您不使用私有存储库,请不要包含.npmrc文件,因为它会增加函数的部署时间。

文件格式

如果您使用.npmrc文件来设置自定义身份验证令牌,它应该包含如下所示的行。将<YOUR_AUTH_TOKEN>替换为您的 NPM 提供的身份验证令牌。

//registry.npmjs.org/:_authToken=<YOUR_AUTH_TOKEN>