如何在electron中传递命令行参数

22

我刚开始使用 electron。当我使用 "npm start" 运行 electron 时,我有一个关于如何传递命令行参数到 electron 的疑问。

Node.js 中,我使用以下命令:

node server.js one two=three four

用于命令提示符:

var arguments = process.argv.slice(2);
arguments.forEach(function(val,index, array) {
  console.log(index + ': ' + val);
}); 

Node.js 中可以正常运行,我想知道如何在 electron 中使其工作。

有人能给出解决方案吗?


2
那是正确的方法,只有你会执行 electron . one two=three four - justin.m.chase
2个回答

20

传递参数的方式不变,唯一需要注意的是electron的路径。在package.json中写着npm start将执行electron main.js。因此,您必须显式地执行此命令,并使用"正确的electron路径"传递参数,即./node_modules/.bin/electron。然后命令将为:

./node_modules/.bin/electron main.js argv1 argv2

如果您希望访问这些参数,可以通过 main.js 中的 process.argv 访问。

如果您希望在应用程序中访问这些参数,则需要执行以下操作:

1. 在 main.js 中定义一个变量,例如:

global.sharedObject = {prop1: process.argv};

2. 在您的应用程序中,只需包含远程并使用此 sharedObject

const remote = require('electron').remote;
const arguments = remote.getGlobal('sharedObject').prop1;

console.log(arguments);

输出结果将是["argv1", "argv2"]

16
你可以直接使用 require('electron').remote.process.argv 来获取主进程的参数。 - Kevin Sawicki
1
在GUI中调用远程时要小心,这可能会被用作漏洞利用。您的系统API从此处暴露出来。最佳实践是在主进程中访问它们,然后将其存储到全局变量中,或使用IPC事件将其推送到GUI中。还要注意,参数应该是不可变的。最好不要更改它们,如果必须使用不同的变量,例如全局变量中的变量。 - 1-14x0r
4
在我的情况下,使用 Electron v10.x 版本时,主进程报错 remote 未定义。我通过安装 Electron 的进程 https://www.electronjs.org/docs/api/process 来访问 CLI 参数,您可以在主进程中通过 const process = require('process');args = process.argv 访问参数。 - Nuryagdy Mustapayev

2

你需要使用--npm的参数与应用程序的参数分开。这是在POSIX(Unix、Linux等)中相当常见的习语。

npm start -- one two=three four

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接