Vercel部署Node.js应用遇Puppeteer '找不到Chromium'错误如何解决?
解决Vercel部署中capture-website找不到Chromium的问题
核心原因
Vercel的Serverless运行环境默认不包含Chromium,且默认缓存目录(/home/sbx_userxxx/.cache/puppeteer)无写入权限或不存在,导致Puppeteer无法找到预下载的浏览器文件。
具体解决方案
1. 配置环境变量强制下载Chromium并指定缓存目录
在Vercel项目的环境变量设置中添加以下两个变量:
PUPPETEER_SKIP_DOWNLOAD=false:确保安装依赖时自动下载ChromiumPUPPETEER_CACHE_DIR=/tmp/puppeteer:将Chromium缓存到Vercel允许写入的/tmp目录
2. 修改代码配置capture-website的Puppeteer启动参数
调用captureWebsite时,传入puppeteerLaunchOptions配置,适配Vercel的无头环境:
const captureWebsite = require('capture-website'); async function takeScreenshot() { await captureWebsite.file('https://example.com', 'screenshot.png', { puppeteerLaunchOptions: { args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--single-process' ], executablePath: process.env.PUPPETEER_EXECUTABLE_PATH } }); }
3. 可选:在package.json中添加postinstall脚本
如果环境变量配置后仍未生效,可在package.json的scripts中添加脚本,确保安装依赖时完成Chromium下载:
"scripts": { "postinstall": "npx puppeteer install" }
4. 检查Vercel构建配置
确保Vercel的构建命令使用npm install,避免使用跳过依赖安装的命令,同时确认构建过程中未忽略node_modules相关文件。
内容的提问来源于stack exchange,提问作者ChristosDg
相关产品推荐
相关产品推荐

