[英]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 dev
或firebase 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.