Как настроить локальные переменные среды для облачных функций для Firebase
Я использую функции http cloud для прослушивания запроса, а затем возвращаю простое сообщение.
Я разрабатываю облачные функции локально, используя:
firebase serve --only functions
Я установил некоторые пользовательские переменные среды, используя
firebase functions:config:set
Доступ к настраиваемым переменным конфигурации с использованием приведенного ниже кода отлично работает при развертывании проекта
functions.config()
но он не работает при локальном развитии. Когда функция запускается нажатием: http://localhost:5002/my-project-name/us-central1/functionName Я не могу получить доступ к настраиваемым переменным конфигурации. при использовании функции functions.config() локально, я вижу конфигурацию по умолчанию, а не мои настраиваемые переменные конфигурации
Существует ли альтернативное решение или передовая практика для переменных среды при работе на локальном уровне?
Ответы
Ответ 1
На данный момент вы должны вручную создать файл .runtimeconfig.json
в вашем каталоге функций, выполнив эту команду. Затем выполните команду подачи.
firebase functions:config:get > .runtimeconfig.json
Если вы используете Windows Powershell, замените вышеуказанное на:
firebase functions:config:get | ac .runtimeconfig.json
Вы можете узнать больше в https://firebase.google.com/docs/functions/local-emulator
Ответ 2
Для тех, кто хочет использовать переменные среды (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
Прочитайте конфиг и сначала обновите переменные 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];
}
Ответ 3
Я не уверен, что ответ с самым высоким рейтингом работает или нет, но для функции firebase на Mac (для локального обслуживания) я делаю что-то вроде этого
npm run admin-keys && export dev=true && firebase emulators:start
Где находятся ключи администратора
"admin-keys": "export GOOGLE_APPLICATION_CREDENTIALS='./.keys/admin.keys.json'"
Это загрузит конфигурацию из .runtimeconfig.json
Для производства вы должны вручную установить его, выполнив что-то вроде этого
firebase functions:config:set facebookCred.secret="something"