处理Node.js spawnSync错误

问题描述 投票:5回答:1

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

如果我执行此代码:

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

cmd.stdout和cmd.stderr为null。如果我执行

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

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

我在这里错过了什么?

node.js npm gulp spawn
1个回答
3
投票

在关于options.stdio的节点文档中,它说

默认情况下,子节点的stdin,stdout和stderr被重定向到相应的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;
}
© www.soinside.com 2019 - 2024. All rights reserved.