Ubuntu部署Puppeteer报'_launcher' undefined错误如何排查
Puppeteer Ubuntu部署报错排查思路
核心错误原因指向
你遇到的Cannot read properties of undefined (reading '_launcher')错误,本质是launch方法执行时内部上下文丢失,而非系统依赖缺失,按以下优先级排查:
- 第一步:修正Puppeteer导入与调用方式
绝大多数该报错均由错误的导入写法导致,禁止直接解构launch方法调用,必须从puppeteer实例下调用方法:// 正确导入写法(ESModule) import puppeteer from 'puppeteer' // 正确导入写法(CommonJS) const puppeteer = require('puppeteer') // 调用时必须写全puppeteer.launch,不可直接用解构出来的launch this.puppeteerBrowser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); - 第二步:清理环境重新安装依赖
Windows环境安装的Puppeteer携带的是Win平台的Chromium二进制,直接同步到Ubuntu会不兼容,按以下操作重置依赖:- 删除服务器项目目录下的
node_modules文件夹、package-lock.json、yarn.lock文件 - 在Ubuntu虚拟机中重新执行
npm install,自动拉取适配Linux平台的Chromium包
- 删除服务器项目目录下的
- 第三步:检查运行权限配置
你当前使用root用户运行程序,需确认Chromium执行文件权限:
找到node_modules/puppeteer/.local-chromium/下对应Linux版本的chrome可执行文件,执行chmod +x <chrome文件路径>赋予执行权限 - 第四步:最小用例验证
新建测试脚本在服务器直接运行,确认Puppeteer本身可正常启动:
运行const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage(); await page.goto('about:blank'); console.log('启动成功'); await browser.close(); })();node test.js,如果能正常打印启动成功,说明问题出在原有项目的实例管理逻辑(比如你判断this.puppeteerBrowser是否为空的逻辑可能有边界问题),反之则是环境安装问题。
内容的提问来源于stack exchange,提问作者Dana
相关产品推荐
相关产品推荐

