#spawn-series
If you want to spawn commands, while blocking the next command untill earlier finishes execution use this module. This uses child_process.spawn for spawning the process.
Usage
npm install --save spawn-series
API
spawnSeries(commands [, finish [, foreach]] )
Arguments
commands
This should be an array of objects in the format:
[
{
command: 'command1'
args: ['arg1', 'arg2', 'arg3'],
options: {
},
when: function (i, cmdObj) {
return evaluateCondition();
}
},
{
command: 'command2',
args: ['arg1', 'arg2', 'arg3']
},
{
command: 'command3'
}
]
Each object should contain a
command to be run and may contain
args [optional] an array of arguments for command
options [optional] options to be passed to child_process.spawn
when [optional] a function that evaluates a condition to whether to run or skip this command execution.
finish
An optional callback function to be called when spawn-series
finishes execution.
Signature: function (code, i, cmdObj)
Arguments:
If all commands finish successfully, code will be 0.
Else if one of the commands fail:
code: exit code of failed command
i: failed command number in commands array
cmdObj: failed command object from commands array
foreach
An optional callback function that is called when each command in commmands array is spawned.
Signature: function (child, i, cmdObj)
Arguments:
child: current child process spawned
i: current command number in array passed to spawnSeries's as first argument
cmdObj: current command object in array passed to spawnSeries's as first argument
Use this method attach listeners to the child process.
Example
var spawnSeries = require('spawn-series');
spawnSeries(
[
{
command: 'git',
args: ['clone', 'git@github.com:someid/somerepo.git'],
options: {
stdio: 'inherit'
}
},
{
command: 'npm',
args: ['install'],
options: {
cwd: './some-repo',
stdio: 'inherit'
},
when: function () {
return fs.existsSync('./some-repo/package.json');
}
},
{
command: 'bower',
args: ['install'],
options: {
cwd: './some-repo',
stdio: 'inherit'
},
when: function () {
return fs.existsSync('./some-repo/bower.json');
}
}
],
function (code, i, cmdObj) {
if (code === 0) {
console.log('Finished setting up some-repo');
} else {
console.log('Error while setting up some-repo in command: ' + cmdObj.command);
}
},
function (child, i, cmdObj) {
console.log('Starting: ' + cmdObj.command + ' ' + cmdObj.args.join(' '));
child.on('close', function (code) {
console.log('Finished: ' + cmdObj.command + ' ' + cmdObj.args.join(' '));
});
}
)