将参数传递给打包的电子应用程序

Pass arguments to packaged electron application

我们正在使用 electron-packager 来捆绑和分发 Web 应用程序的前端。我们需要能够将服务器的hostport传入electron前端进行连接。当我们通过 electron main.js --host blah --port 8080 启动时它起作用了。打包后,我们通过 ./MyApp --host blah --port 8080 运行 但它不起作用。这很糟糕,因为我们不希望客户需要自己安装 electron/npm。同样值得注意的是,无论我们是否将应用程序打包到 asar 存档中,都会发生这种情况。

关于我们可以尝试的事情有什么想法,或者如果我们试图以错误的方式解决这个问题?

那么你是如何尝试解析命令行的?当您从 ./MyApp --host blah --port 8080 开始时,process.argv 会是什么样子?

基本上,当你启动 Electron 时 it looks in its resource folder for 'app', 'app.asar', or 'default_app'; when you start your app with electron main.js --host blah --port what actually happens is that Electron's default app is started which, among other things, parses your command line arguments。当您打包您的应用程序时,它会以 'app' 或 'app.asar' 的形式复制到资源文件夹中,稍后您 运行 MyApp 时将直接启动。也就是说,您以两种根本不同的方式启动您的应用程序,这很可能是问题的根源。

为了缓解这种情况,我喜欢做的是在开发过程中将我的开发文件夹 link 放到 Electron 的资源文件夹中;这样我就可以绕过 'default_app' 并且无论应用程序是否打包都具有相同的执行路径。

话虽如此,无论您以何种方式启动应用程序,您都应该能够解析命令行参数。作为参考,I just set this up 在我的一个带有 yargs 的应用程序中,所以你绝对应该能够让它工作。

我建议您使用命令行参数管理系统,例如 "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