2016-01-11 4 views
4

Мы используем electron-packager для распространения и распространения интерфейса нашего веб-приложения. Мы должны иметь возможность передавать в host и port сервера на электронный интерфейс для подключения. Когда мы запускаем через electron main.js --host blah --port 8080, он работает. Как только он упакован, мы запускаем через ./MyApp --host blah --port 8080, и он не работает. Это плохо, потому что мы не хотим, чтобы заказчикам приходилось устанавливать сам электронный/н/мин. Также стоит отметить, что это происходит, если мы упакуем приложение в архив asar или нет.Передать аргументы в отношении применения упакованного электрона

Любые идеи о том, что мы могли бы попробовать, или если мы пытаемся сделать это неправильно?

+0

почему не просто упаковать файл конфигурации с приложением? Я полагаю, что IP-адрес сервера и порт не часто меняются. – marstato

ответ

4

Ну, как вы пытаетесь разобрать командную строку? Что делает process.argv, если вы начинаете с ./MyApp --host blah --port 8080?

В принципе, когда вы запускаете Electron it looks in its resource folder для 'app', 'app.asar' или 'default_app'; когда вы начинаете свое приложение с electron main.js --host blah --port, на самом деле происходит то, что приложение по умолчанию для Electron запущено, что, помимо прочего, parses your command line arguments. Когда вы упаковываете приложение, оно копируется в папку ресурса как «приложение» или «app.asar» и будет запущено непосредственно при запуске MyApp позже. То есть вы начинаете свое приложение двумя принципиально разными способами, и это, вероятно, является источником вашей проблемы.

Чтобы смягчить это, мне нравится связывать свою папку разработки с папкой ресурсов Electron во время разработки; таким образом я могу обойти «default_app» и иметь тот же путь выполнения, независимо от того, упаковано ли приложение.

Сказав это, неважно, в каком направлении вы запускаете приложение, вы должны обязательно проанализировать аргументы командной строки. Для справки, I just set this up в одном из моих приложений с yargs, так что вы определенно сможете заставить это работать.

+0

Это помогло мне подняться на правую ногу (и ваш код, а также спасибо!). Это было 'use .parse (process.argv.slice (1)) вместо .argv, и первый параметр не будет проигнорирован. 'From https://www.npmjs.com/package/yargs. Как только я это сделал, даже мое упакованное приложение смогло получить аргументы. Благодаря! –

0

Я рекомендую вам использовать систему управления аргументами командной строки, например, «minimist».

Вы можете использовать это в JSON: "start": "electron . --srv=server.com --prt=112 --arg3=myarg3"

В вашем main.js вы можете использовать это:

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

console.log(args) 

и вы можете использовать арг в главном файла JavaScript.

Для пакета, вы можете сделать то же самое, но в ярлыке, добавляя myapp.exe --srv=server.com --prt=112 --arg3=myarg3

 Смежные вопросы

  • Нет связанных вопросов^_^