Firebase无服务器函数部署Puppeteer Core时卡在浏览器启动
解决Firebase无服务器函数中Puppeteer Core启动卡住的问题
1. 对齐Puppeteer Core与Chromium版本
你当前使用的puppeteer-core@21.3.8对应Chromium 118版本,但@sparticuz/chromium@112.0.0是Chromium 112版本,版本不兼容会直接导致浏览器启动失败。需调整依赖至匹配状态:
方案A:降级Puppeteer Core适配现有Chromium
修改package.json依赖:
"puppeteer-core": "^19.11.1", "@sparticuz/chromium": "^112.0.0"
(Puppeteer 19.x系列对应Chromium 112版本)
方案B:升级Chromium适配现有Puppeteer Core
修改package.json依赖:
"puppeteer-core": "^21.3.8", "@sparticuz/chromium": "^118.0.0"
(@sparticuz/chromium的版本号需与Puppeteer对应Chromium版本完全一致)
2. 调整Firebase函数资源配置
Firebase函数默认的256MB内存、60秒超时不足以支撑Chromium启动,需提升资源配额:
在firebase.json中添加或修改函数配置:
{ "functions": { "runtimeOptions": { "memory": "1GB", "timeoutSeconds": 120 } } }
执行firebase deploy --only functions使配置生效。
3. 优化浏览器启动参数
使用@sparticuz/chromium提供的预定义启动参数,避免手动参数冲突:
const browser = await puppeteer.launch( isLocal ? undefined : { args: chromium.args, executablePath: execPath, headless: chromium.headless, ignoreHTTPSErrors: true, } );
chromium.args包含无服务器环境下的最优启动参数,无需额外添加--disable-gpu等冗余参数。
4. 验证环境分支逻辑
确保生产环境不会误加载本地Puppeteer模块:
- 本地测试时,终端执行
export IS_LOCAL=true后启动函数 - 生产环境中Firebase不会设置该变量,确保分支逻辑正确走向
puppeteer-core和Chromium路径。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

