繁体   English   中英

在 firebase 函数中设置 dotenv

[英]Setting up dotenv in firebase functions

我正在尝试将我制作的微型节点快速应用程序移动到 firebase 函数中。

该文件具有dotenv变量。 早些时候我想如果我只是部署并依赖 dotenv,它会起作用,但事实并非如此......

所以,我去了firebase的环境配置文章,了解如何设置.env

哪个状态通过做这样的事情来设置东西

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

但是我有这么多的环境配置,并且做一些似乎很麻烦的任务。

所以假设这是环境文件

# App port Address
PORT = 8080

# Google Secret 
GOOGLE_CALLBACK_URL =   http://localhost:8080/auth/google/callback
GOOGLE_CLIENT_ID = 4048108-bssbfjohpu69vl6jhpgs1ne0.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET = lTQHpjzY57oQpO

# Client Address 
CLIENT_ADDRESS = http://localhost:3000/


# Meetup Secret 
MEETUP_CALLBACK_URL = http://localhost:8080/auth/meetup/callback
MEETUP_CLIENT_ID = ef6i9f7m6k0jp33m9olgt
MEETUP_CLIENT_SECRET = sk3t5lnss2sdl1kgnt

#EventBrite Secret 
EVENTBRITE_CALLBACK_URL = http://localhost:8080/auth/eventbrite/callback
EVENTBRITE_CLIENT_ID = UU2FXKGYHJRNHLN
EVENTBRITE_CLIENT_SECRET = NA55QG52FAOF6GDMLKSJBKYOPIGQU4R46HHEU4 

我怎样才能最好地设置,以便当我执行 firebase firebase 服务 --only 功能时,托管它不会引发任何错误,例如

OAuth2Strategy 需要一个 clientID 选项

截至2022 年 2 月 16 日, Firebase 现在原生支持.env.env.prod.env.dev.env.local文件!

https://firebase.google.com/docs/functions/config-env

在相应的环境中设置变量,然后在部署前运行firebase use devfirebase use prod

您的变量可以通过process.env.VARIABLE_NAME访问

更新 2019-06-04

我非常抱歉。 这个解决方案是错误的。

我找到了正确的方法。

https://stackoverflow.com/a/45064266/1872674

您应该将.runtimeconfig.json放入函数目录中。 您的 dotenv 变量以 json 格式移动到.runtimeconfig.json


这是我的解决方案。

const functionConfig = () => {
    if (process.env.RUN_LOCALLY) {
        const fs = require('fs');
        return JSON.parse(fs.readFileSync('.env.json'));
    } else {
      return functions.config();
    }
};

functionConfig()由您的 Firebase 函数调用。

exports.helloWorld = functions.https.onRequest((request, response) => {
    response.send("someservice id is: " + functionConfig().someservice.id);
});

.env.json就像:

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

最后,使用RUN_LOCALLY变量运行命令。

RUN_LOCALLY=1 firebase serve

当我们部署函数时,不要忘记使用.env.json更新 Firebase 中的环境配置。

Firebase CLI 当前不允许您在部署时设置流程环境变量。 这在未来可能会改变。 它今天支持的配置变量(您链接到的)实际上并不是流程环境变量——它们存储在其他实际上不是流程环境的地方。

如果您绝对需要能够设置流程环境变量,则必须使用 gcloud 部署您的函数,这意味着您也将无法使用 firebase-functions 模块来定义您的函数。 Google Cloud Functions文档开始,从 Cloud 的角度了解部署。

如果您想使用 Firebase 工具,我建议您找到一种不同的方法来配置不涉及流程环境变量的函数。

如果你想让你的函数使用 process.env 变量,你可以通过转到谷歌云控制台和云函数来设置它们。 您将能够在那里找到已部署的 Firebase 函数。 您可以一个一个地选择每个函数,然后在那里设置环境变量。

我所做的是在函数文件夹中创建一个 env.json 文件:

//env.json
{
   "send_email_config": {
       "FOW_ADMIN_EMAIL": "admin.example@gmail.com",
       "FOW_ADMIN_EMAIL_PASSWORD": "adminPassExample",
       "FOW_ADMIN_RECEIVER_EMAIL": "adminReceiver.example@gmail.com"
   }
}

然后我创建了一个名为 env.js 的文件,我在其中创建了一个函数来返回 functions.config() 的值,这是一种 env 模块

//env.js
// TO UPDATE functions.config().env RUN INSIDE functions FOLDER: 
// firebase functions:config:set env="$(cat env.json)" 

const functions = require('firebase-functions');

const getEnvConfig = () => {
    /* 
       I return functions.config().env cause I set the env.json values into env 
       property running firebase functions:config:set env="$(cat env.json)"
    */
    return functions.config().env
}

exports.getEnvConfig = getEnvConfig;

exports.PROCESS_ENV = getEnvConfig();

然后我只需调用 PROCESS_ENV 来访问我在 env.json 文件上设置的值,例如:

const { PROCESS_ENV } = require('./utils/env');

exports.mailCredentials = {
    main: {
        email: PROCESS_ENV.send_email_config.FOW_ADMIN_EMAIL,
        password: PROCESS_ENV.send_email_config.FOW_ADMIN_EMAIL_PASSWORD
    },
    receiver: {
        email: PROCESS_ENV.send_email_config.FOW_ADMIN_RECEIVER_EMAIL
    }
}

重要的!!!!

为此,您必须使用 env.json 文件的值部署 functions.config().env

要部署functions.config().env,您只需在函数文件夹内运行下一个命令: firebase functions:config:set env="$(cat env.json)"

并且不要忘记在你的.gitignore添加 env.json

如果您的反应项目中有 firebase 函数文件夹,只需将 * /env.json添加到您的反应.gitignore文件中

your.env 文件需要在“functions”文件夹中

在这里你有关于这个的文档

https://firebase.google.com/docs/functions/config-env

您可以像这样访问变量:

这是你的.env:

PLANET=Earth
AUDIENCE=Humans

和 firebase 功能

// Responds with "Hello Earth and Humans"
exports.hello = functions.https.onRequest((request, response) => {
  response.send(`Hello ${process.env.PLANET} and ${process.env.AUDIENCE}`);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM