2016-01-11 71 views
4

我們使用electron-packager來捆綁和分發我們的Web應用程序的前端。我們需要能夠將服務器的hostport傳遞給電子前端進行連接。當我們通過electron main.js --host blah --port 8080啓動它的工作。打包後,我們通過./MyApp --host blah --port 8080運行,它不起作用。這很糟糕,因爲我們不希望客戶需要自己安裝electron/npm。另外值得注意的是,無論我們是否將應用程序打包在asar存檔中,都會發生這種情況。將參數傳遞給打包電子應用程序

關於我們可以嘗試的事情的任何想法,或者如果我們試圖以錯誤的方式去解決這個問題?

+0

爲什麼不只是封裝與應用程序配置文件做同樣的事情,但在彈出的快捷,?我想服務器IP和端口不會經常更改。 – marstato

回答

4

那麼你怎麼試圖解析命令行?當您以./MyApp --host blah --port 8080開頭時,process.argv是什麼樣的?

基本上,當您爲'app','app.asar'或'default_app'啓動Electron it looks in its resource folder時;當您使用electron main.js --host blah --port啓動應用程序時,實際發生的情況是Electron的默認應用程序已啓動,其中包括parses your command line arguments。當您打包應用程序時,它會以'app'或'app.asar'的形式複製到資源文件夾中,稍後您將運行MyApp時直接啓動它。也就是說,您以兩種截然不同的方式啓動您的應用程序,這可能是您問題的根源。

爲了緩解這種情況,我喜歡做的是在開發過程中將我的開發文件夾鏈接到Electron的資源文件夾中;這樣,我可以繞過'default_app',並且無論應用程序是否打包,都具有相同的執行路徑。儘管如此,啓動應用程序的方式並不重要,您應該一定能夠解析命令行參數。作爲參考,I just set this up在我的應用程序與yargs之一,所以你應該一定能夠得到這個工作。

+0

這幫助我走上了正確的道路(以及您的代碼,謝謝!)。它是什麼'使用.parse(process.argv.slice(1))而不是.argv並且第一個參數不會被忽略.'來自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文件使用ARGS。

爲包,你可以通過添加myapp.exe --srv=server.com --prt=112 --arg3=myarg3

相關問題