javascript - Send argumenter til pakket Electron-applikasjon
Vi bruker electron-packager for å pakke og distribuere front-end av webapplikasjonen vår. Vi trenger å kunne sende inn host og port til serveren til electron-frontenden for å koble til. Når vi starter via electron main.js --host blah --port 8080 fungerer det. Når det først er pakket, kjører vi via ./MyApp --host blah --port 8080 og det fungerer ikke. Dette er dårlig fordi vi ikke ønsker at kundene skal måtte installere electron/npm selv. Det er også verdt å merke seg at dette skjer uansett om vi pakker appen i et asar-arkiv eller ikke.
Noen ideer om ting vi kunne prøve, eller om vi prøver å gjøre dette på feil måte?
Svar #1
Hvordan prøver du å analysere kommandolinjen? Hvordan ser process.argv ut når du starter med ./MyApp --host blah --port 8080?
I utgangspunktet, når du starter Electron, ser den i ressursmappen sin etter 'app', 'app.asar' eller 'default_app'; når du starter appen din med electron main.js --host blah --port, er det som faktisk skjer at Electrons standardapp startes, som blant annet parser kommandolinjeargumentene dine. Når du pakker appen din, blir den kopiert til ressursmappen som 'app' eller 'app.asar' og vil bli startet direkte når du kjører MyApp senere. Det vil si, du starter appen din på to fundamentalt forskjellige måter, og dette er sannsynligvis kilden til problemet ditt.
For å redusere dette, liker jeg å koble utviklingsmappen min til Electrons ressursmappe under utvikling; på denne måten kan jeg omgå 'default_app' og ha den samme kjøringsbanen enten appen er pakket eller ikke.
Når det er sagt, spiller det ingen rolle hvilken vei du starter appen, du bør definitivt kunne analysere kommandolinjeargumentene. Til referanse, jeg satte nettopp opp dette i en av appene mine med yargs, så du burde definitivt kunne få dette til å fungere.
Svar #2
Jeg anbefaler at du bruker et kommandolinjeargumenthåndteringssystem som for eksempel "minimist".
Du kan bruke dette i din json: "start": "electron . --srv=server.com --prt=112 --arg3=myarg3"
I din main.js kan du bruke dette:
var args = require('minimist')(process.argv);
console.log(args)
og du kan bruke argumentene dine i hoved JavaScript-filen.
For pakken kan du gjøre det samme, men i snarveien, ved å legge til myapp.exe --srv=server.com --prt=112 --arg3=myarg3
