我有一个基于electron-vue构建的node.js项目,该项目使用电子,babel,webpack和vue。我已经构建了一个简单的vue SPA,但我发现单线程性质并不适合它需要做的大量数据提取和处理。
我的第一个想法是创建子进程。我创建了一个产生和管理子进程的vue组件:
startProcess() {
const path = require('path');
const fs = require('fs');
const child_process = require('child_process');
const app_root = require('app-root-path');
const service_root = '/src/main/services/';
const service_path = app_root.resolve(path.format({dir: service_root, name: this.service, ext: '.js'}));
if (fs.existsSync(service_path)) {
this.service_process = child_process.fork(service_path, [], { silent: true });
this.service_process.on('close', this.onChildClose);
this.service_process.on('error', this.onChildError);
this.service_process.on('disconnect', this.onChildDisconnect);
this.service_process.on('message', this.onChildMessage);
this.service_process.send({ message: "hello" });
console.log(`${this.service} started successfully`);
} else {
console.log(`${service_path} does not exist`);
console.log(`${this.service} cannot start!`);
}
}
我的示例流程:
const path = require('path');
const service = path.basename(__filename);
process.on('disconnect', (m) => {
console.log(`${service} disconnected, exiting...`);
process.exit();
});
process.on('exit', (m) => {
console.log(`${service} has stopped`);
});
process.on('message', (m) => {
if (m.message === "ping") {
process.send({message:"pong"});
} else {
}
console.log(`parent > ${service}:`, m);
});
function tick()
{
//process.send({ message: `${service} update` });
}
setInterval(tick, 500);
这非常有效。 IPC允许我向每个子进程泵送消息,允许我跨多个进程委派大型数据任务。但是,有一个问题。
我无法在子进程中使用ES6功能。
例如,尝试import
和export
类会导致错误。通过使用babel-node
运行这些子进程,它们似乎正常工作,但我宁愿不要从我的应用程序单独安装babel。根据{{3}},这些应该在nodejs v8.1.2下兼容。
如何利用这些功能?有没有更好的方法来构建我的应用程序,以便我在这里尝试做什么?
答案 0 :(得分:2)
import
和export
目前不属于es6规范。有关详细信息,请参阅此issue。这就是为什么节点不支持它。即使在http://node.green,也没有此功能。