如何为Firebase的Cloud Functions设置本地环境变量


71

我正在使用http云功能来侦听请求,然后返回一条简单消息。

我正在使用以下方法在本地开发云功能:

firebase serve --only functions

我已经使用设置了一些自定义环境变量

firebase functions:config:set

部署项目后,使用以下代码访问自定义配置变量即可正常工作

 functions.config()

但是在本地开发时不起作用。当通过以下命令触发函数时:http:// localhost:5002 / my-project-name / us-central1 / functionName我无法访问自定义配置变量。在本地使用functions.config()时,我可以看到默认配置,而不是我的自定义配置变量

在本地工作时,环境变量是否有替代解决方案或最佳实践?


当您说您正在本地开发时,您能否更具体地说明自己在做什么?
道格·史蒂文森

@DougStevenson我更新了问题。希望这可以让我更加清楚自己的工作
ChrisMacSEA

我看到了同样的问题。我将在内部对此提交一个错误(我在Firebase团队中)。随时也留下一个错误报告firebase.google.com/support/contact/bugs-features
道格·史蒂文森

Answers:


116

到目前为止,您必须通过运行此命令在您的functions目录中手动创建.runtimeconfig.json文件。然后运行serve命令。

firebase functions:config:get > .runtimeconfig.json

如果您使用的是Windows Powershell,请将以上内容替换为:

firebase functions:config:get | ac .runtimeconfig.json

您可以在https://firebase.google.com/docs/functions/local-emulator中了解更多信息


您能否详细说明本地配置集以测试发送FCM通知的功能?
ThierryC

1
我的触发器在用户创建时启动了FCM通知。它可以在Firebase服务器上运行,但在本地测试,但出现错误:“信息:功能崩溃{错误:尝试向FCM服务器进行身份验证时发生错误。请确保用于验证此SDK的凭据具有适当的权限。请参阅firebase .google.com / docs / admin / setup中的设置说明。Raw服务器响应:“ <HTML> <HEAD> <TITLE>未经授权的</ TITLE> </ HEAD> <BODY BGCOLOR =”#FFFFFF“ TEXT =”# 000000“> <H1>未经授权</ H1> <H2>错误401 </ H2> </ BODY> </ HTML>”。状态代码:401。“
ThierryC

4
在这里要注意一点,上面引用的json文件必须functions像提到的帖子一样在您的目录中,因此只需先在函数目录中运行上面的片段,然后再运行(例如,如果您位于firebase proj的根目录中)将无法正常工作。在这种情况下,您必须运行类似的内容firebase functions:config:get > functions/.runtimeconfig.json
Keegan Brown

5
不为我工作。我在通过“ functions:config:get> .runtimeconfig.json”生成的“ functions”目录中具有“ .runtimeconfig.json”。但是,当我在本地主机中并在项目中执行“ functions.config()”时,它将返回一个空对象。
Cabuxa.Mapache

2
@ Cabuxa.Mapache您是否知道为什么它返回一个空对象?我有同样的问题,因为每当我运行firebase functions:config:get > .runtimeconfig.json在Mac上它其实是将所有的数据在一个空的JSON对象,文件...我用不同的文件名一样尝试过.devConfig.json.serveConfig.json,但无论文件名我提供的命令被覆盖用空的JSON对象..

11

对于那些想要使用环境变量(process.env)的人,我遵循此替代方法。

部署前设置配置值

firebase functions:config:set envs.db_host=$DB_HOST_PROD envs.db_user=$DB_USER_PROD envs.db_password=$DB_PASSWORD_PROD envs.db_name=$DB_NAME_PROD envs.db_use_ssl=false

阅读配置并首先在函数代码下更新env变量。

const functions = require('firebase-functions');
const config = functions.config();
// Porting envs from firebase config
for (const key in config.envs){
  process.env[key.toUpperCase()] = config.envs[key];
}

4

您可以保留一个名为.env.json的文件,并在触发deploy命令时将其加载

{
  "name": "project",
  "version": "0.0.0",
  "scripts": {
    "deploy": "npm run env && firebase deploy --only functions",
    "env": "test -f env.json && firebase functions:config:unset env && firebase functions:config:set env=\"$(cat env.json)\" || echo \"Please add the file env.json before deploy.\""
  },
  "dependencies": {
    "firebase-functions": "^3.1.0"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.1.6"
  }
}

1

我已将问题缩小到Windows Powershell。

在powershell中运行firebase functions:config:get> .runtimeconfig.json会生成一个损坏的json,但我不知道为什么,在解析时会在JSON位置0给出意外的令牌。

我已经设法通过在Windows命令提示符下运行.runtimeconfig.json generation命令来解决它。


0

我不确定最受好评的答案是否有效,但对于mac上的firebase功能(要在本地提供),我这样做

npm run admin-keys && export dev=true && firebase emulators:start

管理员密钥在哪里

"admin-keys": "export GOOGLE_APPLICATION_CREDENTIALS='./.keys/admin.keys.json'"

这将从 .runtimeconfig.json

对于生产,您必须通过执行以下操作手动进行设置

firebase functions:config:set facebookCred.secret="something"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.