【问题标题】:Packaging Electron + Puppeteer to a .exe将 Electron + Puppeteer 打包到 .exe
【发布时间】:2021-02-23 21:55:22
【问题描述】:

您好,我有一个运行 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"
  }
}

谢谢,我真的希望有人能帮助我解决这个问题! :)

【问题讨论】:

    标签: node.js electron puppeteer chromium electron-packager


    【解决方案1】:

    您可能需要将 Chromium 与您的应用程序分开打包。至少在尝试使用 pkg 之类的东西打包节点应用程序时,您会这样做。

    您可以在启动浏览器实例时从自定义安装路径在 puppeteer 中加载 chromium。因此,您需要在代码中指定该路径并确保您的打包应用能够读取该路径。

    然后,您的分发文件(可能是存档)将具有 puppeteer 需要的 chromium 版本,与实际的应用程序 exe 分开

    在这里查看类似的讨论

    https://github.com/vercel/pkg/issues/204

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 2018-03-14
      • 2022-12-05
      • 2019-08-06
      • 2021-10-14
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多