node.js - 为什么调用 child_process 命令可以与 exec 一起使用,但不能与 Spawn 一起使用?

标签 node.js gruntjs child-process

为什么这会起作用:

var exec = require("child_process").exec;
var command = exec("grunt");

但这会引发错误:

var spawn = require("child_process").spawn;
var command = spawn("grunt");

它抛出的错误是错误:spawn ENOENT

起初我以为这可能与env有关,但在execspawn中是完全相同的。我认为它一定与 Grunt 有关,因为尝试 git 在两者中都有效。

最佳答案

检查 Node docs对于 spawn 我发现:

Note that if spawn receives an empty options object, it will result in spawning the process with an empty environment rather than using process.env. This due to backwards compatibility issues with a deprecated API.

exec 中env 的默认选项是null,但对于spawn 来说它是process.env。那么如果两者都获得相同的 env 是不明确的吗?您可以通过为两者明确提供相同的 env 来检查这一点吗?

关于node.js - 为什么调用 child_process 命令可以与 exec 一起使用,但不能与 Spawn 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16586600/

相关文章:

javascript - CouchDB 循环唯一的 `_id` 和通过 JavaScript 的 Console.log

node.js - NodeJS TCP Socket 不显示客户端主机名信息

go - scanner.Scan() 在 Linux 但不是 Windows 上阻塞直到退出

node.js - Node JS。 Child_process.spawn。处理进程的输入提示

node.js - typescript 文件更改后 JavaScript 文件未更新

javascript - 如何使用 npm 库 Telegraf 一次从数据库中的 ID 列表向所有电报机器人用户发送消息

node.js - 使用 Yeoman 设置 AngularJS 项目后出现 "npm install"问题

gruntjs - NPM vs. Bower vs. Browserify vs. Gulp vs. Grunt vs. Webpack

php - 从 php 脚本中执行 grunt 任务

c - Linux C 编码中的 Fork() 命令