node.js - 将Electron + Puppeteer打包为.exe

标签 node.js electron puppeteer chromium electron-packager

嗨,我有一个正在运行Puppeteer的Electron应用程序(具体来说,它是puppeteer-cluster)。我希望能够将此应用程序打包到一个可以分发的.exe文件中。
不过,其中一项要求是,我必须能够将其与--asar打包在一起。
这是我尝试但失败的一些内容:
我尝试设置可执行文件路径:

let ChromiumPath = path.join(__dirname, "..", "..", "..",".local-chromium", "win64-809590", "chrome-win","chrome.exe");

const cluster = await Cluster.launch({
          puppeteer,
          concurrency: Cluster.CONCURRENCY_BROWSER,
          maxConcurrency: arg.length,
          timeout: 340000,
          puppeteerOptions: {
            args: browserArgs,
            headless: false,
            ignoreHTTPSErrors: true,
            executablePath : ChromiumPath
          },
          perBrowserOptions: perBrowserOptions,
      });
我尝试在package.json中指定解压缩目录
"config": {
    "forge": {
      "packagerConfig": {
        "asar": {
          "unpack": "**/node_modules/puppeteer/.local-chromium/**/*"
        }
      }.....
这是我打包我的应用程序的方式:electron-packager . --asar如果需要,这是我的package.json:
{
  "name": "testBrowsers",
  "productName": "testBrowsers",
  "version": "1.0.0",
  "description": "IDk",
  "main": "src/index.js",
  "scripts": {
    "start": "electron-forge start",
    "package": "electron-packager ./ testBrowsers --platform=win32  --arch=x64 --icon=./tool.ico --out=./dist --electron-version=10.1.4 --overwrite",
    "make": "electron-forge make",
    "publish": "electron-forge publish",
    "lint": "echo \"No linting configured\""
  },
  "keywords": [],
  "author": "Otter",
  "license": "MIT",
  "config": {
    "forge": {
      "packagerConfig": {
        "asar": {
          "unpack": "**/node_modules/puppeteer/.local-chromium/**/*"
        }
      },
      "makers": [
        {
          "name": "@electron-forge/maker-squirrel",
          "config": {
            "name": "testBrowsers"
          }
        },
        {
          "name": "@electron-forge/maker-zip",
          "platforms": [
            "darwin"
          ]
        },
        {
          "name": "@electron-forge/maker-deb",
          "config": {}
        },
        {
          "name": "@electron-forge/maker-rpm",
          "config": {}
        }
      ]
    }
  },
  "dependencies": {
    "electron-squirrel-startup": "^1.0.0",
    "proxy-chain": "^0.4.5",
    "puppeteer": "^5.4.1",
    "puppeteer-cluster": "^0.22.0",
    "puppeteer-extra": "^3.1.15",
    "puppeteer-extra-plugin-stealth": "^2.6.5",
    "puppeteer-page-proxy": "^1.2.8",
    "taskkill": "^3.1.0"
  },
  "devDependencies": {
    "@electron-forge/cli": "^6.0.0-beta.54",
    "@electron-forge/maker-deb": "^6.0.0-beta.54",
    "@electron-forge/maker-rpm": "^6.0.0-beta.54",
    "@electron-forge/maker-squirrel": "^6.0.0-beta.54",
    "@electron-forge/maker-zip": "^6.0.0-beta.54",
    "electron": "10.1.4"
  }
}
谢谢,我真的希望有人能帮助我解决这个问题! :)

最佳答案

您可能需要将 Chrome 与您的应用分开包装。至少当您尝试使用pkg之类的程序打包 Node 应用程序时,这就是您要做的。
您可以在启动浏览器实例时从自定义安装路径在puppeteer中加载 Chrome 。因此,在代码中,您将需要指定该路径,并确保打包的应用程序具有读取该路径的能力。
然后,您的发行文件(可能是存档文件)将拥有伪装者所需的Chrome版本与实际的应用程序exe分开。
在这里看看类似的讨论
https://github.com/vercel/pkg/issues/204

关于node.js - 将Electron + Puppeteer打包为.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64794689/

相关文章:

javascript - 静默打印不起作用[Electron JS]

node.js - 在Docker中使用 "npm install"作为开发环境

javascript - Sublime 3 包用于 Jade Syntax Highr、Linting、自动完成等

angular - 如果在查看另一个组件时数据发生更改,则组件DOM不会更新

node.js - 是否可以使用其 contextId 关闭 Puppeteer 浏览器?

javascript - 如何在 node js 中使用 puppeteer 滚动页面 5 分钟(如果之前完成则更短)?

node.js - 在 Puppeteer : element. Children.length 中获取元素的子元素可以工作,但 element.children 返回未定义

javascript - 如何在没有临时变量的情况下扩展方法(猴子补丁)?

node.js - MongoDB:$lookup 返回空数组

node.js - 如何为 Electron 应用程序安装程序设置自定义路径