child_process.fork startet keinen express-server innerhalb der paketierten elektronik-app

8

Ich habe eine Elektronen-App, bei der ich nicht nur die Schnittstelle zum Benutzer ausführen, sondern auch einen Express-Server starten muss, der Dateien für Personen bereitstellt, die über das Netzwerk verbunden sind.

Ich habe alles funktioniert, wenn ich sowohl das Elektron als auch den Express-Server normal starte, aber ich bin ziemlich zuversichtlich, dass ich den Server in einem anderen Thread laufen lassen muss, um eine schlüssige Schnittstelle und sogar Probleme mit dem Server zu vermeiden.

Dafür habe ich versucht, meinen express-Server mit der child_process.fork zu starten, und es funktionierte, wenn ich npm start verwende, aber wenn ich electron-builder verwende, um eine .exe zu erstellen, startet das installierte Programm den Express nicht Server.

Ich habe versucht, meinen Server sofort zu starten mit:

require('child_process').fork('app/server/mainServer.js')

Ich habe mehrere Änderungen versucht, indem ich der Datei __dirname , process.resourcesPath voranstellte und sogar den generierten Dateipfad hart codierte; Ändern der Fork-Optionen zum Übergeben von cwd: __dirname , detached: true und stdio: 'ignore' ; und versuchte sogar, spawn mit process.execPath zu verwenden, was auch mit npm start funktioniert, aber nicht beim Packen (es öffnet immer neue Instanzen meiner App, scheint offensichtlich, nachdem du hehe)

Hinweis: Wenn ich nicht forkiere und das Server-Skript sofort benötige, funktioniert die Verwendung von require('server/mainServer.js') in der gepackten App, daher ist das Problem, das am meisten gefällt, nicht das Express selbst.

Hinweis 2: Ich habe asar: false , um andere Probleme zu lösen, daher ist dies hier nicht der Problemlöser.

Ich habe ein kleines Git-Projekt hochgeladen, um mein Problem zu zeigen:

Ссылка

Jede Hilfe wird sehr geschätzt.

    
Victor Ivens 03.10.2017, 22:55
quelle

1 Antwort

2

Mit der großen Hilfe von Samuel Attard ( ​​Ссылка ) konnte ich das Problem lösen (er löste sich tatsächlich für mich)

>

Wie er sagte:

%Vor%

Mit anderen Worten. fork ist eigentlich spawn wird mit process.execPath ausgeführt und übergibt das erste Argument der Verzweigung als zweites für den Spawn.

Was in einer verpackten App passiert, ist, dass process.execPath kein Elektron ist, sondern die verpackte App selbst. Wenn Sie also spawn versuchen, wird die App immer wieder geöffnet.

Also, was Samuel vorgeschlagen hat, wurde so umgesetzt:

%Vor%

Auf diese Weise wird das process.argv[1] beim ersten Ausführen der gepackten App leer sein, sodass der Server nicht gestartet wird. Es führt dann den Elektronenteil (in meinem Fall mainLocal) aus und startet die App über, aber dieses Mal übergibt es argv . Beim nächsten Start der App wird der Server gestartet und die Ausführung gestoppt. Die App wird daher nicht mehr geöffnet, da der Spawn nie erreicht wird.

Vielen Dank an Samuel.

    
Victor Ivens 06.10.2017, 14:32
quelle