环境配置

通常您将需要对您的函数进行额外配置,例如第三方 API 密钥或可调整的设置。Firebase SDK for Cloud Functions 提供了内置环境配置,让您可以轻松为项目存储和检索此类数据。

设置项目的环境配置

要存储环境数据,可以在 Firebase CLI 中使用 firebase functions:config:set 命令。每个键都可以使用英文句点来设置命名空间,以将相关配置分组到一起。请注意,键只能使用小写字符;请勿使用大写字符。

例如,要存储“某些服务”的客户端 ID 和 API 密钥,您可以运行:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

检索当前环境配置

要检查当前存储在项目环境配置中的内容,可以使用 firebase functions:config:get。它会输出如下 JSON:

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

此功能基于 Google Cloud Runtime Configuration API

在函数内访问环境配置

在保留的 firebase 命名空间下自动提供了部分配置。使用 functions.config() 可在运行的函数中提取环境配置。要使用上述配置,代码可能如下所示:

const functions = require('firebase-functions');
const request = require('request-promise');

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  let email = event.data.child('email').val();

  return request({
    url: 'https://someservice.com/api/some/call',
    headers: {
      'X-Client-ID': functions.config().someservice.id,
      'Authorization': `Bearer ${functions.config().someservice.key}`
    },
    body: {email: email}
  });
});

使用环境配置来初始化模块

某些 Node 模块无需任何配置即可使用。其他模块需要额外的配置才能正确初始化。我们建议您将此配置存储在环境配置变量中,而非将其硬编码。这有助于提高代码的可移植性,从而使您可以开放应用的源代码,或在正式版和临时版之间轻松切换。

例如,要使用 Slack Node SDK 模块,您可以这样编写代码:

const functions = require('firebase-functions');
const IncomingWebhook = require('@slack/client').IncomingWebhook;
const webhook = new IncomingWebhook(functions.config().slack.url);

在部署之前,设置 slack.url 环境配置变量:

firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX

其他环境命令

  • firebase functions:config:unset key1,key2 可从配置中移除指定的键
  • firebase functions:config:clone --from <fromProject> 可将另一个项目的环境克隆到当前有效的项目中。

自动填充的环境变量

有一些环境变量会自动填充到函数运行时和本地模拟的函数中,包括:

process.env.GCLOUD_PROJECT:提供 Firebase 项目 ID

process.env.FIREBASE_CONFIG:提供以下 Firebase 项目配置信息:

{
  databaseURL: 'https://databaseName.firebaseio.com',
  storageBucket: 'projectId.appspot.com',
  projectId: 'projectId'
}

当您不带任何参数初始化 Firebase Admin SDK 时,系统会自动应用此配置。如果您使用 JavaScript 编写函数,请按如下所示进行初始化:

const admin = require('firebase-admin');
admin.initializeApp();

如果您使用 TypeScript 编写函数,请按如下所示进行初始化:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import 'firebase-functions';
admin.initializeApp();

如果您需要使用服务帐号凭据以默认项目配置初始化 Admin SDK,则可以从文件加载凭据并将它们添加到 FIREBASE_CONFIG 中,如下所示:

serviceAccount = require('./serviceAccount.json');

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面