Ricerca nel sito web

javascript - Passare argomenti all'applicazione electron pacchettizzata


Stiamo usando electron-packager per raccogliere e distribuire il front-end della nostra applicazione web. Abbiamo bisogno di poter passare il host e la port del server al front-end di Electron per la connessione. Quando lanciamo tramite electron main.js --host blah --port 8080 funziona. Una volta che è impacchettato, eseguiamo tramite ./MyApp --host blah --port 8080 e non funziona. Questo è un problema perché non vogliamo che i clienti debbano installare Electron/npm. Vale anche la pena notare che questo succede sia che impacchettiamo l'app in un archivio asar sia che non lo facciamo.

Avete idee su cose che potremmo provare, o se stiamo cercando di affrontare questo nel modo sbagliato?

Risposta n. 1

Bene, come stai cercando di analizzare la riga di comando? A cosa assomiglia process.argv quando inizi con ./MyApp --host blah --port 8080?

Fondamentalmente, quando avvii Electron, esso cerca nella sua cartella delle risorse 'app', 'app.asar' o 'default_app'; quando avvii la tua app con electron main.js --host blah --port, ciò che accade realmente è che viene avviata l'app predefinita di Electron che, tra le altre cose, analizza i tuoi argomenti della riga di comando. Quando confezioni la tua app, essa viene copiata nella cartella delle risorse come 'app' o 'app.asar' e sarà avviata direttamente quando eseguirai MyApp in seguito. Cioè, stai avviando la tua app in due modi fondamentalmente diversi e questo è probabilmente la causa del tuo problema.

Per mitigare questo, ciò che mi piace fare è collegare la mia cartella di sviluppo nella cartella delle risorse di Electron durante lo sviluppo; in questo modo posso bypassare 'default_app' e avere lo stesso percorso di esecuzione sia che l'app sia impacchettata o meno.

Detto questo, non importa con quale metodo avvii l'app, dovresti sicuramente essere in grado di analizzare gli argomenti della riga di comando. Per riferimento, l'ho appena configurato in una delle mie app con yargs, quindi dovresti sicuramente riuscire a farlo funzionare.

Risposta n. 2

Ti consiglio di usare un sistema di gestione degli argomenti della riga di comando come, per esempio, "minimist".

Puoi usare questo nel tuo json: "start": "electron . --srv=server.com --prt=112 --arg3=myarg3"

Nel tuo main.js puoi usare questo:

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

console.log(args)

e puoi usare i tuoi argomenti nel file principale JavaScript.

Per il pacchetto, puoi fare la stessa cosa ma nella scorciatoia, aggiungendo myapp.exe --srv=server.com --prt=112 --arg3=myarg3