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

时间:2017-06-26 18:40:54

标签: firebase google-cloud-functions

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

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

firebase serve --only functions

我使用

设置了一些自定义环境变量
firebase functions:config:set

使用以下代码访问自定义配置变量在部署项目时工作正常

 functions.config()

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

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

5 个答案:

答案 0 :(得分:59)

截至目前,您必须通过运行此命令在您的函数目录中手动创建.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

中了解详情

答案 1 :(得分:4)

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

{
  "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"
  }
}

答案 2 :(得分:2)

对于那些想要使用环境变量(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];
}

答案 3 :(得分:1)

我不确定最受好评的答案是否有效,但是对于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"

答案 4 :(得分:1)

我已将问题缩小到Windows Powershell。

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

我已经设法通过在Windows命令提示符下运行.runtimeconfig.json生成命令来对其进行排序。