如何将 Firebase 参数化配置与 Typescript for Cloud Functions 结合使用?

ein*_*r_j 8 environment-variables firebase typescript google-cloud-functions

我正在尝试将 Firebase 参数化配置与 Typescript 用于云功能。具体来说,我尝试在部署时使用它们来指定要使用的服务帐户,因为我在单独的 firebase 项目中拥有三个环境(dev、staging、prod),并具有单独的 firestore 数据库。

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

我在运行时访问这些环境变量没有问题,就像通过调用 .value() 中的说明一样

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

配置.ts

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

export const SERVICE_ACCOUNT = defineString("SERVICE_ACCOUNT")
Run Code Online (Sandbox Code Playgroud)

.env。

SERVICE_ACCOUNT = './service-account-dev.json'
Run Code Online (Sandbox Code Playgroud)

然后,当我想在部署时使用此环境变量时,我会收到一些错误

索引.ts

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

admin.initializeApp({
  credential: admin.credential.cert(SERVICE_ACCOUNT),
})
Run Code Online (Sandbox Code Playgroud)

打字稿错误:“‘StringParam’类型的参数无法分配给‘string | ServiceAccount’类型的参数。ts(2345)”

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

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

admin.initializeApp({
  credential: admin.credential.cert(SERVICE_ACCOUNT.value()),
})
Run Code Online (Sandbox Code Playgroud)

使用此代码,我现在不会从打字稿中得到任何问题,因为该值是一个字符串,但在部署到 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() }"}
Run Code Online (Sandbox Code Playgroud)

所以我遇到的问题是,我不能只使用参数,因为打字稿无法编译,然后当我从参数中获取值以使打字稿满意时,我无法部署。

有人可以帮我从这里出去吗?提前致谢

我正在使用以下软件包来实现 firebase 功能和管理:

"firebase-admin": "^11.3.0",
"firebase-functions": "^4.1.0",
Run Code Online (Sandbox Code Playgroud)

小智 -3

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

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

admin.initializeApp({
  credential: admin.credential.cert(SERVICE_ACCOUNT.value),
})
Run Code Online (Sandbox Code Playgroud)