NPM - ENOENT syscall spawn bash(这与npm无法找到文件有关)

4

概述

我正在尝试解决一个问题,即为什么我无法通过npm run命令运行在package.json文件中定义的scripts。每个脚本命令都会返回相同的错误消息:

npm ERR! code ENOENT
npm ERR! syscall spawn bash
npm ERR! path C:\Temp\test4
npm ERR! errno -4058
npm ERR! enoent spawn bash ENOENT
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

最小复现步骤

我在我的Windows 11机器上从Node下载页面安装了NodeJS 18.12.1 x64 MSI。

我创建了一个空目录(在这里称为test4),其中包含一个名为package.json的单个文件,其内容如下:

{
  "scripts": {
    "hello": "echo 'Hello World'"
  }
}

我在与上面列出的package.json文件相同的文件夹中以管理员身份打开了PowerShell窗口。

运行npm run hello会生成上面的错误消息。

详细/傻瓜日志记录结果

我使用的一种故障排除技术是启用傻瓜日志记录,以记录尽可能多的详细信息。该命令(npm run hello -ddd)的结果如下:

详细日志截图

期望行为

我有一个同事尝试了同样的步骤,他能够得到我预期的结果: 命令工作截图

我已经尝试过的事情

  • 完全卸载NodeJs/NPM,遵循这个StackOverflow答案

  • 安装不同版本的NodeJS/NPM。(我尝试了2/3个不同的版本)

  • 在我的简单的package.json文件和一个我的项目中的“真正的”package.json文件上运行npm install。两个项目都成功安装。

  • 查看错误消息中提到的AppData文件夹中的日志文件。(与我提供的详细错误截图内容相同)

1个回答

6
运行 npm config list 命令并检查是否设置了 script-shell

npm config list results

在我的情况下,它被配置为使用 bash,这就是错误发生的原因。为了解决这个问题,只需运行 npm config delete script-shell,即可删除配置设置。
至于为什么/如何设置这个,我不确定。

谢谢,这对我很有帮助。你也可以从Windows用户根目录的.npmrc文件中删除script-shell =“bash”行。 - Floris
天啊,因为这个错误我一个月都没法用npm,谢谢你。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接