web-dev-qa-db-fra.com

Impossible de trouver le module «marionnettiste»

Dans un runtime AWS Lambda/NodeJS, j'essaie d'importer à partir d'un chemin absolu (/opt/nodejs/node_modules/puppeteer).

La source s'exécute correctement localement mais, une fois intégrée à Webpack/serverless-webpack et exécutée dans AWS Lambda, require('puppeteer') se traduit par:

{"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"]}

J'ai vérifié:

  • AWS Lambda Layer est monté sur /opt.
  • Le chemin /opt/nodejs/node_modules/puppeteer Existe.
  • NODE_PATH Inclut correctement /opt/nodejs/node_modules
4
logicalicy

Vous devez installer votre module avec le drapeau save avant de télécharger votre Zip sur Amazon:

npm i puppeteer --save

npm i --save puppeteer Donne un package trop volumineux. (Max 50 Mo pour Lambdas.)

Ainsi, à la place, le marionnettiste a été installé avec npm i --save-dev puppeteer --ignore-scripts. (Ignorez les scripts pour empêcher l'installation de Chromium.) Le plugin serverless-webpack A dû être invité à ignorer le marionnettiste dans son emballage. (Sinon, le marionnettiste gonflerait le paquet.)

Le module marionnettiste a été placé dans un calque (dans la structure de dossiers mentionnée dans la question) et require('puppeteer') fonctionne maintenant.

5
logicalicy