Firebase-tools: Загрузка пакета firebase.json 'functions.ignore'

Созданный на 15 авг. 2019  ·  3Комментарии  ·  Источник: firebase/firebase-tools

НЕ УДАЛЯТЬ validate_template=true template_path=.github/ISSUE_TEMPLATE/bug_report.md Спасибо за участие в сообществе Firebase! md5-cd82511516d4d120ac6f38b938897bc8 Да, мы определенно не идеальны! Пожалуйста, используйте этот шаблон и включите минимальную репродукцию при открытии выпуска. Если вы знаете, как решить эту проблему, пожалуйста, создайте запрос на слияние, и мы будем рады его рассмотреть! md5-d1dc1414712186318d009e8257a27e48 Отлично, нам нравится слышать, как мы можем улучшить наши продукты! Однако не используйте этот шаблон для отправки запроса функции. Пожалуйста, отправляйте свои запросы функций по адресу: https://firebase.google.com/support/contact/bugs-features/ md5-a11e3d9ea91af19a593bf84612124e1a У нас их много, и мы рады помочь вам, но GitHub не лучшее место для них, и они будет закрыто. Сначала ознакомьтесь с руководством: https://firebase.google.com/docs/cli/ Если официальная документация не поможет, попробуйте обратиться через наш официальный канал поддержки: https://firebase.google.com/ support/ Дополнительные места для поиска решений или помощи сообщества: - Переполнение стека: https://stackoverflow.com/ - Сообщество Firebase Slack: https://firebase.community/ *Пожалуйста, избегайте дублирования публикаций по нескольким каналам!*

Информация об окружающей среде


firebase-инструменты:

firebase --version
7.2.2


Платформа:
Обе среды разработки MacOS (10.14.6 (18G87)) и Windows 10.

Прецедент


MCVE: шаблон функций Firebase + раздел «functions.ignore» в firebase.json

Действия по воспроизведению

Создайте проект firebase.

Запустите функции инициализации firebase с параметрами по умолчанию и добавьте их в свой новый проект:

firebase init functions

Раскомментируйте пример функции helloWorld в index.js и разверните:

⋊> ~/D/f/functions firebase deploy                                                                                    11:02:38

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (22.95 KB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions

Обратите внимание на размер развернутых упакованных функций (22,95 КБ).

Отредактируйте firebase.json , включив в него раздел functions.ignore:

{
  "functions": {
    "ignore": []
  }
}

Развернуть снова:

⋊> ~/D/f/functions firebase deploy                                                                                    11:03:24

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (9.07 MB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions 

Обратите внимание, что развернутый пакет увеличился с 22,95 КБ до 9,07 МБ .

Ожидаемое поведение

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

Фактическое поведение

Развернутый пакет увеличивается в размере на несколько порядков с 22,95 КБ до 9,07 МБ.

Для справки: размер папки functions , включая локальную папку node_modules , в данном случае составляет 29 МБ. Сама папка node_modules имеет размер 28,9 МБ на диске и примерно 6 МБ в сжатом виде.

Это также влияет на проекты TypeScript, предположительно потому, что проблема возникает после части tsc .

Комментарий

Я еще не нашел хорошей/окончательной документации для файла конфигурации firebase.json и, в частности, для раздела functions . Некоторая документация по разделу hosting есть здесь . Мое понимание структуры/использования functions.ignore в настоящее время основано на https://github.com/firebase/firebase-tools/issues/291#issuecomment -322526710.

Существует связанная проблема № 429, где @laurenzlong указывает, что раздел ignore должен быть рабочим/исправленным.

Открытый вопрос

Где развернутый пакет создается локально перед развертыванием? Я запускал с --debug и не смог определить какие-либо полезные пути к файлам.

Спасибо!

Спасибо за рассмотрение! И мой тарифный план привязки телефона благодарит вас за решение этой проблемы, так как мой текущий проект развертывания составляет ~ 55 МБ, прежде чем я понял, что происходит :)

Самый полезный комментарий

Поведение, которое вы описали, - это поведение, которое я ожидал.

Документация не описывает functions.ignore , как вы указали; однако он используется CLI .

Неофициально (поскольку это _недокументировано_), firebase.ignore по умолчанию имеет значение ["node_modules"] . Это позволяет нам ограничить количество материалов, которые мы должны загрузить во время развертывания (которое, как вы можете себе представить, может очень быстро стать очень большим). Установив firebase.ignore в package.json , он сообщает CLI, что _nothing_ следует игнорировать. Теперь папка node_modules включена в архив и отправлена ​​в Functions.

Чтобы ответить на ваш вопрос: при высокоуровневом описании процесса CLI не создает пакет локально. Делает примерно следующее:

  1. Запускает любой скрипт перед развертыванием для функций (также указанный в firebase.json ).
  2. Разбирает исходный код на наличие функций для развертывания.
  3. Архивирует исходный код (обычно игнорируя node_modules ) и загружает его в Functions.

Как только исходный код загружен, инфраструктура Функций запускает npm install для package.json , и исходный код готов к работе и обслуживанию пользователей (по крайней мере, в этом сверхсложном объяснении).

Я надеюсь, что это отвечает на ваши вопросы. Но поскольку здесь нет ошибки, связанной с CLI, я собираюсь закрыть эту проблему.

Все 3 Комментарий

Поведение, которое вы описали, - это поведение, которое я ожидал.

Документация не описывает functions.ignore , как вы указали; однако он используется CLI .

Неофициально (поскольку это _недокументировано_), firebase.ignore по умолчанию имеет значение ["node_modules"] . Это позволяет нам ограничить количество материалов, которые мы должны загрузить во время развертывания (которое, как вы можете себе представить, может очень быстро стать очень большим). Установив firebase.ignore в package.json , он сообщает CLI, что _nothing_ следует игнорировать. Теперь папка node_modules включена в архив и отправлена ​​в Functions.

Чтобы ответить на ваш вопрос: при высокоуровневом описании процесса CLI не создает пакет локально. Делает примерно следующее:

  1. Запускает любой скрипт перед развертыванием для функций (также указанный в firebase.json ).
  2. Разбирает исходный код на наличие функций для развертывания.
  3. Архивирует исходный код (обычно игнорируя node_modules ) и загружает его в Functions.

Как только исходный код загружен, инфраструктура Функций запускает npm install для package.json , и исходный код готов к работе и обслуживанию пользователей (по крайней мере, в этом сверхсложном объяснении).

Я надеюсь, что это отвечает на ваши вопросы. Но поскольку здесь нет ошибки, связанной с CLI, я собираюсь закрыть эту проблему.

Спасибо за информацию @bkendall.

Основываясь на № 291, я ошибочно подумал, что CLI _всегда_ исключает node_modules и что содержимое functions.ignore является аддитивным. Добавление явного шаблона для node_modules делает то, что вы описываете.

@bkendall Почему бы не задокументировать это?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги