Blame view

node_modules/cross-spawn/index.js 1.61 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  '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;