Vercel部署Next.js应用启动浏览器进程失败问题求助
解决Vercel部署Next.js后Chromium启动失败问题
问题根源
Vercel的Serverless运行环境是精简版Linux系统,缺少Chromium运行所需的系统依赖库(如libnss3.so),导致浏览器进程无法启动。
解决方案
方案1:使用适配Serverless的Chromium包(推荐)
卸载官方puppeteer,改用puppeteer-core搭配chrome-aws-lambda(专为无服务器环境优化的Chromium分发包):
npm uninstall puppeteer npm install puppeteer-core chrome-aws-lambda
修改代码中的浏览器初始化逻辑:
import chromium from 'chrome-aws-lambda'; import puppeteer from 'puppeteer-core'; export async function launchBrowser() { const executablePath = await chromium.executablePath; return puppeteer.launch({ executablePath, args: chromium.args, headless: chromium.headless, ignoreDefaultArgs: ['--disable-extensions'], }); }
此方案会自动使用兼容Vercel环境的Chromium,无需手动处理系统依赖。
方案2:在构建阶段安装缺失依赖
若必须使用官方puppeteer,可在vercel.json中配置构建命令,安装所需系统库:
{ "buildCommand": "apt-get update && apt-get install -y libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libasound2 libpangocairo-1.0-0 && npm run build" }
注意:部分Vercel环境可能限制apt-get执行,此方案优先级低于方案1。
方案3:跳过Puppeteer自动下载
在package.json中添加配置,禁止Puppeteer自动下载本地Chromium:
{ "puppeteer": { "skipDownload": true } }
随后配合chrome-aws-lambda提供的Chromium路径使用,逻辑同方案1。
验证建议
- 避免硬编码本地Chromium路径,全部使用动态获取的路径
- 部署前用
vercel dev命令在本地模拟Vercel环境测试
内容的提问来源于stack exchange,提问作者Grabber
相关产品推荐
相关产品推荐

