Website-Suche

javascript - Übergabe von Argumenten an die gepackte Electron-Anwendung


Wir verwenden electron-packager, um das Front-End unserer Webanwendung zu bündeln und zu verteilen. Wir müssen in der Lage sein, den host und den port des Servers an das Electron-Front-End zum Verbinden zu übergeben. Wenn wir es über electron main.js --host blah --port 8080 starten, funktioniert es. Sobald es verpackt ist, führen wir es über ./MyApp --host blah --port 8080 aus, und es funktioniert nicht. Das ist schlecht, weil wir nicht möchten, dass Kunden Electron/npm selbst installieren müssen. Ebenfalls erwähnenswert ist, dass dies passiert, egal, ob wir die App in einem asar-Archiv verpacken oder nicht.

Irgendwelche Ideen für Dinge, die wir ausprobieren könnten, oder ob wir dabei vielleicht den falschen Ansatz verfolgen?

Antwort #1

Nun, wie versuchst du, die Befehlszeile zu analysieren? Wie sieht process.argv aus, wenn du mit ./MyApp --host blah --port 8080 startest?

Grundsätzlich sucht Electron beim Start in seinem Ressourcenordner nach 'app', 'app.asar' oder 'default_app'; wenn Sie Ihre App mit electron main.js --host blah --port starten, wird tatsächlich die Standard-App von Electron gestartet, die unter anderem Ihre Kommandozeilenargumente analysiert. Wenn Sie Ihre App paketieren, wird sie in den Ressourcenordner als 'app' oder 'app.asar' kopiert und direkt gestartet, wenn Sie später MyApp ausführen. Das heißt, Sie starten Ihre App auf zwei grundsätzlich verschiedene Arten, und dies ist vermutlich die Ursache für Ihr Problem.

Um dem entgegenzuwirken, mache ich gerne Folgendes: Ich verlinke meinen Entwicklungsordner während der Entwicklung in den Ressourcenordner von Electron; auf diese Weise kann ich 'default_app' umgehen und habe denselben Ausführungspfad, unabhängig davon, ob die App gepackt ist oder nicht.

Nachdem das gesagt wurde, spielt es keine Rolle, auf welche Weise Sie die App starten, Sie sollten auf jeden Fall in der Lage sein, die Befehlszeilenargumente zu parsen. Zur Referenz: Ich habe dies gerade in einer meiner Apps mit yargs eingerichtet, also sollten Sie auf jeden Fall in der Lage sein, dies zum Laufen zu bringen.

Antwort #2

Ich empfehle Ihnen, ein Kommandozeilen-Argument-Verwaltungssystem wie zum Beispiel „minimist“ zu verwenden.

Sie können dies in Ihrem JSON verwenden: "start": "electron . --srv=server.com --prt=112 --arg3=myarg3"

In deiner main.js kannst du dies verwenden :

var args = require('minimist')(process.argv);

console.log(args)

und du kannst deine Argumente in der Haupt-JavaScript-Datei verwenden.

Für das Paket können Sie dasselbe tun, aber im Shortcut, indem Sie myapp.exe --srv=server.com --prt=112 --arg3=myarg3 hinzufügen