Я работаю над проектом, в котором у нас есть уже существующие облачные функции, используемые с Firebase.Мы добавляем небольшой React SPA с использованием облачного хостинга Firebase, и этот SPA будет взаимодействовать с некоторыми из существующих функций публичного облака.
То, как мы работали до сих пор, у нас есть проект разработчика ипроизводственный проект в Firebase.Для облачных функций это работает нормально, у нас есть настройка среды, настроенная с firebase functions:config:set
для различий между серверами prod и dev.
Проблема заключается в том, что размещенный SPA связывается с облачными функциями.Я видел много вопросов о том, как получить доступ к конфигурации среды в размещенном коде, например: Как ссылаться на переменные конфигурации функций Firebase из приложения, размещенного в Firebase? , где ответ кажетсяиметь функции firebase, которые возвращают значения переменных окружения, но для меня это просто перемещает проблему дальше на шаг.Я полностью понимаю, что наличие переменных среды, доступных для этого кода, было бы большой проблемой безопасности, поскольку SPA запускается в браузере.
Единственная конфигурация, специфичная для среды, которая мне действительно нужна для размещенного SPA, - это базовый адрес дляоблачные функции.
например, если в моих облачных функциях у меня есть
const functions = require('firebase-functions');
const express = require('express');
const test = express();
test.on('/hello/:target', (req, res) => {
res.send(`Hello ${req.params.target}`);
})
exports.test = functions.https.onRequest(test);
, то после развертывания эта облачная функция доступна как на https://us -central1-DEV-PROJECT-NAME.cloudfunctions.net/test/hello/world и https://us -central1-PROD-PROJECT-NAME.cloudfunctions.net / test / hello / world .Как лучше всего получить соответствующий корневой URL (https://us -central1-DEV-PROJECT-NAME.cloudfunctions.net или https://us -central1-PROD-PROJECT-NAME.cloudfunctions.net) для проекта, в котором развернут SPA, например,
.Есть ли какой-нибудь глобальный доступ к JS-коду внешнего интерфейса, где я мог бы сделать что-то вроде:
const url = `${__FIREBASE_GLOBALS__.cloudFunctions.baseUrl}/test/hello/${input}`;
И правильно ли определить URL в зависимости от того, в каком проекте размещено размещенное приложение?