我正在尝试将我制作的微型node-express应用程序移入firebase函数。
文件具有 dotenv
变量。早些时候我以为,如果我只是部署dotenv并使其依赖,它将起作用,但事实并非如此。
所以,我去了Firebase to understand how I can set .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服务-仅托管功能,它不会引发任何错误,例如
OAuth2Strategy需要一个clientID选项
答案 0 :(得分:2)
我所做的是在函数文件夹中创建一个 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)"< /p>
并且不要忘记在 .gitignore
中添加 env.json如果您的 react 项目中有 firebase 函数文件夹,只需将 */env.json 添加到您的 react .gitignore 文件
希望能帮到你。
答案 1 :(得分:1)
Firebase CLI当前不允许您在部署时设置流程环境变量。将来可能会改变。它今天支持的(您链接到的)配置变量实际上不是过程环境变量-它们存储在实际上不是过程环境的其他位置。
如果您绝对需要设置流程环境变量,则必须使用gcloud部署函数,这意味着您也将无法使用firebase-functions模块来定义函数。从Google Cloud Functions文档开始,从云的角度了解部署。
如果您要使用Firebase工具,建议您以其他方式配置不涉及流程环境变量的功能。
答案 2 :(得分:1)
如果您想让函数使用process.env变量,则可以通过转到Google云控制台和云函数进行设置。您将可以在此处找到已部署的Firebase功能。您可以一个一个地选择每个功能,然后在其中设置环境变量。
答案 3 :(得分:0)
这是我的解决方法。
const functionConfig = () => {
if (process.env.RUN_LOCALLY) {
const fs = require('fs');
return JSON.parse(fs.readFileSync('.env.json'));
} else {
return functions.config();
}
};
finctionConfig()
被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中的环境配置。