/ / child_process.fork nespúšťa expresný server vo vnútri zbalenej elektrónovej aplikácie - node.js, express, elektron, child-process

child_process.fork nie je spustenie expresného servera v rámci aplikácie balených elektrónov - node.js, express, electron, child-process

Mám elektronickú aplikáciu, v ktorej potrebujem nielen spustiť rozhranie pre používateľa, ale tiež spustiť expresný server, ktorý bude slúžiť súborom pre ľudí pripojených prostredníctvom siete.

Mám všetko funkčné, ak začnem obojeelektrón a expresný server normálne, ale som si celkom istý, že budem potrebovať server bežiaci v inom vlákne, aby som predišiel pomalému rozhraniu a dokonca problémom so serverom.

Z tohto dôvodu som sa pokúsil spustiť svoj expresný server pomocou child_process.fork a fungovalo to, keď som použil npm start, ale keď používam electron-builder Ak chcete vytvoriť .exe, nainštalovaný program nespúšťa expresný server.

Server som sa pokúsil okamžite spustiť pomocou:

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

Skúsil som niekoľko zmien, predponu s __dirname, process.resourcesPath a dokonca aj pevné kódovanie vygenerovanej cesty k súboru; zmena možností vidlice prejsť cwd: __dirname, detached: true a stdio: "ignore"; a dokonca sa pokúsil použiť spawn s process.execPath, s ktorým bude tiež pracovať npm start ale nebude zabalený (zabalí sa (stále otvára nové inštancie mojej aplikácie, zdá sa zrejmé, že aj keď to urobíte)

Poznámka: Ak nemám vidlicu a potrebujem okamžite skript servera, pomocou require("server/mainServer.js") funguje to na zabalenej aplikácii, takže najobľúbenejším problémom nie je samotný výraz.

Poznámka 2: Mám asar: false vyriešiť ďalšie problémy, takže tu nejde o riešenie problémov.

Dal som malý git projekt, aby som ukázal svoj problém:

https://github.com/victorivens05/electron-fork-error

Akákoľvek pomoc bude vysoko cenená.

odpovede:

5 pre odpoveď č. 1

S veľkou pomocou od Samuela Attarda (https://github.com/MarshallOfSound) Bol som schopný tento problém vyriešiť (skutočne ma vyriešil)

Ako povedal:

the default electron app will launch the first file path provided to it
so `electron path/to/thing` will work
in a packaged state, that launch logic is not present
it will always run the app you have packaged regardless of the CLI args passed to it
you need to handle the argument manually yourself
and launch that JS file if it"s passed in as the 1st argument
The first argument to fork simply calls `process.execPath` with the first
argument being the path provided afaik
The issue is that when packaged Electron apps don"t automatically run the
path provided to them
they run the app that is packaged within them

Inými slovami. fork je vlastne spawn popravený s process.execPath a prvý argument vidlice ako druhý pre trenie.

V zabalenej aplikácii sa stáva, že process.execPath nie je elektrón, ale samotná zabalená aplikácia. Takže, ak sa o to pokúsite spawn, bude aplikácia otvorená znova a znova.

To, čo navrhuje Samuel, bolo implementované takto:

if (process.argv[1] === "--start-server") {
require("./server/mainServer.js")
return
}

require("./local/mainLocal.js")
require("child_process").spawn(process.execPath, ["--start-server"])

Týmto spôsobom sa pri prvom spustení zabalenej aplikácie spustí process.argv[1] bude prázdny, takže server nezačne. Potom vykoná časť elektrónu (v mojom prípade mainLocal) a spustí aplikáciu znova, ale tentoraz absolvovanie argv, Pri ďalšom spustení aplikácie sa spustí server a zastaví sa vykonávanie, takže sa aplikácia znova neotvorí, pretože sa nikdy nedosiahne.

Obrovské vďaka Samuelovi.