在AWS Lambda运行Puppeteer报错:无法找到指定模块
解决AWS Lambda中Puppeteer模块找不到的问题
错误原因
你遇到的Cannot find module '/app/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser'错误,核心是chrome-aws-lambda与puppeteer-core版本不兼容:
- chrome-aws-lambda@10.1.0基于旧版Puppeteer(v10)开发,内部依赖的模块路径是旧版结构
- 你安装的puppeteer-core@21.1.1是高版本,模块目录结构已大幅调整,旧版chrome-aws-lambda无法识别新路径
解决方案
方案一:降级puppeteer-core到兼容版本
- 修改
package.json中的puppeteer-core版本为与chrome-aws-lambda@10.1.0匹配的v10.x版本:"dependencies": { "chrome-aws-lambda": "^10.1.0", "handlebars": "^4.7.8", "node-fetch": "2.7.0", "puppeteer-core": "^10.4.0" } - 删除本地的
node_modules文件夹和package-lock.json文件 - 重新安装依赖:
npm install - 重新测试代码
方案二:改用维护中的替代包(推荐)
原chrome-aws-lambda已停止维护,官方推荐使用@sparticuz/chromium,它支持最新版Puppeteer:
- 卸载旧依赖:
npm uninstall chrome-aws-lambda puppeteer-core - 安装兼容的新版本(npm会自动匹配对应版本):
npm install @sparticuz/chromium puppeteer-core - 修改代码中的引入和初始化逻辑:
注意:新版const chromium = require("@sparticuz/chromium"); const puppeteer = require("puppeteer-core"); const generateImg = async (reviewId) => { let browser = null; let result = null; try { const executablePath = await chromium.executablePath(); browser = await puppeteer.launch({ args: chromium.args, executablePath: executablePath, headless: chromium.headless, }); const page = await browser.newPage(); await page.goto("https://www.example.com"); result = await page.screenshot(); } catch (error) { console.error("Error:", error); } finally { if (browser !== null) { await browser.close(); } } return result; };@sparticuz/chromium的executablePath是函数,需要调用await chromium.executablePath()而非直接访问属性。
额外提示
本地测试时,如果遇到浏览器启动失败,可临时安装完整的puppeteer包(代替puppeteer-core),它会自动下载对应版本的Chrome浏览器,方便本地调试:
npm install puppeteer --save-dev
内容的提问来源于stack exchange,提问作者Harshana
相关产品推荐
相关产品推荐

