javascript - Transmiterea argumentelor către aplicația electron împachetată
Folosim electron-packager pentru a împacheta și distribui partea de front-end a aplicației noastre web. Trebuie să putem transmite host și port serverului către front-end-ul electron pentru conectare. Când lansăm prin electron main.js --host blah --port 8080 funcționează. Odată ce este împachetat, rulăm prin ./MyApp --host blah --port 8080 și nu funcționează. Acest lucru este rău pentru că nu vrem ca clienții să fie nevoiți să instaleze electron/npm în sine. De asemenea, merită menționat că acest lucru se întâmplă indiferent dacă împachetăm aplicația într-un fișier asar sau nu.
Aveți vreo idee despre lucruri pe care am putea să le încercăm sau dacă încercăm să abordăm acest lucru în mod greșit?
Răspuns #1
Ei bine, cum încerci să analizezi linia de comandă? Cum arată process.argv când pornești cu ./MyApp --host blah --port 8080?
Practic, atunci când pornești Electron, acesta caută în folderul său de resurse pentru 'app', 'app.asar' sau 'default_app'; când pornești aplicația ta cu electron main.js --host blah --port, ceea ce se întâmplă de fapt este că aplicația implicită a Electron este pornită, care, printre altele, analizează argumentele tale din linia de comandă. Când îți împachetezi aplicația, aceasta este copiată în folderul de resurse ca 'app' sau 'app.asar' și va fi pornită direct atunci când rulezi MyApp mai târziu. Cu alte cuvinte, începi aplicația în două moduri fundamental diferite și acest lucru este probabil sursa problemei tale.
Pentru a atenua acest lucru, ceea ce îmi place să fac este să conectez folderul meu de dezvoltare în folderul de resurse al Electron în timpul dezvoltării; în acest fel pot ocoli 'default_app' și am aceeași cale de execuție indiferent dacă aplicația este sau nu împachetată.
Acestea fiind spuse, nu contează modul în care porniți aplicația, ar trebui să fiți cu siguranță capabil să analizați argumentele liniei de comandă. Pentru referință, tocmai am configurat acest lucru într-una dintre aplicațiile mele cu yargs, așa că ar trebui să fiți cu siguranță capabil să faceți să funcționeze.
Răspunsul #2
Îți recomand să folosești un sistem de gestionare a argumentelor din linia de comandă, cum ar fi, de exemplu, "minimist".
Poți folosi asta în json-ul tău: "start": "electron . --srv=server.com --prt=112 --arg3=myarg3"
În fișierul tău main.js poți folosi asta:
var args = require('minimist')(process.argv);
console.log(args)
și poți să folosești argumentele tale în fișierul principal javascript.
Pentru Pachet, poți face același lucru, dar în scurtătură, adăugând myapp.exe --srv=server.com --prt=112 --arg3=myarg3
