Как я могу развернуть функцию firebase как «NODE_ENV = development»

Я разрабатываю приложение с моей командой с помощью Firebase и хочу развернуть свое приложение как в среде разработки, так и в рабочей среде.

Чтобы добиться этого, я сделал несколько вещей. (Подробности ниже)
Но NODE_ENV остается установленным как «разработка», когда я развертываю его в приложении функций Firebase. Как я могу развернуть его как «разработку» в firebase?

Это то, что я сделал для достижения своей цели.

  • Создайте еще один проект firebase и функцию для «производства» (используйте текущий проект firebase как «разработку»)
    консоль firebase
  • Отредактируйте файл .firebaserc и установите псевдонимы для моих проектов (для использования команды firebase --use)
    .firebaserc
  • Отдельное приложение RDS Instance и Slack Monitoring
  • Разделяйте файлы .env с помощью .env.dev и .env.prod и используйте секреты на основе NODE_ENV
    установить файлы .env
  • Добавьте скрипт «dev» в package.json для развертывания как «NODE_ENV = development»
    скрипты package.json

Это код, который я написал, чтобы узнать, в какой среде работает мой сервер
node_env console.log
А это из моего журнала действий на github и журнала консоли firebase
Действия на github и журнал консоли firebase

Когда я запускаю свое приложение локально с помощью команды «обслуживать», console.log печатает «разработка», как я и ожидал. Я предполагаю, что команда «firebase deploy» автоматически изменяет мой NODE_ENV на производственный при его развертывании. Или я сделал некоторые ошибки, чтобы сделать это?

Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рекомендуемый способ иметь среду разработки и производства — иметь два отдельных проекта Firebase, которые вы уже используете. Для примера предположим, что у вас есть hyositive-app в качестве производственного проекта и hyositive-dev в качестве проекта разработки.

Определение развернутых переменных среды

Использование переменных среды с облачными функциями для Firebase основано на .env файлах, совместимых с пакетом dotenv. По умолчанию поддерживаются следующие файлы (остальные игнорируются!):

Имя Цель .env Переменные среды, общие для всех сред .env.<projectID> Переменные среды, используемые при развертывании в названном проекте (например, .env.hyositive-app) .env.<alias> Переменные среды, используемые при развертывании в проекте с псевдонимом (например, .env.dev).
Примечание: default — это единственный псевдоним, настроенный по умолчанию. dev/prod/и т.д. не определены. .env.local Переменные среды, используемые при использовании функций эмуляции в вашей системе с помощью эмулятора Cloud Functions.

Чтобы использовать .env.dev и .env.prod, вам нужно будет определить их как псевдонимы проекта в вашем файле .firebaserc (или вы можете продолжать использовать псевдонимы development и production и просто обновить имена файлов, чтобы они соответствовали):

{
  "projects": {
    "default": "hyositive-dev",
    "dev": "hyositive-dev",
    "prod": "hyositive-app"
  }
}

Это позволит вам использовать .env.dev и .env.prod вместо .env.hyositive-dev и .env.hyositive-app соответственно.

Использование переменных среды

Среда выполнения облачных функций (процесс, который запускает развернутый код) определяет ряд встроенных переменных среды, которые имеют различные цели (например, позволяют использовать initializeApp() без аргументов).

В дополнение к этим переменным среда выполнения также определяет несколько переменных, зависящих от языка, чтобы упростить развертывание кода. Однако в документации Cloud Functions указано, что нельзя полагаться на их значения, если только вы сами не установите значения.

Среда выполнения облачных функций Node.js построена с использованием Cloud Functions Framework (однако не гарантируется полное соответствие этой версии с открытым исходным кодом). Поскольку эта среда выполнения выполняется с использованием Node.js и использует другие пакеты, такие как express, она устанавливает NODE_ENV на production, чтобы свести к минимуму неожиданное поведение, зависящее от его значения. Но, как упоминалось выше, на это поведение не следует полагаться, даже если оно вряд ли изменится.

Чтобы заменить NODE_ENV на development, вы должны добавить его в .env.dev, .env.hyositive-dev и/или .env.local (в зависимости от обстоятельств). Точно так же вы также должны определить NODE_ENV как production в .env.prod или .env.hyositive-app (в зависимости от ситуации).

Вместо того, чтобы полагаться на NODE_ENV, я бы рекомендовал определить поведение вокруг другой переменной, над которой у вас есть полный контроль (например, HYOSITIVE_ENV), или сравнить с идентификатором исполняемого проекта, чтобы определить, работает ли он в рабочем проекте или нет.

const PROD_PROJECT_ID = "hyositive-app",
   // DEV_PROJECT_ID = "hyositive-dev",
      PROJECT_ID = JSON.parse(process.env.FIREBASE_CONFIG).projectId,
      isProduction = PROJECT_ID === PROD_PROJECT_ID;

Примечание. В этой другой теме может быть полезная справочная информация.

Вау, спасибо большое! Я многому научился у вас!! Желаю тебе всего самого наилучшего :)

HYOSITIVE 19.11.2022 18:36

Другие вопросы по теме