在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"]}
我已检查:
/opt
处。 /opt/nodejs/node_modules/puppeteer
确实存在。NODE_PATH
正确包含/opt/nodejs/node_modules
答案 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