在zsh中使用npm install后出现“Command not found”的错误

164

我在使用zsh通过npm安装vows时遇到了一些问题。以下是我收到的信息。我尝试使用-g选项进行安装,也尝试了不使用它。你有什么想法吗?

[  ~/Desktop/sauce-node-demo:master] npm install -g vows
npm http GET https://registry.npmjs.org/vows
npm http 304 https://registry.npmjs.org/vows
npm http GET https://registry.npmjs.org/eyes
npm http GET https://registry.npmjs.org/diff
npm http 304 https://registry.npmjs.org/eyes
npm http 304 https://registry.npmjs.org/diff
/usr/local/share/npm/bin/vows -> /usr/local/share/npm/lib/node_modules/vows/bin/vows
vows@0.6.4 /usr/local/share/npm/lib/node_modules/vows
├── eyes@0.1.8
└── diff@1.0.3
[  ~/Desktop/sauce-node-demo:master] vows
zsh: command not found: vows

你尝试过通过执行 rehash 命令来刷新 shell 的路径缓存吗? - Brian Agnew
做了这个之后仍然没有任何东西 =/ - optikfluffel
我不知道为什么,但在同一个终端中输入bash并按回车键,然后切换回zsh(通过输入zsh并按回车键),问题就解决了! - Ali Baghban
32个回答

207

~/.zshrc 文件的开头添加 source /home/YOUUSERNAME/.bash_profile

这样就能检测到所有缺失的命令。

对于 Mac 用户,添加 source /Users/YOUUSERNAME/.bash_profile


18
对于我来说,我需要获取~/.bashrc文件。 - Royalist
7
我正在Windows 10上使用WSL,为了使其工作,我不得不添加source /home/USERNAME/.profile,但它完美地运行了。 - Luke
2
我不得不使用 .bashrc 而不是 bash_profile。当我使用 bash_profile 时,在 zsh 中会出现大量命令未找到的情况。 - NoobCoderChick
5
在Mac OS Catalina操作系统中,我的用户文件夹不包含名为.bash_profile的文件。即使使用搜索功能也找不到它。在更新了.zshrc文件并重新打开终端后,它的第一行显示为“no such file or directory: /Users/m...i/.bash_profile”。这可能是Catalina的一个重大更改吗? - MQoder
2
这对于Mac用户也适用:source /Users/$USER/.bash_profile 或者甚至更简单的 source $HOME/.bash_profile - Glenn85

124
如果您使用Homebrew安装了Node.js,则可以在/usr/local/share/npm/bin中找到npm二进制文件。
您应该确保此目录位于您的PATH环境变量中。因此,在您的~/.zshrc文件中添加以下内容:
export PATH=/usr/local/share/npm/bin:$PATH

32
在 Mac 上,我将 export PATH="$HOME/.npm-packages/bin:$PATH" 添加到了我的 ~/.zshrc 文件中。 - Dan Sandland
使用npm v6.9.0时,$HOME/.npm-global/bin适合我。 - Kevin Hooke
4
如果您没有通过Homebrew安装Node.js或者您记不起来是否安装了,该怎么办?如何找到“usr/local/share/npm/bin”? - user70848

71
如果您已经使用nvm添加,请将以下内容添加到您的.zshrc文件中,并重新启动终端,因为zsh shell没有检测到该文件的二进制文件,我们需要指定路径。
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

33

仅适用于Mac用户
假设您之前已经安装了nvm,并且正确安装了npm
(以下是如何安装的逐步指南:
为Mac用户安装nvm )。

您需要进行以下操作:

找到'.zshrc'文件:

  • 打开Terminal。
  • 键入open ~以访问您的主目录。
  • 按下Cmd + Shift + .以在Finder中显示隐藏文件。
  • 定位.zshrc

编辑'.zshrc'文件:

  • 添加:source /Users/_user_Name_/.bash_profile到文件顶部(其中_user_Name_代表您的用户名)。

  • 保存文件,并关闭Terminal窗口。


尽管这看起来像是一个黑客行为,但我认为这是在Catalina升级后将所有预安装的东西从bash带到zsh的好方法。 - Maxim V. Pavlov
对我来说,这就是答案,因为仅仅运行 source /Users/_user_Name_/.bash_profile 只能在当前会话期间生效。 - The Onin
只是为了明确,'open ~'似乎会打开一个新的Finder窗口,你可以像平常一样打开它。而'Cmd + Shift + .'是一个隐藏/显示隐藏文件的切换。我相信从Finder查看隐藏文件的能力是需要先配置的设置,所以也许通过终端是解决这个问题的方法。但如果这个设置已经被配置好了,似乎没有必要使用终端来打开Finder。 - user70848
“.bash_profile” 不一定包含有效的 “zsh” 代码;“bash” 和 “zsh” 是两个相似但不同的 shell。 - chepner
在我的情况下,.bash_profileoh-my-zsh。如果有人遇到了困难,请参考这个。 - Adam Orłowski

27

针对Mac用户:

除此之外,还需要安装以下软件:nvm、iterm2、zsh

我发现使用.bashrc而不是.profile或者.bash_profile可以避免很多问题。只需将后者添加到我的.zshrc文件中:

source $HOME/.bashrc

4
我不得不使用 source $HOME/.bash_profile,但这绝对是最好的答案。我已经在bash中正常配置了sdkman和node。我将node模块添加到路径中,但仍然收到“权限被拒绝”的错误提示。这个方法解决了这个问题!回到编程吧! - Brooks DuBois
如果你已经为最佳使用配置了bash,那么这就是最好的答案。 - legacy

22

打开你的终端并运行:nano .zshrc

注意:如果你没有这个文件,可以使用'touch'命令创建它:touch ~/.zshrc

在包含“export ZSH”的行下面的任何位置粘贴以下内容:

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

现在只需按^X键,将会询问您是否要保存。选择“是”,然后按回车键,如果它说您正在更改文件,请再次按回车键。保存后可能需要重新启动终端。

如果您以前安装了Node,请尝试使用node -v进行快速测试。


1
".zshrc不是一个目录,而是一个文件,所以如果不存在,请使用touch .zshrc。" - Christopher Kiessling
谢谢,我会更新更改! - Shah
1
这个答案应该标记为正确答案,你救了我的一天。 - Tom Vos
谢谢!我很高兴能够帮助 :) @TomVos - Shah

18

在Ubuntu上安装了ZSH后,之前在bash终端安装了Node或其他软件包,

首先打开:

nano .zshrc

然后取消注释第二行:

export PATH=$HOME/bin:/usr/local/bin:$PATH

这对我很有效,而且无需编写任何代码。 我认为这个选项在Mac上也是可用的。


但这对我不起作用。即使我在我的.zshrc中添加source $HOME/bin,它也不起作用。每次打开shell提示符时都会得到一些输出。 - Animesh Kumar
1
不支持 Mac OS。 - Nuwan Dharshana

13

对于我来说,将export PATH=/usr/local/share/npm/bin:$PATH添加到.zshrc中的所接受的答案并没有起作用。我尝试添加NVM_DIR,这解决了我的问题。

  1. 尝试运行vi .bashrc
  2. 你会找到如下的一行代码。请复制它。

    export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

  3. 将复制的内容粘贴到.zshrc文件中

  4. 重启终端

我希望这能解决你的问题。


我的情况是:1. 我通过nvm安装了Node,并且一切正常。2. 然后在此期间,我从“bash”切换到“zsh”,然后Node停止工作了。因此,上面的答案对我有用。 - razvang

11

对于macOS用户:考虑使用.profile,而不是.bash_profile。您可能仍需要手动将其添加到~/.zshrc中:

source $HOME/.profile

请注意,默认情况下不存在这样的文件! 引用 slhck https://superuser.com/a/473103 的话:

Anyway, you can simply create the file if it doesn't exist and open it in a text editor.

touch ~/.profile
open -e !$
添加的价值在于,使用单个文件设置环境感觉很好,无论使用哪种shell。在zsh中加载bash配置文件感觉很尴尬。
引用Cos的一个被接受的答案 https://dev59.com/PHRC5IYBdhLWcg3wFNDX#415444 “`.profile`只是最初由`/bin/sh`使用的登录脚本文件名。bash通常向后兼容`/bin/sh`,如果存在,则会读取`.profile`。”
根据Filip Ekberg的研究/意见https://dev59.com/PHRC5IYBdhLWcg3wFNDX#415410 “`.profile`相当于根用户的`.bash_profile`。我认为更改名称是为了让其他shell(csh,sh,tcsh)也可以使用它。(您作为用户不需要一个)”
回到slhck,关于bash的一条注意事项:
引用
“(…)一旦创建名为`~/.bash_profile`的文件,您的`~/.profile`将不再被读取。”

只是想在这里补充一下,不要忘记做这个并完全关闭终端。然后再次打开它,它应该可以工作了。 在退出所有东西并重新打开之前,没有任何解决方案对我起作用。完美! - filipe.costa01
1
对于我这个Ubuntu用户来说,最好的答案是将.profile文件源到我的.zshrc文件中。只需在.zshrc文件的开头添加source ~/.profile,然后重新加载就可以了。 - Kayote
由于使用了 volta 安装 npm,这个解决方案对我很有帮助。 - CommonSenseCode

11

我尝试并得到了答案,可以尝试取消注释 ~/.zshrc 中的第一个 export 命令:

# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH

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