2

我使用 Electron Packager 包装了一个模块。因为它的计算量很大,所以我把它放在一个子进程中,forkrenderer.js用户单击index.html.

伪代码renderer.js来自:

let cp = require('child_process');
let subprocess;
function log(msg) {
    // A function to log messages sent from subprocess
}
document.querySelector('#create').addEventListener('click', ev => {
  subprocess = cp.fork('./subprocess.js');
  log('A subprocess has been created with pid: ' + subprocess.pid + ' with exexPath = ' + process.execPath);
  subprocess.on('exit', (code, signal) => log(`child process terminated: signal = ${signal} ; code = ${code}`));
  subprocess.on('error', log);
  subprocess.on('message', log);
});

真正的问题是:当我从工作目录中的控制台调用时,这个子进程运行顺利electron ./,但 Electron Packager 生成的构建不会。

子进程不会出现在任务管理器中,或者更确切地说,它一出现就被终止。日志说child process terminated: signal = null ; code = 1

虽然我一开始就subprocess.js用这个来抓uncaughtException

process.on('uncaughtException', (err) => {
   process.send(`Caught exception: ${err}`);
});

日志中没有任何记录。我应该怎么做才能克服这种情况?

系统规格

  • 窗口 10
  • 节点 8.6
  • 电子 1.7.12
  • 电子包装器 10.1.2
4

1 回答 1

0

我也有过这种经历。我想出的一个原因是因为子进程将是电子本身的子进程。就我而言,它不会识别我定义的节点模块。我建议将 spawn 与 spawn 进程一起使用 node.exe。但是一旦你构建了你的应用程序,这将是不切实际的。

于 2018-05-21T07:21:01.703 回答