Настройте каталог развертывания в функциях firebase

У меня есть существующее приложение nodejs, построенное на машинописном тексте.

Существующая структура приложения nodejs выглядит следующим образом

ROOT
 - dist
 - src
  - *.ts
 - test
 - package.json
 - gulpfile.json
 - .env

Вся компиляция идет под dist, и приложение работает нормально.

Я уже использую функции firebase для многих задач и хотел бы использовать их и для этого приложения.

Сейчас я пытаюсь напрямую интегрировать функции firebase внутри этого проекта. Пересмотренная структура

ROOT
 - dist
 - src
  - *.ts
  - workers <firebase functions>
    - index.ts
 - test
 - package.json
 - gulpfile.json
 - .env
 - firebase.json
 - .firebaserc

Чтобы firebase смотрела на правильную папку, я настроил папку в firebase.json так, чтобы она указывала на корневой каталог.

{
  "functions": {
    "source": "."
  }
}

Помимо этого, я внес необходимые изменения в package.json.

{
  ...
  "main": "dist/workers/index.js",
  "engines": {
        "node": "10"
  },
  ...

Эти конфигурации гарантируют, что я могу запускать функции в облачной оболочке.

firebase functions:shell --debug

Проблема заключается в развертывании функции.

firebase deploy --only functions --debug

Развертывание firebase пытается развернуть весь мой каталог, вызывая ошибку 400. Журнал отладки ясно показывает, что размер пакета превышает 300 МБ, по сути упаковывая все ненужные файлы.

Как я могу гарантировать, что развертывание firebase развертывает только необходимые папки.


person Sharath Chandra    schedule 27.07.2020    source источник


Ответы (1)


Интерфейс командной строки Firebase безоговорочно развернет все, что вы указали как источник, за вычетом модулей node_modules, которые будут перестроены облачными функциями с использованием npm install на стороне службы. Невозможно добавить или исключить файлы из этого места.

По умолчанию инициализированный проект Firebase CLI создает папку с именем functions и использует ее в качестве корня для всего вашего кода и конфигурации, связанных с функциями, включая package.json и весь исходный и перенесенный код. Обычно так предполагается организовать проект.

Учитывая это требование, вам, вероятно, следует пересмотреть добавление функций в существующий проект и сохранение кода функций в собственном проекте. Есть способы поделиться кодом между проектами, если это то, что вам нужно, это отдельная тема для исследования.

person Doug Stevenson    schedule 27.07.2020
comment
Спасибо за подтверждение. Да, у меня есть отдельный проект функций, и он работает нормально. Причина, по которой я пытался использовать функции firebase в моем основном репозитории, заключалась в том, чтобы посмотреть, могу ли я использовать уже существующие модели и сервисы. Думаю, единственный выход - разделить сервисы или реструктурировать текущий код аналогично структуре firebase. Есть ли другие альтернативные предложения? - person Sharath Chandra; 27.07.2020
comment
У меня нет ничего конкретного. Используйте свое здравое суждение. - person Doug Stevenson; 27.07.2020