【问题标题】:Handle Node.js spawnSync errors处理 Node.js spawnSync 错误
【发布时间】:2017-03-02 03:41:38
【问题描述】:

我正在尝试从 gulp 任务运行“npm publish”。它可以工作,但我想处理 npm 命令本身抛出的任何错误。

如果我执行这段代码:

var cmd = spawnSync('npm.cmd', ['publish', packageDir], { stdio: 'inherit' })

cmd.stdoutcmd.stderr 为空。如果我执行

var cmd = spawnSync('npm.cmd', ['publish', packageDir], { stdio: 'pipe' })

cmd.stdoutcmd.stderr 是缓冲区,例如 <Buffer 6e 70 6d 20 45 52...

我在这里错过了什么?

【问题讨论】:

  • 如果我这样做cmd.stderr.toString(),我可以看到错误,但 cmd,error 仍然未定义...

标签: node.js npm gulp spawn


【解决方案1】:

在关于 options.stdio 的 Node 文档中它说

默认情况下,孩子的标准输入、标准输出和标准错误被重定向到 对应的 subprocess.stdin、subprocess.stdout 和 subprocess.stderr.

在您的选择中使用

{ stdio: ['inherit', 'inherit', 'pipe'] }

然后检查stderr。一个例子:

var spawn = childProcess.spawnSync('node myScript.js', { stdio: ['inherit', 'inherit', 'pipe'] })

if (spawn.stderr) {
  console.log(Error(spawn.stderr))
  process.exitCode = 1;
}

【讨论】:

  • 请注意,不推荐process.exit。在复制粘贴之前看到这个SO answer
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2013-03-20
  • 1970-01-01
相关资源
最近更新 更多