Я пытаюсь переместить крошечное приложение node-express, которое я сделал, в функции 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 serve --only functions,хостинг он не выдавал никаких ошибок, таких как
OAuth2Strategy requires a clientID option





Интерфейс командной строки Firebase в настоящее время не позволяет вам устанавливать переменные среды процесса при развертывании. Это может измениться в будущем. Переменные конфигурации, которые он поддерживает сегодня (с которыми вы связались), на самом деле не являются переменными среды процесса - они хранятся где-то еще, что на самом деле не является средой процесса.
Если вам абсолютно необходимо иметь возможность устанавливать переменные среды процесса, вам придется развернуть свою функцию с помощью gcloud, а это означает, что вы также не сможете использовать модуль firebase-functions для определения своей функции. Начните с документации Облачные функции Google, чтобы узнать о развертывании с точки зрения облака.
Если вы хотите использовать инструменты Firebase, я бы порекомендовал вам найти другой способ настройки вашей функции, который не включает переменные среды процесса.
Если вы хотите, чтобы ваши функции использовали переменные process.env, вы можете установить их, перейдя в облачную консоль Google и облачные функции. Там вы сможете найти развернутые функции firebase. Вы можете выбрать каждую функцию одну за другой, а затем установить там переменные среды.
ОБНОВЛЕНО 04.06.2019
Мне очень жаль. Это решение неверно.
Я нашел правильный путь.
https://stackoverflow.com/a/45064266/1872674
Вы должны поместить .runtimeconfig.json в каталог функций. Ваши переменные dotenv перемещаются на .runtimeconfig.json в формате 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
Когда мы будем развертывать функции,
не забудьте обновить конфигурацию среды в Firebase с помощью файла .env.json.
что я сделал, так это создал файл env.json в ПАПКУ функций:
//env.json
{
"send_email_config": {
"FOW_ADMIN_EMAIL": "[email protected]",
"FOW_ADMIN_EMAIL_PASSWORD": "adminPassExample",
"FOW_ADMIN_RECEIVER_EMAIL": "[email protected]"
}
}
затем я создал файл с именем 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
}
}
ВАЖНЫЙ!!!!
чтобы это работало, вам нужно развернуть functions.config().env со значениями файла env.json
для развертывания functions.config().env вам просто нужно запустить ВНУТРИ ПАПКИ функций следующую команду: функции firebase:config:set env="$(cat env.json)"
а также не забудьте добавить env.json в свой .gitignore
если у вас есть функции firebase FOLDER внутри вашего проекта реакции, просто добавьте */env.json в ваш файл реакции .gitignore