【问题标题】:Pass arguments to packaged electron application将参数传递给打包的电子应用程序
【发布时间】:2016-04-16 08:56:10
【问题描述】:

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

关于我们可以尝试的事情的任何想法,或者我们是否试图以错误的方式解决这个问题?

【问题讨论】:

  • 为什么不直接在应用中打包一个配置文件呢?我想服务器 IP 和端口不会经常改变。

标签: javascript node.js electron atom-editor yargs


【解决方案1】:

那么你是如何尝试解析命令行的?当您以./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 的应用程序中,所以你绝对应该能够让它工作。

【讨论】:

  • 这帮助我站稳了脚跟(还有你的代码,非常感谢!)。它是来自npmjs.com/package/yargsuse .parse(process.argv.slice(1)) instead of .argv and the first parameter won't be ignored.。一旦我这样做了,即使我打包的应用程序也能够获得参数。谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2018-09-08
    • 2012-12-24
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多