Как я могу развернуть функцию 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.info
А это из моего журнала действий на github и журнала консоли firebase
Действия на github и журнал консоли firebase

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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