yandex-cloud / docs

Yandex Cloud documentation
https://cloud.yandex.ru/docs
Creative Commons Attribution 4.0 International
227 stars 647 forks source link

Node runtime ESM Support #730

Open r34son opened 7 months ago

r34son commented 7 months ago

В документации описан процесс управления зависимостями https://yandex.cloud/ru/docs/functions/lang/nodejs/dependencies

В другом ишью выснили, что для поддержки ESM синтаксиса можно обойтись использованием "type": "module" в package.json https://github.com/yandex-cloud/docs/pull/282#issuecomment-2017710426

Получается неприятная ситуация:

В архиве есть уже все нужные пакеты в папке node_modules, но добавив в package.json "type": "module" - Cloud Functions начинает устанавливать пакеты и упирается в лимит по памяти https://yandex.cloud/ru/docs/functions/concepts/limits

Как вариант можно попробовать вычистить все кроме "type": "module" в package.json, но это все танцы с бубном, которых хотелось бы избежать.

r34son commented 7 months ago

Для наглядности приложу пример создания архива с кодом функции (использую terraform). Мне приходится исключать package.json из архива, чтобы не упереться в лимиты (тут проблема возможна не только в лимитах, но и в пакетном менеджере отличном от npm). Не хочется тут еще костыли придумывать, чтобы обойти не понятные ограничения.

image

Какие вижу варианты:

  1. Начать обрабатывать энтрипоинты функций в формате .mjs, что является частью стандарта https://nodejs.org/api/esm.html#enabling. И как это сделано в aws https://docs.amazonaws.cn/en_us/lambda/latest/dg/nodejs-handler.html#nodejs-handler-naming. Могу ошибаться, но кмк доработок требуется минимально.
  2. Усовершенствовать процесс работы с зависимостями. (хочется иметь возможность использовать пакетные менеджеры помимо npm)