使用 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
我有一个简单的节点 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