执行npm install报No such file or directory错误如何解决
问题根因
该报错由asdf安装路径变更导致:asdf被升级、重装(尤其是通过Homebrew更新asdf版本时)后,旧版本的安装目录被清理,但~/.asdf/shims/下的npm等命令垫片还硬编码着旧版本asdf的绝对路径(即报错中提到的/usr/local/Cellar/asdf/0.8.1_1/libexec/bin/asdf),垫片找不到asdf主程序就会抛出该错误。
修复步骤
- 先确认当前asdf的实际生效路径,执行命令:
正常会返回当前可执行的asdf路径,Apple Silicon芯片Mac通过Homebrew安装的asdf通常在which asdf/opt/homebrew/bin/asdf,Intel芯片Mac通常在/usr/local/bin/asdf,确认路径存在即可继续操作。 - 执行垫片重建命令,重写所有shim脚本里的硬编码路径:
这步是核心操作,会扫描所有通过asdf安装的语言运行时(包括Node.js),重新生成shims目录下的所有可执行脚本,替换成正确的asdf路径。asdf reshim - 验证修复结果,依次执行命令:
如果能正常输出npm版本号,就可以回到项目目录正常执行# 检查npm垫片内的路径是否已更新 head -n 10 ~/.asdf/shims/npm # 验证npm命令可正常运行 npm -vnpm install了。 - 如果执行
asdf reshim时直接提示找不到asdf命令,说明shell环境没有正确加载asdf配置,先补全初始化配置:- 对默认使用zsh的Mac用户,在
~/.zshrc末尾追加如下配置:. $(brew --prefix asdf)/libexec/asdf.sh - 执行
source ~/.zshrc重载shell配置,确认asdf命令可以正常调用后,再重新执行asdf reshim即可。
- 对默认使用zsh的Mac用户,在
- 如果重建垫片后仍有旧路径残留,直接清空旧shims目录再强制重建:
rm -rf ~/.asdf/shims asdf reshim
内容的提问来源于stack exchange,提问作者Tech Automation
相关产品推荐
相关产品推荐

