You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将Puppeteer Node.js应用打包为Linux/Mac/Windows二进制文件?

我之前也跟你一样,在把Puppeteer Node.js应用打包成跨平台二进制这件事上踩了不少坑!pkg的Chromium路径问题确实头疼,nw.js上手也有门槛,分享几个我亲测有效的解决方案:

可行的Puppeteer打包方案

方案一:优化pkg配置解决Chromium路径问题

pkg打包失败的核心原因是它没法自动处理Puppeteer依赖的Chromium二进制文件,我们可以手动指定路径并把Chromium打包进去:

  • 第一步,在代码里手动设置Chromium的执行路径,适配不同平台:
const path = require('path');
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    // 根据打包后的目录结构调整路径
    executablePath: path.join(__dirname, 'chrome', process.platform === 'win32' ? 'chrome.exe' : 'chrome')
  });
  // 你的业务逻辑...
})();
  • 第二步,找到Puppeteer下载的Chromium文件夹(通常在node_modules/puppeteer/.local-chromium里),把对应平台的版本复制到项目根目录,命名为chrome
  • 第三步,在package.json里添加pkg的assets配置,让它把Chromium文件夹打包进去:
"pkg": {
  "assets": ["chrome/**/*"]
}
  • 最后执行打包命令,指定目标平台(替换成你使用的Node版本):
pkg . --targets node18-linux-x64,node18-macos-x64,node18-win-x64

方案二:用Electron打包(最省心的选择)

Electron本身内置了Chromium,和Puppeteer的兼容性非常好,几乎不会有路径问题:

  • 先初始化Electron项目,把你的Puppeteer逻辑放到Electron的主进程中
  • 安装electron-builder作为打包工具:
npm install electron-builder --save-dev
  • package.json里添加打包配置:
"build": {
  "appId": "com.yourdomain.yourapp",
  "files": ["**/*"],
  "directories": {
    "output": "dist"
  }
}
  • 运行打包命令生成跨平台二进制:
electron-builder --linux --mac --win

这个方法生成的包直接就能用,不需要额外处理Chromium依赖。

方案三:调整nw.js配置实现打包

如果想继续尝试nw.js,关键是复用它内置的Chromium,不用额外打包:

  • 确保nw.js版本和你的Node版本兼容,然后在package.json里指定主入口:
"main": "your-puppeteer-script.js",
"nw": {
  "main": "your-puppeteer-script.js"
}
  • 在代码里把Puppeteer的executablePath设置为nw.js的主程序路径:
const browser = await puppeteer.launch({
  executablePath: process.execPath
});
  • 然后用nw.js的打包工具(比如nw-builder)进行打包,这样就能直接复用nw内置的Chromium,避免路径问题。

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

火山引擎 最新活动