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')}!`);
});
打字稿
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:
prefix在package.json
中声明您的模块来实现这一点。在以下示例中, 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 模块。使用私有模块
您可以通过在函数目录中的.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>