我使用electron-vue样板生成了电子应用程序。然后,我将其电子版本更改为4.2.1
,该电子版本的节点版本为10.11.0
。
然后我尝试使用worker_threads模块。首先,我尝试这样:
const Worker = require('worker_threads');
new Worker('./workerDummy.js');
但是它说Worker不是构造函数,所以我用console.log记录它:
{ 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 docs about worker_threads仅给出了new Worker(path)
的示例,但我认为它是其他版本或其他版本,我应该使用Worker.Worker,因为我看到.Worker
是一个函数。所以我将其更改为:
new Worker.Worker('./workerDummy.js');
现在应用程序崩溃了,没有任何错误信息。
我已经创建了demo repository。重现步骤:
git克隆https://github.com/BorysTyminski/electron-worker-issue.git
在'@ / src / main / index.js'中创建NodeJS worker。
我以前在电子vue样板上遇到了一些问题(例如,我无法使其与最新的电子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就绪:
app.on('ready', () => {
createWindow();
new Worker('./workerDummy.js');
});
行为是完全一样的,所以我怀疑是因为电子势力。