Yarn执行嵌套脚本任务失败但NPM运行正常问题咨询
问题原因
该错误是Yarn 1.x版本的配置冲突导致的:你的Yarn环境开启了ignore-scripts配置项,或是配置了不符合要求的script-shell参数,导致Yarn执行内联脚本命令时,没有把命令传给系统shell解析,而是将完整命令字符串(比如echo one)当成了单个二进制文件去查找,因此抛出「找不到二进制echo one」的报错。
NPM执行正常是因为NPM默认会将脚本命令传给系统shell解析,不会触发该逻辑问题。
你可以先运行以下命令验证配置:
# 检查是否开启了忽略脚本配置 yarn config get ignore-scripts # 检查脚本执行的shell配置 yarn config get script-shell
如果ignore-scripts返回true,或是script-shell返回了非bash/zsh/cmd等系统shell的路径,就可以确认是该原因导致的问题。
解决办法
方案1:关闭全局ignore-scripts配置(最通用)
运行以下命令修改全局配置即可:
yarn config set ignore-scripts false
配置修改完成后重新执行yarn run-all即可正常运行。
方案2:项目单独指定执行shell
如果不想修改全局配置,可以在项目根目录新建.yarnrc文件,添加以下内容指定脚本执行的shell:
script-shell "/bin/bash"
Windows环境可以替换为对应的powershell或cmd路径。
方案3:使用Yarn专用的任务运行工具
你可以改用专门适配Yarn的yarn-run-all工具替代npm-run-all,完全兼容原有用法:
- 安装依赖:
yarn add -D yarn-run-all
- 修改package.json脚本配置:
"run-all": "run-s task:one task:two"
其中run-s对应串行执行,run-p对应并行执行,和npm-run-all的用法完全一致。
内容的提问来源于stack exchange,提问作者Bas Dalenoord
相关产品推荐
相关产品推荐

