Не могу найти модуль "кукловод"

В среде выполнения AWS Lambda/NodeJS я пытаюсь импортировать по абсолютному пути (/opt/nodejs/node_modules/puppeteer).

Исходный код работает нормально локально, но, когда он входит в пакет Webpack/serverless-webpack и запускается в AWS Lambda, require('puppeteer') результаты в:

{"errorMessage":"Cannot find module 'puppeteer'","errorType":"Error","stackTrace":["webpackMissingModule (/var/task/src/render/handler.js:643:89)","/var/task/src/render/handler.js:643:173","next (native)","step (/var/task/src/render/handler.js:608:191)","/var/task/src/render/handler.js:608:361"]}

Я проверил:

  • AWS Lambda Layer устанавливается на /opt,
  • Путь /opt/nodejs/node_modules/puppeteer существует.
  • NODE_PATH правильно включает /opt/nodejs/node_modules

5 ответов

Вы должны установить свой модуль с save пометка перед загрузкой вашего почтового индекса в Amazon:

npm i puppeteer --save

npm i --save puppeteer приводит к слишком большой упаковке. (Макс. 50 МБ для Lambdas.)

Итак, вместо этого кукловод был установлен с npm i --save-dev puppeteer --ignore-scripts, (Игнорируйте сценарии, чтобы предотвратить установку Chromium.) serverless-webpack Плагин должен был сказать, чтобы игнорировать кукловода в его упаковке. (В противном случае кукловод раздул бы пакет.)

Модуль кукловода был помещен в слой (в структуре папок, упомянутой в вопросе) и require('puppeteer') в настоящее время работает.

Если вы используете stencil.js, он дает очень похожую ошибку. Попробуйте обновить версию ядра трафарета как минимум до"@stencil/core": "^1.15.0"

В командной строке попробуйте

npm install -g npm-check-updates
ncu -u

Попробуйте запустить скрипт, задав переменную окружения $NODE_PATH. Такие как:

      NODE_PATH=/opt/nodejs/node_modules /path/to/bin/node your-file.js

По определенной причине мне пришлось собрать версию узла из исходного кода, не влияя на текущую установку, и этот обходной путь сработал для меня.

У меня есть это решение, основанное на следующем вопросе здесь.

      npm i puppeteer --save

Вы должны установить свой модуль с флагом сохранения перед загрузкой zip

Другие вопросы по тегам