web-dev-qa-db-ja.com

モジュール「操り人形師」が見つかりません

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レイヤーは_/opt_にマウントされます。
  • パス_/opt/nodejs/node_modules/puppeteer_は存在します。
  • _NODE_PATH_は_/opt/nodejs/node_modules_を正しく含みます
4
logicalicy

ZipをAmazonにアップロードする前に、saveフラグを使用してモジュールをインストールする必要があります。

npm i puppeteer --save

_npm i --save puppeteer_は、パッケージが大きすぎます。 (ラムダの場合は最大50MB。)

そのため、代わりに、puppeteerは_npm i --save-dev puppeteer --ignore-scripts_でインストールされました。 (Chromiumがインストールされないようにスクリプトを無視します。)_serverless-webpack_プラグインは、パッケージ内のpuppeteerを無視するように指示する必要がありました。 (そうでなければ、操り人形師はパッケージを膨らませます。)

Puppeteerモジュールは(質問で言及されたフォルダー構造の)レイヤーに配置され、require('puppeteer')が機能するようになりました。

5
logicalicy