如何将Electron应用程序打包成单个可执行文件?

Kee*_*ees 8 executable electron

使用电子打包器我可以为各种架构和平台创建我的JavaScript应用程序的"打包"版本.但是,它不会将每个构建打包为一个我可以分发的单个二进制文件.

在寻找替代品时,我发现了EncloseJs,但它不是免费的(我更喜欢免费的解决方案).

我找到的另一个是电子样板,它只创建一个*.deb,*.app或Windows安装程序,但不是一个可以运行该程序的可执行文件.

是否可以使用Electron创建单个可执行文件?

Kir*_*iya 14

尝试使用electron-builder -p --win. 它将建立生产就绪的.exe. 我做到了electron-builder@21.2.0

对于可发布的构建,您将需要package.json文件中的发布提供程序,请考虑给定的示例。

"build": {
    "appId": "com.trinityinfosystem.electron.exchange.stream",
    "productName": "Accurate",
    "copyright": "Copyright © 2018 Trinity InfoSystem",
    "mac": {
      "category": "public.app-category.utilities",
      "icon": "assets/icon.icns",
      "target": [
        "zip",
        "dmg"
      ],
      "publish": [
        "github"
      ]
    },
    "win": {
      "publisherName": "Trinity InfoSystem",
      "publish": [
        "github"
      ],
      "target": [
        "nsis"
      ]
    },
    "linux": {
      "target": [
        "AppImage",
        "tar.gz"
      ]
    },
    "dmg": {
      "background": "assets/background.png",
      "icon": "assets/icon.icns",
      "title": "Accurate Installer"
    },
    "nsis": {
      "oneClick": false,
      "perMachine": false,
      "allowToChangeInstallationDirectory": true,
      "installerIcon": "assets/icon.ico",
      "installerSidebar": "assets/sidebar.bmp",
      "uninstallerSidebar": "assets/sidebar.bmp",
      "license": "assets/agreement.html",
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true
    },
    "publish": [
      {
        "provider": "github",
        "owner": "vkiranmaniya",
        "repo": "accurate",
        "vPrefixedTagName": true,
        "private": true,
        "releaseType": "draft"
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)

将给定的 pulishing 配置添加到您的 package.json 作为根属性。您将需要在运行构建时导出Github 个人访问令牌(这里是Doc)。

您可以将令牌导出为给定的env变量main.js

process.env.GH_TOKEN = 'YOUR_PERSONAL_ACCESS_TOKEN_HERE';
Run Code Online (Sandbox Code Playgroud)

如果你想使用 GitHub 设置自动更新,你可以使用给定的模块和调用checkForUpdates()方法from main.js

const electron = require("electron");
const updater = require("electron-updater");
const autoUpdater = updater.autoUpdater;

autoUpdater.on('checking-for-update', function () {
    sendStatusToWindow('Checking for update...');
});

autoUpdater.on('update-available', function (info) {
    sendStatusToWindow('Update available.');
});

autoUpdater.on('update-not-available', function (info) {
    sendStatusToWindow('Update not available.');
});

autoUpdater.on('error', function (err) {
    sendStatusToWindow('Error in auto-updater.');
});

autoUpdater.on('download-progress', function (progressObj) {
    let log_message = "Download speed: " + progressObj.bytesPerSecond;
    log_message = log_message + ' - Downloaded ' + parseInt(progressObj.percent) + '%';
    log_message = log_message + ' (' + progressObj.transferred + "/" + progressObj.total + ')';
    sendStatusToWindow(log_message);
});

autoUpdater.on('update-downloaded', function (info) {
    sendStatusToWindow('Update downloaded; will install in 1 seconds');
});

autoUpdater.on('update-downloaded', function (info) {
    setTimeout(function () {
        autoUpdater.quitAndInstall();
    }, 1000);
});

function checkForUpdates(){
    const data = {
        'provider': 'github',
        'owner':    'vkiranmaniya',
        'repo':     'exchange',
        'token':    'YOUR_PERSONAL_TOKEN_HERE'
      };
    autoUpdater.setFeedURL(data);
    autoUpdater.checkForUpdates();
}

function sendStatusToWindow(message) {
    console.log(message);
}

module.exports = {
    checkForUpdates,
}

Run Code Online (Sandbox Code Playgroud)

现在您可以运行该命令electron-build -p --win来构建一个可自动更新的独立 .exe 文件。使用--mac--linux以特定平台为目标进行构建。


Jer*_*yal 8

是的,它(现在)可能.选择任何模块来生成单个exe文件: electron-builder,electron-forgewindows-installer.

  • 这些是设置/安装文件.最初的问题是如何获得单个可执行文件(而不是安装程序).我错过了什么? (5认同)
  • 电子生成器正在为我创建一个可执行文件(不是安装程序)。我可以为 Windows 选择便携式选项。 (3认同)

use*_*760 8

电子单.exe:

electron-builder --win portable
Run Code Online (Sandbox Code Playgroud)

它生成一个.exe!

而且你不需要触摸package.json

更多信息文档


如果electron-builder显示一些错误:

Cannot find module 'fs/promises' Electron JS
Run Code Online (Sandbox Code Playgroud)

使用以下方法降级 Electron Builder:"electron-builder": "22.10.5"或将 NodeJS 升级到 14+ 更多信息请参见此处