当我使用 Electron 打包程序打包 Electron 应用程序时。该应用程序生成一个使用“node”命令的子进程。现在,如果我尝试在未安装任何 Node 的系统中启动我的应用程序,那么该应用程序可以工作吗?
我一直在尝试实现这一目标,并面临各种问题, Electron 社区建议我使用fork方法,使用'Process.execPath'作为命令的spawn方法并设置ELECTRON_RUN_AS_NODE变量,但最终似乎没有任何效果。
现在,在完成所有这些工作后,我对自己提出了疑问,是否一定需要在系统上安装 Node 才能运行该应用程序?还是真的有办法将父环境(我相信有 Node )传递给子进程?如果是,我在这里想念什么?
需要注意的是,当从GUI应用程序运行时,我正在使用'fixpath()'在macOS上设置$ PATH。不知道这是否弄乱了我的代码。 https://www.npmjs.com/package/fix-path
请在下面找到我的代码:
'use strict'
const fixPath = require('fix-path');
let func = () => {
fixPath();
const child = childProcess.exec('node scriptPath --someFlags', {
detached: true,
stdio: 'ignore',
env: {
ELECTRON_RUN_AS_NODE: 1,
}
});
child.on('error', (err) => {
console.log("\n\t\tERROR: spawn failed! (" + err + ")");
});
child.stderr.on('data', function(data) {
console.log('stdout: ' +data);
});
child.on('exit', (code, signal) => {
console.log(code);
console.log(signal);
});
child.unref();
}
最佳答案
是的,我们可以运行一个打包的应用程序,即使在没有安装 Node 的系统上,该应用程序也可以运行子 Node 进程。可以通过设置ELECTRON_RUN_AS_NODE env变量来使用“fork”方法来运行 Node 进程。请在下面找到示例代码。
let func = () => {
const child = childProcess.fork(path, args,
{
detached: true,
stdio: 'ignore',
env: {
ELECTRON_RUN_AS_NODE: 1
}
}
});
child.on('error', (err) => {
console.log("\n\t\tERROR: spawn failed! (" + err + ")");
});
child.on('exit', (code, signal) => {
console.log(code);
console.log(signal);
});
child.unref();