Невозможно использовать worker_threads в электронном приложении - PullRequest
0 голосов
/ 30 мая 2019

С электрон-vue образец я генерировал электронное приложение. Затем я изменил его электронную версию на 4.2.1, который отправляет узел в версии 10.11.0.

Тогда я пытаюсь использовать модуль worker_threads. Сначала я попробовал вот так:

const Worker = require('worker_threads');
new Worker('./workerDummy.js');

но там написано, что Worker не является конструктором, поэтому я утешил. Log it:

{ isMainThread: true,
MessagePort:
 { [Function: MessagePort]
   super_:
    { [Function: EventEmitter]
      EventEmitter: [Circular],
      usingDomains: false,
      defaultMaxListeners: [Getter/Setter],
      init: [Function],
      listenerCount: [Function] } },
MessageChannel: [Function: MessageChannel],
threadId: 0,
Worker: [Function: Worker],
parentPort: null }

Документы NodeJS о worker_threads приводит пример только с new Worker(path), но я предполагаю, что это другая версия или что-то подобное, и я должен использовать Worker.Worker, так как .Worker - это функция. Поэтому я изменил его на:

new Worker.Worker('./workerDummy.js');

и теперь приложение просто аварийно завершает работу без информации об ошибке.

Я создал демо-репозиторий . Шаги для воспроизведения:

создание NodeJS работника находится в'@/src/main/index.js'.


Раньше у меня были некоторые проблемы с электронно-матричным шаблоном (например, я не могу заставить его работать с поздним электроном 5.x), поэтому я хотел проверить с другим шаблоном, который гораздо более "чист", как электронно-кузнечный CLI который рекомендуется использовать даже в электронных документах. Поэтому я сгенерировал свежий проект с

npm i -g @electron-forge/cli
electron-forge init with-forge-cli --template=webpack

У него последняя электронная версия 5.0.2, которая поставляется с узлом v12.x, так что все в порядке. Затем в main.js я добавил

const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');

и ниже в приложении. Готово:

app.on('ready', () => {
    createWindow();
    new Worker('./workerDummy.js');
});

поведение точно такое же, поэтому я сомневаюсь, что это из-за электрон-vue.


Я считаю, что это не ошибка использования, а электронная ошибка, поэтому я разместил выпуск на электронном github.

...