60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
var cp = require('child_process');
|
|
var parse = require('./lib/parse');
|
|
var enoent = require('./lib/enoent');
|
|
|
|
var cpSpawnSync = cp.spawnSync;
|
|
|
|
function spawn(command, args, options) {
|
|
var parsed;
|
|
var spawned;
|
|
|
|
// Parse the arguments
|
|
parsed = parse(command, args, options);
|
|
|
|
// Spawn the child process
|
|
spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
|
|
|
|
// Hook into child process "exit" event to emit an error if the command
|
|
// does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
|
|
enoent.hookChildProcess(spawned, parsed);
|
|
|
|
return spawned;
|
|
}
|
|
|
|
function spawnSync(command, args, options) {
|
|
var parsed;
|
|
var result;
|
|
|
|
if (!cpSpawnSync) {
|
|
try {
|
|
cpSpawnSync = require('spawn-sync'); // eslint-disable-line global-require
|
|
} catch (ex) {
|
|
throw new Error(
|
|
'In order to use spawnSync on node 0.10 or older, you must ' +
|
|
'install spawn-sync:\n\n' +
|
|
' npm install spawn-sync --save'
|
|
);
|
|
}
|
|
}
|
|
|
|
// Parse the arguments
|
|
parsed = parse(command, args, options);
|
|
|
|
// Spawn the child process
|
|
result = cpSpawnSync(parsed.command, parsed.args, parsed.options);
|
|
|
|
// Analyze if the command does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
|
|
result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
|
|
|
|
return result;
|
|
}
|
|
|
|
module.exports = spawn;
|
|
module.exports.spawn = spawn;
|
|
module.exports.sync = spawnSync;
|
|
|
|
module.exports._parse = parse;
|
|
module.exports._enoent = enoent;
|