我试图让spawn
到效果的rm -rf node_modules
,然后npm install
(在Windows 7; ñ
。一个透明安装了Cygwin所有X命令礼貌 ñ x的命令决心在命令行就好了)。
最初exec
,我使用,但是想捕获stdout / stderr信息,所以我想使用spawn
,然后重写代码以使用它。但是,这破坏了一切。
rm
重写的命令变为:
var spawn = require("child_process").spawn,
child = spawn("rm", ["-rf", "node_modules"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { console.log(data.toString()); });
child.on('error', function() { console.log(arguments); });
但是,运行此命令将产生以下错误:
rm: unknown option -- ,
Try `rm --help' for more information.
npm
重写的命令变为:
var spawn = require("child_process").spawn,
child = spawn("npm", ["install"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { console.log(data.toString()); });
child.on('error', function() { console.log(arguments); });
但是,运行此命令将产生以下错误:
{
'0': {
[Error: spawn ENOENT]
code: 'ENOENT',
errno: 'ENOENT',
syscall: 'spawn'
}
}
如何使spawn运行可以正常使用的相同命令,exec
而又不会在整个地方引发错误?为什么这不起作用?阅读API,http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options似乎表明这正是应该使用spawn的方式…
经过大量尝试不同的事情之后,我终于了解了Windows上实际上是什么“
npm”,它原来是一个名为bash的脚本npm
,以及一个名为Windows的本地批处理脚本npm.cmd
(不知道为什么是.cmd)。
,应该是.bat,但您已经有了它。Windows的命令解析器将看到npm
,请注意它不是可执行文件,请参见npm.cmd
,然后注意它是可执行文件,然后将其代替。当您在终端中时,这很有用,但spawn()
不会执行任何此类解决方案:传递它npm
会使它失败,因为它不是可执行文件。npm.cmd
但是,将其作为命令传递就可以了。
(此外,不确定为什么rm
会更早失败,因为在没有我能告诉的任何更改的情况下,它实际上可以正常工作。很可能将其误认为是问题的一部分,而实际上却并非如此。)
因此:如果您spawn
在Windows中碰到ENOENT,则当您尝试触发的命令在简单的命令提示符下运行时,请确定您正在调用的命令是否是真正的可执行文件,或者该命令是否存在.bat
/
.cmd
文件提示将“为您”运行。如果是这样,请生成它。
编辑
因为这个职位仍然得到upvotes,一个很好的方式,以确保始终工作的命令是要引导它的基础上process.platform
,这将是win32
为Windows。
var npm = (process.platform === "win32" ? "npm.cmd" : "npm"),
child = spawn(npm, ["install", ...]);
...
针对 触发此错误的 用例进行 编辑
自发布此问题(及其答案)以来,已经发布了多个软件包,这些软件包允许正在运行的npm
任务而不必依赖exec或spawn,您应该改用它们。
可能最受欢迎的是npm-run-all,它不仅使您能够npm
从其他npm脚本以及从节点运行任何任务,而且还添加了命令来使用或依次或并行运行多个npm脚本。没有通配符。
在原始问题的上下文中,由于我试图以npm
exec /
spawn的身份运行以进行清理和重新安装而引发错误,现代的解决方案是在package.json中有一个专门的清理任务:
{
...
"scripts": {
"clean": "rimraf ./node_modules",
...
},
...
}
然后调用该clean
任务,然后在命令行上以如下方式调用install命令:
> npm run clean && npm install
或者,在某些Node脚本中,使用:
const runAll = require("npm-run-all");
...
runAll(["clean", "install"])
.then(() => {
console.log("done!");
})
.catch(err => {
console.log("failed!");
});
我有一个JS应用程序。它在linux上运行良好,但在Windows10中我遇到了一个错误。 不正确的代码是 我在github中找到了这个错误的原因,我想问题是spawn nodejs spawn Doc在windows中无法正常工作。但我不知道如何修改这段代码使其工作。有人能帮我吗?
问题内容: 我正在尝试使用命令启动我的角度应用程序,但出现致命错误:生成cmd ENOENT。 我使用以下命令生成我的Angular App 然后我使用命令来启动我的应用 但它不起作用。 系统信息:操作系统:Windows 7 64 bit npm版本:2.11.3 请帮助我,我阅读了所有有关文档,但没有任何线索。 问题答案: 请尝试以下可能的解决方案: 验证npm文件夹是否存在于以下位置C:\
我正在按照http://spring.io/guides/gs/consource-web-service/#scratch中提供的分步说明学习如何使用Gradle和Spring-WS使用SOAP web服务。我已经创建了上面URL中指定的文件夹结构(即:c:/src/main/java/hello)并将build.gradle、weatherclient.java、weatherconfigur
作者注:很多关于这个错误的问题促使我把这个问题贴出来,以备将来参考。 相关问题: 对节点_ENV=production使用spawn函数 节点。jschild_进程。spawn Enoint错误-仅在supervisord下 产卵节点。js错误 https://stackoverflow.com/questions/27603713/nodejs-spawn-enoent-error-on-tra
问题内容: 我正在使用VB.NET和MySQL在MVC2中进行开发,尝试将简单的SQL查询转换为LINQ时遇到问题。 SQL查询: LINQ查询: 生成的错误是: 执行命令定义时发生错误。有关详细信息,请参见内部异常。 内部异常是: “字段列表”中的未知列“ GroupBy1.K1” 这是LINQ生成的SQL: 查看该查询,很容易找出导致错误的原因。简而言之,最内部的查询仅返回2列,而其上方的查询
我有以下代码片段 我尝试运行应用程序时出现以下错误(部分) 似乎type="num "没有被处理。我怀疑年龄int也可能是一个问题,因为它是一个int,但需要一个string。从sting到int的反向转换也可能是一个问题。 任何帮助是值得赞赏的。 谢谢