从Electron生成子节点进程

时间:2017-06-07 06:52:17

标签: node.js electron child-process

我有一个现有的节点脚本,我从CLI运行,如node script.js --args

我正在尝试构建一个Electron应用程序来取代CLI。要运行实际脚本,我可以使用child_process

function run(arg) {
    const script = spawn("node", ["./script.js", "run", "--arg", arg], { cwd: TOOLS_DIR, env: process.env });

    script.stdout.on('data', (data) => {
        console.log(`stdout: ${data}`);
    });

    script.stderr.on('data', (data) => {
        console.log(`stderr: ${data}`);
    });

    script.on('close', (code) => {
        console.log(`child process exited with code ${code}`);
    });
}

但是,只有从我的app文件夹中启动electron时,此功能才有效。当我使用electron-packager运行构建的应用时,run()调用失败并显示错误:

Uncaught Error: spawn node ENOENT

似乎构建的应用程序无法运行node命令。我安装了NodeJS,但是如果我记录process.env.PATH,我注意到构建的应用/usr/local/binnode生活的地方)不在$PATH,但如果我运行{{} 1}}来自我的app文件夹。在任何一种情况下,由于Electron在NodeJS上运行,有一种从Electron应用程序运行节点脚本的简单方法吗?

1 个答案:

答案 0 :(得分:0)

对于感兴趣的任何人,我最终可以通过结合使用fork()(使用Electron打包的NodeJS运行时而不是依赖于客户端计算机上安装的NodeJS)来对它进行工作并修补{{1} }的SELECT * FROM customer WHERE apo_id = '2589'; (以允许env命令本身产生一些命令):

$PATH

不完整的script.js是Electron中的一个已知问题,有一个fix-path库作为解决方案,但是由于某种原因,我无法使其正常工作。