typescript - 如何将 Firebase 参数化配置与 Typescript 一起用于 Cloud Functions?

标签 typescript firebase google-cloud-functions environment-variables

我正在尝试将 Firebase 参数化配置与用于 Cloud Functions 的 Typescript 结合使用。具体来说,我试图在部署时使用它们来指定要使用的服务帐户,因为我在单独的 firebase 项目中有三个环境(开发、暂存、生产),具有单独的 firestore 数据库。

我按照此处的说明操作 https://firebase.google.com/docs/functions/config-env

我在运行时通过调用 .value() 访问这些环境变量没有问题

我这样定义我的服务帐户环境变量:

配置文件

import { defineString } from "firebase-functions/params"

export const SERVICE_ACCOUNT = defineString("SERVICE_ACCOUNT")

.环境

SERVICE_ACCOUNT = './service-account-dev.json'

然后当我想在部署时使用这个环境变量时,我得到了一些错误

索引.ts

import * as admin from "firebase-admin"
import { SERVICE_ACCOUNT } from "./config"

admin.initializeApp({
  credential: admin.credential.cert(SERVICE_ACCOUNT),
})

typescript 错误:“‘StringParam’类型的参数不可分配给‘string | ServiceAccount’.ts(2345) 类型的参数”

然后,当我尝试像这样获取这里的值时: 索引.ts

import * as admin from "firebase-admin"
import { SERVICE_ACCOUNT } from "./config"

admin.initializeApp({
  credential: admin.credential.cert(SERVICE_ACCOUNT.value()),
})

有了这段代码,我现在没有从 typescript 中得到任何问题,因为值是一个字符串,但是我在部署到 firebase 时收到了一个错误(这是我在顶部链接的说明中预期和提到的)。

错误如下:

{"severity":"WARNING","message":"params.SERVICE_ACCOUNT.value() invoked during function deployment, instead of during runtime."}
{"severity":"WARNING","message":"This is usually a mistake. In configs, use Params directly without calling .value()."}
{"severity":"WARNING","message":"example: { memory: memoryParam } not { memory: memoryParam.value() }"}

所以我遇到的问题是我不能只使用 Param,因为 typescript 无法编译,然后当我从 param 获取值以使 typescript 满意时,我无法部署。

有人可以帮我吗?提前致谢

我将以下软件包用于 firebase 功能和管理:

"firebase-admin": "^11.3.0",
"firebase-functions": "^4.1.0",

最佳答案

defineString().value 是一个 getter 函数。所以您应该将它用作参数,而不是方法。

import * as admin from "firebase-admin"
import { SERVICE_ACCOUNT } from "./config"

admin.initializeApp({
  credential: admin.credential.cert(SERVICE_ACCOUNT.value),
})

关于typescript - 如何将 Firebase 参数化配置与 Typescript 一起用于 Cloud Functions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74744707/

相关文章:

swift - 类属性返回 nil

android - 如何开始使用 App-Tracking?

node.js - Firebase数据库如何防止并发读取?

javascript - 如何过滤以数组作为对象参数之一的对象数组?

javascript - 部分静态路由参数angular 2

reactjs - 如何使用 Typescript 正确声明 React 包装器组件 (HOC) 的类型

ios - App Store Connect 中的 Apple App Privacy 应该如何填写?

google-cloud-platform - 如何处理 Google Cloud Functions 中的 secret ?

firebase - 使用 Cloud Functions for Firebase 和节点邮件程序时创建用户事件的登录无效

node.js - 使用TypeScript的Express路由的返回类型