Я перемещаю некоторых из моих рабочих firebase-queue
в функции Firebase. Я использовал process.env.NODE_ENV
, чтобы установить некоторую конфигурацию для рабочих в зависимости от среды, в которой я их запускаю. Есть ли способ установить NODE_ENV
для функций при их развертывании. Я понимаю, что рекомендуемый способ предоставления таких параметров конфигурации - через firebase.config.set
, который я проверил, работает как ожидалось, но просто хотел проверить, есть ли способ установить NODE_ENV
. Когда я пытаюсь распечатать NODE_ENV
внутри функции, она всегда устанавливается на production
.
Установка NODE_ENV для функции firebase
Ответ 1
Вслед за Google Best practices and reserved environment variables
в их документации
Переменные среды, предоставляемые средой, могут измениться в будущих версиях среды выполнения. Рекомендуется, чтобы вы не зависели и не изменяли переменные среды, которые вы не указали явно.
В основном не используйте NODE_ENV
. Используйте свои собственные переменные среды и установите их соответственно.
ПРИМЕЧАНИЕ. Эта документация взята из облачных функций Google. Функции Firebase похожи на оболочку облачных функций Google. Проверьте этот вопрос
Ответ 2
В настоящее время нет способа установить пользовательские переменные среды, такие как process.env.NODE_ENV
. То, что вы хотите сделать, можно сделать только для функций Google Cloud, и вам нужно использовать gcloud
командной строки gcloud
.
https://cloud.google.com/functions/docs/env-var#accessing_environment_variables_at_runtime
Другие опции
Если вы разрабатываете специально для Firebase и вам нужно подобное решение, то есть варианты.
Условия на основе ID проекта
Вы можете получить доступ к идентификатору проекта, если у вас есть тестовые, промежуточные и производственные проекты, и вы хотите вести себя по-разному или вести журнал в зависимости от среды.
process.env.GCLOUD_PROJECT
установлен идентификатор вашего проекта GCP, поэтому вы можете строить логику на его основе.
if (process.env.GCLOUD_PROJECT === 'my-production-project') {
// Only in production
} else {
// Do something for the test environments
}
Переменные среды облачной функции
Как вы уже упоминали, облачные функции также являются переменными среды. Вы можете эффективно создавать конвейеры сборки, которые конфигурируют конфигурацию вашей среды при сборке/развертывании, а затем получать к ним доступ в своей облачной функции.
- firebase functions:config:set runtime.env="production" --token $FIREBASE_DEPLOY_KEY
Доступ к конфигурации фактически такой же, как и для вашего process.env
но к нему нельзя получить доступ за пределами облачной функции (т.е. Вы не можете использовать ее в объявлении глобальной переменной).
if (functions.config().runtime.env === 'production') {
// Only in production
} else {
// Do something for the test environments
}
Ответ 3
Пока я отвечаю на этот вопрос, Firebase SDK для облачных функций предлагает встроенную конфигурацию среды из коробки.
Установите конфигурацию среды для вашего проекта
$ firebase functions:config:set [values...]
пример
$ firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"
Получить конфигурацию среды для вашего проекта
$ firebase functions:config:get [path]
пример
const functions = require('firebase-functions')
console.log(functions.config().someservice.id)
Вы должны повторно развернуть функции, чтобы сделать новую конфигурацию доступной.