Дочерний процесс spawn производит TypeError "stdout.on не является функцией" в Electron - PullRequest
0 голосов
/ 02 мая 2020

Как видно из названия, я получаю сообщение об ошибке при попытке создать обработчик события для spawn.stdin.on Uncaught TypeError: spn.stdout.on is not a function. Я использую contextBridge, как показано ниже, и всякий раз, когда я создаю новый объект spawn, он выполняется, но он выдает ошибку при создании обработчиков событий.

preload. js

const {contextBridge, remote} = require('electron');
const spawn = require('child_process').spawn;

contextBridge.exposeInMainWorld(
  'api', {
    spawn: (cmd, args) => {
      return spawn(cmd, args);
    }
  }
);

И функция, которая выдает ошибку.

let spn = undefined;
let running = false;
let finishQueueItem = false;
function startQueue() {
  // if the queue is already running, then return
  if (running) return;

  if (!$q.length > 0) {
    let x = addToQueue(getConfig());
    if (!x) return;
  }

  running = true;
  let $i = $q.pop();
  let cmd = $p.DAINPath + "\\DAINAPP.exe";
  let args = parseConfig($i);

  spn = api.spawn(cmd, args);
  spn.stdout.on("data", (data) => {
    console.log(data.toString());
  });

  spn.stderr.on("data", (data) => {
    console.error(data.toString());
  });

  spn.on("exit", (code) => {
    console.log("Child process exited with code " + code.toString());
    spn = undefined;
    running = false;
  });
}

1 Ответ

0 голосов
/ 02 мая 2020
let mainWindow = new BrowserWindow(
  {
    width: 800,
    height: 600,
    webPreferences:{
      nodeIntegration:true
    }
  });

Пожалуйста, добавьте nodeIntegration при создании окна браузера. Вы используете Node API в вашем рендерере. Если вы не включите nodeIntegration, вы не сможете использовать никакие модули узлов в вашем рендерере.

Аналогично тому, как этот ipcRenderer не получает сообщение от основного процесса

...