spawn.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const
  2. logger = require('./logger'),
  3. log = logger('app:spawn'),
  4. warn = logger('app:spawn', 'red'),
  5. crossSpawn = require('cross-spawn')
  6. /*
  7. Returns pid, takes onClose
  8. */
  9. module.exports.spawn = function (cmd, params, cwd, onClose) {
  10. log(`Running "${cmd} ${params.join(' ')}"`)
  11. log()
  12. const runner = crossSpawn(
  13. cmd,
  14. params, {
  15. stdio: 'inherit',
  16. stdout: 'inherit',
  17. stderr: 'inherit',
  18. cwd
  19. }
  20. )
  21. runner.on('close', code => {
  22. log()
  23. if (code) {
  24. log(`Command "${cmd}" failed with exit code: ${code}`)
  25. }
  26. onClose && onClose(code)
  27. })
  28. return runner.pid
  29. }
  30. /*
  31. Returns nothing, takes onFail
  32. */
  33. module.exports.spawnSync = function (cmd, params, cwd, onFail) {
  34. log(`[sync] Running "${cmd} ${params.join(' ')}"`)
  35. log()
  36. const runner = crossSpawn.sync(
  37. cmd,
  38. params, {
  39. stdio: 'inherit',
  40. stdout: 'inherit',
  41. stderr: 'inherit',
  42. cwd
  43. }
  44. )
  45. if (runner.status || runner.error) {
  46. warn()
  47. warn(`⚠️ Command "${cmd}" failed with exit code: ${runner.status}`)
  48. if (runner.status === null) {
  49. warn(`⚠️ Please globally install "${cmd}"`)
  50. }
  51. onFail && onFail()
  52. process.exit(1)
  53. }
  54. }