找不到模块'puppeteer'

时间:2018-12-13 15:16:41

标签: 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"]}

我已检查:

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

4 个答案:

答案 0 :(得分:1)

尝试通过强制环境变量 $NODE_PATH 来运行您的脚本。如:

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

出于特定原因,我必须在不影响当前安装的情况下从源代码构建一个 node 版本,这种解决方法对我有用。

我已经根据以下问题 here 找到了这个解决方案。

答案 1 :(得分:0)

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

npm i puppeteer --save

答案 2 :(得分:0)

npm i --save puppeteer导致程序包太大。 (对于Lambda,最大为50MB。)

因此,puppeteer与npm i --save-dev puppeteer --ignore-scripts一起安装。 (忽略脚本以防止安装Chromium。)必须让serverless-webpack插件忽略其包装中的伪娘。 (否则,操纵up的人会把包裹肿。)

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

答案 3 :(得分:0)

如果您使用的是 stencil.js ,则会出现非常相似的错误。尝试将模具核心版本更新为至少"@stencil/core": "^1.15.0"

在您的shell提示中尝试

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