如何将Firebase参数化配置与云函数的Typescript一起使用?

vsdwdz23  于 2023-01-05  发布在  TypeScript
关注(0)|答案(1)|浏览(135)

我正在尝试使用Firebase参数化配置和Typescript for Cloud Functions。具体来说,我正在尝试在部署时使用它们来指定要使用的服务帐户,因为我在单独的Firebase项目中有三个环境(dev,staging,prod),它们具有单独的Firestore数据库。
我正在按照这里的说明https://firebase.google.com/docs/functions/config-env
我在运行时访问这些环境变量没有问题,就像在指令中通过调用. value()一样
我将服务帐户环境变量定义为:
config.ts

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

export const SERVICE_ACCOUNT = defineString("SERVICE_ACCOUNT")

环境

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

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

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

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

打字错误:"" StringParam "类型的参数不能赋给" string "类型的参数|服务帐户'. ts(2345)"
然后,当我试图得到这里的值时,像这样:index.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",
92dk7w1h

92dk7w1h1#

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

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

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

相关问题