javascript - Pasar argumentos a una aplicación Electron empaquetada
Estamos usando electron-packager para empaquetar y distribuir el front-end de nuestra aplicación web. Necesitamos poder pasar el host y el port del servidor al front-end de Electron para conectarnos. Cuando lo lanzamos mediante electron main.js --host blah --port 8080, funciona. Una vez empaquetado, lo ejecutamos mediante ./MyApp --host blah --port 8080 y no funciona. Esto es malo porque no queremos que los clientes necesiten instalar Electron/npm ellos mismos. También vale la pena mencionar que esto ocurre tanto si empaquetamos la aplicación en un archivo asar como si no.
¿Alguna idea sobre cosas que podríamos intentar, o si estamos tratando de abordar esto de la manera equivocada?
Respuesta #1
Bueno, ¿cómo estás tratando de analizar la línea de comandos? ¿Cómo se ve process.argv cuando comienzas con ./MyApp --host blah --port 8080?
Básicamente, cuando inicias Electron, busca en su carpeta de recursos 'app', 'app.asar' o 'default_app'; cuando inicias tu aplicación con electron main.js --host blah --port, lo que en realidad sucede es que se inicia la aplicación predeterminada de Electron que, entre otras cosas, analiza tus argumentos de línea de comandos. Cuando empaquetas tu aplicación, se copia en la carpeta de recursos como 'app' o 'app.asar' y se iniciará directamente cuando ejecutes MyApp más adelante. Es decir, estás iniciando tu aplicación de dos maneras fundamentalmente diferentes y esto probablemente sea la fuente de tu problema.
Para mitigar esto, lo que me gusta hacer es enlazar mi carpeta de desarrollo en la carpeta de recursos de Electron durante el desarrollo; de esta manera puedo evitar 'default_app' y tener la misma ruta de ejecución tanto si la aplicación está empaquetada como si no.
Habiendo dicho eso, no importa de qué manera inicies la aplicación, definitivamente deberías poder analizar los argumentos de la línea de comandos. Como referencia, acabo de configurar esto en una de mis aplicaciones con yargs, así que definitivamente deberías poder hacer que esto funcione.
Respuesta #2
Te recomiendo que uses un sistema de gestión de argumentos de línea de comandos como "minimist", por ejemplo.
Puedes usar esto en tu json : "start": "electron . --srv=server.com --prt=112 --arg3=myarg3"
En tu main.js puedes usar esto:
var args = require('minimist')(process.argv);
console.log(args)
y puedes usar tus argumentos en el archivo principal de JavaScript.
Para el paquete, puedes hacer lo mismo pero en el acceso directo, agregando myapp.exe --srv=server.com --prt=112 --arg3=myarg3
