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

Chr*_*SEA 50 firebase google-cloud-functions

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

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

firebase serve --only functions
Run Code Online (Sandbox Code Playgroud)

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

firebase functions:config:set
Run Code Online (Sandbox Code Playgroud)

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

 functions.config()
Run Code Online (Sandbox Code Playgroud)

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

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

lau*_*ong 86

截至目前,您必须通过运行此命令在函数目录中手动创建.runtimeconfig.json文件.然后运行serve命令.

firebase functions:config:get > .runtimeconfig.json
Run Code Online (Sandbox Code Playgroud)

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

firebase functions:config:get | ac .runtimeconfig.json
Run Code Online (Sandbox Code Playgroud)

您可以访问https://firebase.google.com/docs/functions/local-emulator了解详情

  • 不为我工作。我在通过“ functions:config:get> .runtimeconfig.json”生成的“ functions”目录中具有“ .runtimeconfig.json”。但是当我在本地主机中并在项目中执行“ functions.config()”时,它将返回一个空对象。 (4认同)
  • 在这里稍加注意,上面引用的json文件必须像提到的帖子一样在您的`functions`目录中,因此只需先在功能目录中运行上面的片段,而不要在其中运行(例如,如果您位于firebase的根目录中)相反,proj)将无法正常工作。在这种情况下,您将不得不运行类似`firebase functions:config:get> functions / .runtimeconfig.json`之类的东西。 (2认同)
  • @Cabuxa.Mapache 你知道为什么它返回一个空对象吗?我遇到了同样的问题,因为每当我在 Mac 上运行 `firebasefunctions:config:get > .runtimeconfig.json` 时,它实际上会用空的 JSON 对象替换该文件中的所有数据...我用不同的文件名尝试了它就像 `.devConfig.json` 和 `.serveConfig.json` 一样,但是我在命令中提供的任何文件名都会被空的 JSON 对象覆盖。 (2认同)

Mut*_*mar 7

对于那些想要使用环境变量(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
Run Code Online (Sandbox Code Playgroud)

阅读配置并首先在函数代码下更新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];
}
Run Code Online (Sandbox Code Playgroud)


vin*_*h10 5

您可以保留一个名为 .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"
  }
}
Run Code Online (Sandbox Code Playgroud)