Как я могу использовать переменные среды приложения для облачных функций Firebase? - PullRequest
0 голосов
/ 10 ноября 2018

Это приложение Angular CLI, но оно не очень актуально.

У нас есть довольно типичные переменные окружения, в данном случае под

src/environments/environment.ts

или

src/environments/environment.prod.ts

Я только импортирую свою среду, используя

import { environment } from 'environments/environment'

Но если я запускаю «ng build», он использует «environment.ts», а если я запускаю «ng build --prod», он использует «environment.prod.ts»

Чистая магия.

Обожаю!

Но Firebase Cloud Functions - это фактически отдельный проект с отдельным процессом сборки, поэтому независимо от того, что он просто использует «environment.ts», и поэтому я должен помнить, что вручную нужно переключаться на импорт из «environment.prod.ts» каждый время развертывания на производство?

Мне известно об этом: https://firebase.google.com/docs/functions/config-env, но я не понимаю, как это решает вышеуказанную проблему. Может быть, я что-то упускаю, но мне кажется, что мне все равно придется каждый раз переключать свои переменные, используя даже более громоздкий синтаксис команды терминала (может также просто добавить «.prod» к моему импорту).

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

Что мне не хватает? Как я могу автоматизировать переключение?

AskFirebase

1 Ответ

0 голосов
/ 27 ноября 2018

Я наконец нашел способ сделать это.

Оказывается, что в любой момент вы можете получить доступ к имени проекта в функциях с помощью следующего:

const project = process.env.GCP_PROJECT;

В моем случае я создал перечисление для моих двух основных проектов следующим образом:

enum Projects {
    mynametest = 'mynametest',
    mynameprod = 'mynameprod',
}

Я импортировал обе среды, присваивая каждому псевдониму следующее:

import { environment as devEnv } from '../../src/environments/environment';
import { environment as prodEnv } from '../../src/environments/environment.prod';

В рамках соответствующих функций я использовал:

const project = process.env.GCP_PROJECT;
let currentEnv;
if (project === Projects.mynametest) {
    currentEnv = devEnv;
} else if (project === Projects.mynameprod) {
    currentEnv = prodEnv;
} else {
    console.error('No valid environment for <something relevant here>');
    return null;
}
// use "currentEnv.<myVar>" as you would normally use "environment.<myVar>"

Если кто-то найдет лучший и / или более краткий способ об этом, пожалуйста, поделитесь!

...