使用 child_process 执行节点脚本

Executing a node script with child_process

我有一个简单的节点 index.js 文件,它使用事件发射器每两秒发射一次数据。在这个文件中,我导出了事件发射器的引用,因为我希望在另一个文件中使用它 user.js。当我 运行 index.js 时,一切都按预期工作。然后,当我打开另一个终端和 运行 时,user.js 它会按预期写入 console.log。我想做的是,一旦我发出此事件,就会创建一个新进程,该进程将 运行 user.js 文件并将其输出读取到当前终端,而不必使用单独的终端来获取结果.

index.js

const { EventEmitter } = require('events');
const { spawnSync, spawn } = require('child_process');

const user = { id: 1, name: 'John Doe'}

const myEvent = new EventEmitter();
setInterval(() => {
    myEvent.emit('save-user', user);
}, 2000);
;
exports.emitter = myEvent;

user.js

const newEvent = require('./index')
const userEmitter = newEvent.emitter;

userEmitter.on('save-user', (user) => {
    console.log('Saving user data', user);
})

这里有一个稍微不同的方法:您可以 运行 user.js 作为父进程,并在子进程上有 index.js。

User.js

const newEvent = require("./index");
const { spawn } = require("child_process");

const userEmitter = newEvent.emitter;

userEmitter.on("save-user", (user) => {
  console.log("Saving user data", user);
});

spawn("node", ["./index.js"]);

index.js

const { EventEmitter } = require("events");

const user = { id: 1, name: "John Doe" };

const myEvent = new EventEmitter();
setInterval(() => {
  myEvent.emit("save-user", user);
}, 2000);

exports.emitter = myEvent;

然后运行node user.js