找不到模块“木偶操纵者”

log*_*icy 9 node.js webpack aws-lambda serverless-framework serverless-webpack-plugin

在 AWS Lambda/NodeJS 运行时中,我尝试从绝对路径 ( /opt/nodejs/node_modules/puppeteer)导入。

Source 在本地运行良好,但是,一旦与 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"]}
Run Code Online (Sandbox Code Playgroud)

我检查过:

  • AWS Lambda 层安装在/opt.
  • 路径/opt/nodejs/node_modules/puppeteer确实存在。
  • NODE_PATH 正确包括 /opt/nodejs/node_modules

Abd*_*ssi 18

save在将 zip 上传到 Amazon 之前,您必须安装带有标志的模块:

npm i puppeteer --save
Run Code Online (Sandbox Code Playgroud)


log*_*icy 9

npm i --save puppeteer导致包太大。(Lambda 最大 50MB。)

因此,相反,puppeteer 安装了npm i --save-dev puppeteer --ignore-scripts. (忽略脚本以防止安装 Chromium。)serverless-webpack必须告知插件在其包装中忽略 puppeteer。(否则 puppeteer 会使包膨胀。)

puppeteer 模块被放在一个层中(在问题中提到的文件夹结构中),require('puppeteer')现在可以工作了。