栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用nodejs的生成会导致“未知选项—”和“ [错误:生成ENOENT]”错误

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用nodejs的生成会导致“未知选项—”和“ [错误:生成ENOENT]”错误

经过大量尝试不同的事情之后,我终于了解了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!");    });


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号