web-dev-qa-db-ja.com

Electronアプリを単一の実行可能ファイルにパッケージ化する方法は?

Electron-packagerを使用して、さまざまなアーキテクチャーおよびプラットフォーム用のJavaScriptアプリケーションの「パッケージ化された」バージョンを作成できます。しかし、それは私が配布できる単一のバイナリとして各ビルドをパッケージ化しません。

代替案を探すとき、私は EncloseJs について知りましたが、それは無料ではありません(そして私は無料のソリューションを好みます)。

別に見つけたのは electron-boilerplate で、*。deb、*。app、またはWindowsインストーラーのみが作成され、プログラムを実行する単一の実行可能ファイルは作成されません。

Electronを使用して単一の実行可能ファイルを作成することは可能ですか?

12
Kees

それほどではありませんが、それで問題ありません。

実行可能ファイルのみで構成されるデスクトップアプリはたくさんあるとは思いません。通常、多くのリソースファイルがあります。 Electronもまったく同じです。Electronを起動する「単一の実行可能ファイル」と多くの追加ファイルが付属しています。 electron-packagerを使用すると、アプリを起動する単一の実行可能ファイルが取得されますが、それは多くのリソースファイル(JavaScriptコードなど)にバンドルされています。なんらかのビンパッカーを使用してすべてを1つのバイナリにバンドルできると思いますが、なぜそれをしたいのですか?ほとんどのアプリは多くのファイルとフォルダーで構成されており、問題はありません。

0
inukshuk

うん、それは(今)可能です。いずれかのモジュールを選択して、単一のexeファイルを生成します: electron-builderelectron-forge または windows-installer

9
JerryGoyal

_electron-builder -p --win_を使用してみてください。本番用の_.exe_を構築します。 _[email protected]_でやった

公開可能なビルドの場合、_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"
      }
    ]
  },
_

与えられたpulishing設定をrootプロパティとしてpackage.jsonに追加します。ビルドの実行中にGithubパーソナルアクセストークン(ここでは Doc )をエクスポートする必要があります。

与えられたように、トークンを_main.js_からenv変数としてエクスポートできます。

_process.env.GH_TOKEN = 'YOUR_PERSONAL_ACCESS_TOKEN_HERE';
_

GitHubを使用してAutoUpdateを設定する場合は、指定されたモジュールを使用して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,
}

_

これで、コマンド_electron-build -p --win_を実行して、自動更新可能なスタンドアロン.exeファイルをビルドできます。 _--mac_または_--linux_を使用して、ビルドの特定のプラットフォームをターゲットにします。

6
Kiran Maniya

新しいソリューションがあるかどうかはわかりませんが、 BoxedApp を使用できますが、購入する必要がありましたが、無料バージョンを検索できます。

WinRAR を使用することもできます。プロジェクトはSFXアーカイブを作成することによって単一のexeにパックされます。これは WinRARを使用してポータブルアプリケーションを作成する方法 のビデオです。

CONS:アプリケーションの起動に時間がかかります。

注:上記の方法を使用する前に、まずプロジェクトをパックする必要があります。

PS:Windowsでのみテストされました。

この助けを願っています。

1
Polar