怎么样
运行多个Node脚本的另一种选择是使用单个Node脚本,它可以派生许多其他脚本。Node本身支持分叉,因此它不添加任何依赖关系并且是跨平台的。
最小的例子
这只会按原样运行脚本,并假定它们位于父脚本的目录中。
// fork-minimal.js - run with: node fork-minimal.js
const childProcess = require('child_process');
let scripts = ['some-script.js', 'some-other-script.js'];
scripts.forEach(script => childProcess.fork(script));
详细的例子
这将运行带有参数的脚本,并由许多可用选项进行配置。
// fork-verbose.js - run with: node fork-verbose.js
const childProcess = require('child_process');
let scripts = [
{
path: 'some-script.js',
args: ['-some_arg', '/some_other_arg'],
options: {cwd: './', env: {NODE_ENV: 'development'}}
},
{
path: 'some-other-script.js',
args: ['-another_arg', '/yet_other_arg'],
options: {cwd: '/some/where/else', env: {NODE_ENV: 'development'}}
}
];
let processes = [];
scripts.forEach(script => {
let runningScript = childProcess.fork(script.path, script.args, script.options);
// Optionally attach event listeners to the script
runningScript.on('close', () => console.log('Time to die...'))
runningScripts.push(runningScript); // Keep a reference to the script for later use
});
与分叉脚本进行通信
分叉还具有额外的好处,即父脚本可以接收来自分叉的子进程的事件并发回。一个常见的示例是父脚本杀死其分叉的子代。
runningScripts.forEach(runningScript => runningScript.kill());
有关更多可用事件和方法,请参阅ChildProcess
文档
&&
将按顺序运行脚本,而&
将并行运行它们。