Установка NODE_ENV для функции firebase

Я перемещаю некоторых из моих рабочих firebase-queue в функции Firebase. Я использовал process.env.NODE_ENV, чтобы установить некоторую конфигурацию для рабочих в зависимости от среды, в которой я их запускаю. Есть ли способ установить NODE_ENV для функций при их развертывании. Я понимаю, что рекомендуемый способ предоставления таких параметров конфигурации - через firebase.config.set, который я проверил, работает как ожидалось, но просто хотел проверить, есть ли способ установить NODE_ENV. Когда я пытаюсь распечатать NODE_ENV внутри функции, она всегда устанавливается на production.

Ответ 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)

Вы должны повторно развернуть функции, чтобы сделать новую конфигурацию доступной.