在AWS Lambda(Node.js v18)使用@sparticuz/chromium生成PDF遇模块缺失错误
解决AWS Lambda中无法找到@sparticuz/chromium模块的问题
问题重现
在Node.js v18、x86_64架构的AWS Lambda中,使用@sparticuz/chromium结合Layer生成PDF时,出现错误:
Runtime.ImportModuleError: Error: Cannot find module '@sparticuz/chromium'
Layer的package.json配置:
{ "name": "chrome_layer", "dependencies": { "@sparticuz/chromium": "108.0.1", "puppeteer-core": "18.0.5" } }
Lambda代码片段:
const chromium = require('@sparticuz/chromium') const puppeteer = require('puppeteer-core') const browser = await puppeteer.launch({ args: chromium.args, executablePath: await chromium.executablePath, })
解决方案
1. 确保Layer目录结构符合Lambda规范
AWS Lambda要求Node.js层的依赖必须放在nodejs/node_modules路径下。正确的打包步骤:
- 本地创建
nodejs文件夹 - 在
nodejs内创建上述package.json - 进入
nodejs目录,执行npm install - 将整个
nodejs文件夹压缩为zip文件,上传作为Lambda Layer
2. 安装依赖时指定架构(非Linux环境必做)
若在Windows/macOS环境打包Layer,必须指定Linux x64架构安装依赖,避免二进制文件不兼容:
npm install --platform linux-x64 --arch x64
3. 确认Lambda已正确关联Layer
- 进入Lambda函数控制台,切换到「Layers」标签页
- 检查是否已添加
chrome_layer,且使用的是最新版本的Layer
4. 验证Layer包内容
解压上传的Layer zip文件,确认nodejs/node_modules/@sparticuz/chromium目录存在,且包含完整的包文件。
5. 检查Node.js版本兼容性
当前使用的Node.js v18与@sparticuz/chromium 108.0.1、puppeteer-core 18.0.5版本兼容,无需调整版本。
内容的提问来源于stack exchange,提问作者Volodymyr Zh
相关产品推荐
相关产品推荐

