You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

whatsapp-web.js配合electron打包为exe后无法运行如何解决?

问题根因

这个问题的核心是打包后Puppeteer依赖的Chromium二进制没有被正确打包,且运行时路径配置错误导致无法启动,按照以下步骤修复即可:

1. 修改package.json的build配置

在原有build字段中新增asarUnpack配置,确保Chromium二进制不被压缩进asar包,能够被Puppeteer正常读取:

{
  "name": "testapp",
  "version": "1.0.0",
  "description": "testapp",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "build": "electron-builder"
  },
  "build": {
    "appId": "com.testapp.test",
    "productName": "testapp",
    "target": "NSIS",
    "asar": true,
    "asarUnpack": [
      "node_modules/puppeteer/.local-chromium/**/*"
    ],
    "nsis" : {
      "oneClick" : true,
      "allowToChangeInstallationDirectory" : false
    }
  },
  "author": "Udayan Basak",
  "license": "ISC",
  "devDependencies": {
    "electron": "^15.3.1",
    "electron-builder": "^22.14.5"
  },
  "dependencies": {
    "whatsapp-web.js": "^1.15.2"
  }
}

2. 动态配置Chromium执行路径

生产环境下Chromium的存放路径和开发环境不同,需要根据运行环境拼接正确的路径,同时删除主进程中多余的ipcRenderer引入(ipcRenderer仅可在渲染进程使用),修改后的核心代码如下:

const { Client } = require('whatsapp-web.js');
const {app, BrowserWindow, ipcMain } = require('electron') 
const path = require('path');

// 拼接Chromium路径
let chromeExecPath;
const chromiumDirName = 'win64-982053' // 请替换为你本地node_modules/puppeteer/.local-chromium下的实际文件夹名称
if (app.isPackaged) {
  // 生产环境从解包的目录读取
  chromeExecPath = path.join(process.resourcesPath, 'app.asar.unpacked', 'node_modules', 'puppeteer', '.local-chromium', chromiumDirName, 'chrome-win', 'chrome.exe');
} else {
  // 开发环境路径
  chromeExecPath = path.join(__dirname, 'node_modules', 'puppeteer', '.local-chromium', chromiumDirName, 'chrome-win', 'chrome.exe');
}

// 初始化客户端时传入puppeteer配置
const client = new Client({
  puppeteer: {
    executablePath: chromeExecPath,
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  }
});

// 原有事件逻辑保持不变
let win;
// 请确保你有创建BrowserWindow的逻辑,此处省略原有窗口创建代码
client.on('qr', (qr) => {
    win.webContents.send("qrcode", qr)
});

client.on('ready', () => {
    win.webContents.send("ready", "ready")
})

3. 排查优化点

  • 调试阶段可以在puppeteer配置中添加headless: false,打包运行后会弹出Chromium窗口,可以直观看到是否有启动报错
  • 若启动时被安全软件拦截,可将Chromium执行路径添加到杀毒软件白名单
  • 首次打包前建议删除node_modules和package-lock.json后重新执行npm install,避免依赖文件缺失

内容的提问来源于stack exchange,提问作者turnamong1452

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:54:04