С электрон-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.