全局npm安装时终端(zsh)命令未找到

6

这真让我头疼!我搜索了很多,尝试了各种方法。(我认为这不是超级用户的话题)

最近我的终端遇到了很多麻烦。我一定搞乱了什么,因为以前它运行得很好,现在我无法使其再次识别我的命令,无论是nvm还是全局npm包,比如expo。它只给我返回这样的错误:

▶ expo      
zsh: command not found: expo

 nvm ls
zsh: command not found: nvm

(顺便说一句:npmbrewj 命令都能找到。)
如果我执行 echo $PATH,就会得到以下结果:
/Users/norfeldt/Library/Android/sdk/tools/bin:/Users/norfeldt/Library/Android/sdk/tools:/Users/norfeldt/Library/Android/sdk/platform-tools:/Applications/anaconda/bin:~/Library/Python/2.7/bin:~/.npm-global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

(奇怪的行为是,如果我再次执行echo $PATH,它会在同一行返回两次相同的输出)
(可读版本:用:\n替换:
/Users/norfeldt/Library/Android/sdk/tools/bin:
/Users/norfeldt/Library/Android/sdk/tools:
/Users/norfeldt/Library/Android/sdk/platform-tools:
/Applications/anaconda/bin:
~/Library/Python/2.7/bin:
~/.npm-global/bin:
/usr/local/bin:
/usr/bin:
/bin:
/usr/sbin:
/sbin

我的.zshrc文件长这样:

# Node & NPM
#PATH="/usr/local/bin:$PATH"
PATH="~/.npm-global/bin:$PATH"
#PATH="~/.npm-global/lib/node_modules:$PATH"

# Git
alias master="git checkout master"
alias dev="git checkout develop"
alias hotfix="git flow hotfix"
alias feature="git flow feature"
alias tags="git push --tags"

# Pip - https://gist.github.com/haircut/14705555d58432a5f01f9188006a04ed
PATH="~/Library/Python/2.7/bin:$PATH"

# added by Anaconda2 4.4.0 installer
PATH="/Applications/anaconda/bin:$PATH"

# Android
export ANDROID_HOME=/Users/norfeldt/Library/Android/sdk
PATH="${ANDROID_HOME}/platform-tools:$PATH"
PATH="${ANDROID_HOME}/tools:$PATH"
PATH="${ANDROID_HOME}/tools/bin:$PATH"

alias emu="pushd ${ANDROID_HOME}/tools;emulator -avd Pixel_2; popd"

# Path to your oh-my-zsh installation.
export ZSH=/Users/norfeldt/.oh-my-zsh

ZSH_THEME="avit"

# Autojump
[[ -s `brew --prefix`/etc/autojump.sh ]] && . `brew --prefix`/etc/autojump.sh

# shell startup.
plugins=(git)

source $ZSH/oh-my-zsh.sh

# Load zsh-autosuggestions.
source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh

# zsh-syntax-highlighting
source /Users/norfeldt/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

export PATH

非常感谢您的帮助!

更新

根据 @l'L'l 的友好回答和 这个回答,我采取了以下措施:

更新了我的.bash_profile文件为:

export NVM_DIR=~/.nvm
source ~/.nvm/nvm.sh

这是该文件中唯一的内容。

通过 $touch .bashrc 创建了一个 .bashrc 文件(可能已删除旧文件..但这只是一个空文件..)。

.zshrc 添加了以下行:

PATH="$PATH:$HOME/.npm-global/bin/"             # Changed ~ to $HOME
PATH="$PATH:$HOME/.npm-global/lib/node_modules" # Changed ~ to $HOME
...
# Bash stuff
source ~/.bashrc
source ~/.bash_profile

执行了source ~/.zshrc并重启了终端。

现在, nvmexpo可以正常工作!谢谢!


你的问题是什么?当你调用zsh时,你遇到了什么错误? - user1934428
@user1934428 我已经更新了我的问题(我收到类似“zsh:找不到命令:expo”的错误)。 - Norfeldt
我同意其他人的看法,你的可执行文件可能不在你的路径中。特别是对于 npm,你可以尝试运行 npm config get prefix 并将 bin 子目录添加到你的路径中。例如,当我运行该命令时,我会得到 /usr/local,并且 which expo 会为我打印出 /usr/local/bin/expo。对于你来说,你的前缀可能在 $PATH 不检查的地方。 - mrfred
如果我运行 npm config get prefix,我会得到 /Users/norfeldt/.npm-global - Norfeldt
@mrfred 如果我输入 which npm,我会得到 /usr/local/bin/npm(顺便说一下,npm 是一个有效的命令)。 - Norfeldt
显示剩余7条评论
2个回答

6

如果你尝试了几种方法,第一件事情是从你的.zshrc文件中引用~/.bash_profile。有可能nvm命令已经在那里设置好了,但是你的zsh shell并不知道它的存在。

注意:在Mac OS X上,在运行安装脚本后,如果出现“nvm: command not found”的错误,则有以下原因之一:

- 系统可能没有设置命令的.bash_profile文件。只需使用touch ~/.bash_profile创建一个即可,并重新运行安装脚本。你可能需要重新启动终端,或者尝试在终端中打开一个新的选项卡/窗口并重试。如果以上操作无法解决问题,请打开你的.bash_profile并添加以下代码:

source ~/.bashrc

有关此问题及可能的解决方法的更多信息,请参考此处

↑ 由于你正在使用zsh而非source ~/.bash_profile~/.bashrc.zshrc中。


如果你用homebrew进行安装,则可以将以下内容添加到.zshrc中:

导出/使用homebrew安装的nvm

# source nvm
export NVM_DIR=~/.nvm

if hash brew 2>/dev/null; then
    source $(brew --prefix nvm)/nvm.sh
    source `brew --prefix`/etc/profile.d/z.sh
fi

npm未通过homebrew安装:

export NVM_DIR="~/.nvm"
source ~/.nvm/nvm.sh
[[ -s "$NVM_DIR/nvm.sh" ]] && \. "$NVM_DIR/nvm.sh" # load nvm               
[[ -s "$NVM_DIR/bash_completion" ]] && \. "$NVM_DIR/bash_completion" # load nvm bash_completion

https://github.com/nvm-sh/nvm


1
非常感谢您抽出时间尝试并帮助我!您的答案指引了我找到解决方案所需的方向。我已更新我的问题以展示我的最终解决方案。 - Norfeldt

0

我没有OSX来尝试...但是zsh的路径可能属于以下路径之一:

/etc/paths/private/etc/paths或者/private/etc/paths.d

此外,还有一个auto-complete plugin适用于npm


我已将其添加到 private/etc/paths,但没有任何变化 - 需要重新启动或使用 source 命令吗? - Norfeldt

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