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é:
/opt
./opt/nodejs/node_modules/puppeteer
Existe.NODE_PATH
Inclut correctement /opt/nodejs/node_modules
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.