【问题标题】:Terminal (zsh) command not found for global npm installs找不到全局 npm 安装的终端 (zsh) 命令
【发布时间】:2019-11-17 17:59:49
【问题描述】:

这快把我逼疯了!我做了很多谷歌搜索并尝试了各种事情。 (我不认为这是一个超级用户主题)

我最近在终端上遇到了很多麻烦。我一定是在某个地方搞砸了,因为它过去工作得很好,现在我无法让它识别我的命令,无论是 nvmglobal 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 和this answer 的友好回答,我做了以下事情:

将我的.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 我已经更新了我的问题(我收到了zsh: command not found: expo 之类的错误)
  • 您确定命令exponvm 在您的PATH 中吗? /sbin 中的程序会发生什么,这是您路径中的最后一个元素?如果你从那个目录调用一个程序,它会被找到吗?
  • 我同意其他人的观点,即您的可执行文件可能不在您的路径中。对于npm,您可以尝试运行npm config get prefix 并将bin 子目录添加到您的路径中。例如,当我运行命令时,我得到了/usr/localwhich expo 为我打印出/usr/local/bin/expo。对您而言,您的前缀可能位于您的 $PATH 未检查的位置。
  • 如果我运行npm config get prefix,我会得到/Users/norfeldt/.npm-global

标签: macos npm terminal zsh oh-my-zsh


【解决方案1】:

您可以尝试一些事情,首先是从您的.zshrc 文件中获取~/.bash_profilenvm 命令可能是在那里设置的,而您的 zsh shell 根本不知道它的存在。

注意:在 OS X 上,如果在运行 安装脚本,可能是以下原因之一:-

您的系统可能没有命令所在的.bash_profile 文件 设置。只需使用touch ~/.bash_profile 创建一个并运行 再次安装脚本,您可能需要重新启动终端实例。 尝试在终端中打开一个新选项卡/窗口,然后重试。如果以上 不能解决问题,打开您的.bash_profile 并添加
以下代码行:

source ~/.bashrc

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

↑ 由于您在.zshrc 中使用zsh 而不是source ~/.bash_profile~/.bashrc


如果您使用homebrew 安装,那么您可能需要在.zshrc 中添加以下内容:

导出/源nvmhomebrew 一起安装:

# 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

【讨论】:

  • 非常感谢您抽出宝贵时间来帮助我!您的回答为我指明了找到解决方案所需的方向。我已更新我的问题以显示我的最终解决方案。
【解决方案2】:

我没有 OSX 可以尝试...但 zsh 的路径可能属于那里:

/etc/paths/private/etc/paths 或转入/private/etc/paths.d

除此之外,还有一个auto-complete plugin 代表npm

【讨论】:

  • 我确实将它添加到 private/etc/paths,但没有任何改变 - 是否需要重新启动或 source
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 2015-07-09
  • 1970-01-01
  • 2021-10-23
  • 2023-04-03
  • 2020-04-16
  • 2016-06-09
  • 1970-01-01
相关资源
最近更新 更多