使用 Yarn 运行 npm 脚本时出错:“ERR spawn EINVAL

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

我在尝试运行涉及 Yarn 的 npm 脚本时遇到错误。以下是事件的顺序:

  1. 我已经使用 create-react-app 初始化了一个项目。
  2. 将以下脚本添加到我的 package.json 文件中
"scripts": {
    "lint": "yarn add -D prettier && yarn add -D babel-eslint && npx install-peerdeps --dev eslint-config-airbnb && yarn add -D eslint-config-prettier eslint-plugin-prettier"
}
  1. 当我运行 npm run lint 时,系统会提示我是否使用 Yarn,我用“y”回应。
  2. 但是,我收到以下错误:“ERR spawn EINVAL”。

error snap

我尝试使用 npm install -g yarn 全局安装 Yarn,但问题仍然存在。我检查了任何相关的配置设置或环境变量,但找不到任何明显的错误原因。

我的环境:

Windows 11

> node --version  
v20.12.2
> npm --v
10.5.0
> yarn --v
yarn install v1.22.22
javascript reactjs node.js npm hadoop-yarn
1个回答
0
投票

该错误是由 Node.js 中的安全更新引起的。

来自该博客:

值得注意的是,对于使用

child_process.spawn
child_process.spawnSync
的 Windows 用户来说,发生了重大变化。如果在未设置
EINVAL
选项的情况下将
.bat
.cmd
文件传递给
child_process.spawn
child_process.spawnSync
,Node.js 现在将出现
shell
错误。如果对
spawn/spawnSync
的输入进行了清理,用户现在可以将
{ shell: true }
作为选项传递,以防止发生 EINVAL 错误。

由于您运行的命令 (

install-peerdeps
) 在没有设置该选项的情况下调用了
spawn
方法(代码链接),因此脚本因该错误而失败。

该博客还介绍了一种解决方法,尽管不推荐,而且我不确定这是否适用于

npx

虽然也可以通过

--security-revert=CVE-2024-27980
恢复安全补丁,但我们强烈建议不要这样做。

如果您确实需要自动安装对等依赖项,您可能需要编写自己的脚本或将包管理器切换到从 v7 开始支持此功能的 npm。

© www.soinside.com 2019 - 2024. All rights reserved.