在 zsh 中安装 npm 后找不到命令

Posted

技术标签:

【中文标题】在 zsh 中安装 npm 后找不到命令【英文标题】:Command not found after npm install in zsh 【发布时间】:2012-09-26 11:20:41 【问题描述】:

我在 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 的路径缓存? 执行此操作后仍然没有任何内容 =/ 我不知道为什么,但是在同一个终端中去 bash(通过键入 bash 本身并按 enter)然后切换回 zsh(通过键入 zsh 本身并按 enter),修复它! ! 【参考方案1】:

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

所有丢失的命令都会被检测到。

Mac 用户:添加source /Users/YOUUSERNAME/.bash_profile

【讨论】:

对我来说,我必须来源 ~/.bashrc 我在 Windows 10 上使用 WSL,我必须添加 `source /home/USERNAME/.profile' 才能让它工作,但它就像一个魅力 我必须使用 .bashrc 而不是 bash_profile。当我获取 bash_profile 时,我得到了大量在 zsh 中找不到的命令 我在 Mac OS Catalina 中的用户文件夹不包含此 .bash_profile。我也无法通过搜索找到它。更新.zshrc 文件并重新打开终端后,它的第一行是no such file or directory: /Users/m...i/.bash_profile。这可能是 Catalina 的重大变化吗? 这也适用于 Mac 用户:source /Users/$USER/.bash_profile 或者更简单的source $HOME/.bash_profile【参考方案2】:

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

【讨论】:

在 mac 上,我将export PATH="$HOME/.npm-packages/bin:$PATH" 添加到我的~/.zshrc $HOME/.npm-global/bin 使用 npm v6.9.0 为我工作 如果您没有通过 Homebrew 安装 Node.js 或者您不记得了怎么办?你如何找到'usr/local/share/npm/bin'?【参考方案3】:

如果您使用 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

【讨论】:

谢谢!这在 Ubuntu 20.04 上对我有用。现在我可以使用 nvm、npm、node 命令了 :) 这适用于我在 Ubuntu 18.04 上。 在 MacOX 11.6.1 上为我工作,谢谢!【参考方案4】:

Mac 用户:

除了以下内容: nvm, iterm2, zsh

我发现使用.bashrc 而不是.profile.bash_profile 引起的问题要少得多。

只需将后者添加到我的.zshrc 文件中:

source $HOME/.bashrc

【讨论】:

我不得不使用source $HOME/.bash_profile,但这是迄今为止最好的答案。实际上,我已经为 bash 正常配置了 sdkman 和节点。我将节点模块添加到路径中,但不断收到“权限被拒绝”。这解决了这个问题!回到编码!【参考方案5】:

仅限 Mac 用户 假设您之前安装了 nvm,并且 npm 正确 (下面是关于如何安装它的分步指南:install nvm for Mac users )。

你需要:

找到“.zshrc”文件:

打开终端。 输入 open ~ 以访问您的主目录。 按Cmd + Shift + . 可在Finder 中显示隐藏文件。 找到 .zshrc

编辑“.zshrc”文件:

在文件顶部添加:source /Users/_user_Name_/.bash_profile(_user_Name_ 代表您的用户。

保存文件,然后关闭终端窗口。

【讨论】:

尽管这看起来像是一个 hack,但我发现它是在 Catalina 升级后将我所有预安装的东西从 bash 引入 zsh 的好方法。 这对我来说就是答案,因为简单地运行 source /Users/_user_Name_/.bash_profile 仅在当前会话期间持续。 很清楚,看起来“打开~”会打开一个新的Finder窗口,你可以正常打开它。和'Cmd + Shift +。'是隐藏/显示隐藏文件的切换。我相信从 Finder 查看隐藏文件的能力是必须首先配置的设置,所以也许通过终端是解决这个问题的方法。但是如果这个设置已经配置好了,似乎就不需要使用终端打开Finder了。 .bash_profile 不一定包含有效的zsh 代码; bashzsh 是两个相似但不同的 shell。 在我的例子中,.bash_profileoh-my-zsh。如果有人为此挣扎。【参考方案6】:

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

首次打开:

nano .zshrc

并取消注释第二行:

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

这对我有用,无需写任何行,我认为 Mac 上也可以使用此选项。

【讨论】:

但这对我不起作用。即使我确实在我的 .zshrc 中添加了源 $HOME/bin 它也不起作用。每次打开 shell 提示符时都会得到一些输出。【参考方案7】:

对于 ma​​cOS 用户:考虑使用.profile 代替 .bash_profile。您可能仍需要手动将其添加到~/.zshrc

source $HOME/.profile

注意默认没有这样的文件! 引用 slhck https://superuser.com/a/473103:

无论如何,如果文件不存在,您可以简单地创建文件,然后在文本编辑器中打开它。

touch ~/.profile
open -e !$

附加值是,使用单个文件设置环境感觉很好,无论使用何种外壳。在 zsh 中加载 bash 配置文件感觉很尴尬。

引用 Cos https://***.com/a/415444/2445063 接受的答案

.profile 只是/bin/sh 最初使用的登录脚本文件名。 bash,通常与 /bin/sh 向后兼容,如果存在则将读取 .profile

根据 Filip Ekberg 的研究/意见https://***.com/a/415410/2445063

.profile 相当于根的.bash_profile。我认为更改名称是为了让其他 shell(csh、sh、tcsh)也可以使用它。 (你不需要一个作为用户)

回到 slhck,关于 bash 的注意事项

(...) 一旦你创建了一个名为~/.bash_profile 的文件,你的~/.profile 将不再被读取。

【讨论】:

只是在这里添加我的 10 美分,不要忘记这样做并完全关闭终端。然后再次打开它,它应该可以工作。在退出一切并重新打开之前,没有一个解决方案对我有用。完美! 对我来说最好的答案,作为一个 Ubuntu 用户。我只需要将.profile 文件导入我的.zshrc 文件。只需在.zshrc 文件的开头添加source ~/.profile 并重新加载即可。【参考方案8】:

我通过brew upgrade node解决了这个问题

【讨论】:

这对我有用,应该是任何人在尝试硬修改系统文件作为后续步骤之前的第一步,如果这对你不起作用。 为我工作谢谢。讨厌这样的隐形错误【参考方案9】:

要尝试的另一件事是我的答案是取消注释~/.zshrc 中的第一个export

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

【讨论】:

【参考方案10】:

以我的拙见,首先,您必须确保安装了任何类型的 Node 版本。对于该类型:

nvm ls

如果你没有得到任何版本,这意味着我是对的 :) 然后你必须输入:

nvm install <node_version**>

**你可以在Node website找到的实际版本

然后您将拥有 Node,您将能够使用 npm 命令

【讨论】:

谢谢@daxtersky。这正是我所需要的。 这也为我做了。 node --version 与nvm ls 不同,运行命令后现在好了。【参考方案11】:

对于仍有问题的任何人。不要忘记注销并再次登录。

【讨论】:

这是 Mac OS Catalina 上的解决方案。 你能澄清一下吗?我在哪里登录和注销?天哪,我的脸书账号?我的 Instagram 帐户?我的推特账号? 你的电脑【参考方案12】:

转到您的终端并运行:nano .zshrc

注意:如果你没有这个目录,你可以使用 mkdir 命令创建它: mkdir ~/.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 -v 作为快速测试。

【讨论】:

【参考方案13】:

对我来说,将export PATH=/usr/local/share/npm/bin:$PATH 添加到.zshrc 的公认答案不起作用。我尝试添加 NVM_DIR 也解决了我的问题。

    试试vi .bashrc

    你会发现如下一行。复制它。

    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

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

    重启终端

希望这能解决您的问题。

【讨论】:

我的情况: 1. 我已经通过 nvm 安装了 Node,一切正常。 2.然后同时我从bash切换到zsh和节点。停止工作。所以上面的答案对我来说是解决办法。【参考方案14】:

我在安装 Vercel CLI 时遇到了同样的问题。

就我而言,使用sudo 安装。

示例:sudo npm i -g vercel

【讨论】:

【参考方案15】:

它在 zsh 中对我有用。试试nvm install --latest-npm

【讨论】:

【参考方案16】:

在我的情况下,重新安装节点解决了这个问题。任何人都可以通过以下网站安装节点:

https://nodejs.org/en/download/

【讨论】:

重新安装 node js 解决了这个问题,因为 nodejs 和 npm 的二进制路径作为设置的一部分被添加到 PATH 系统变量中。重新安装应该是最后的手段,在zshrc中设置npm路径或其他涉及设置路径的解决方案应优先考虑。【参考方案17】:

就我而言,我用 NVM 安装了 node,安装 z Shell 后,node 和 nvm 命令不起作用。所以对我有用的是用这个命令再次安装 nvm:

wget https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
sudo zsh install.sh

上面的命令再次安装了nvm,由于已经安装了node,它在.zshrc文件中自动添加了node路径,一切正常。

【讨论】:

【参考方案18】:

对于 MAC:我尝试了上述一些方法,但无济于事,无法正常工作。

我确实安装了 BREW,所以虽然这不是最好的方法,但使用 zsh,我做到了:

    sudo chown -R $(whoami) /usr/local/share/man/man8(用于 brew 访问) brew update && brew install npm(我已经安装了节点) npm -v(确认安装) nano ~/.zshrc(清空文件更改并保存)

这对我有用。希望这可以帮助某人。 #1 困扰着我,但我现在会忍受。

【讨论】:

【参考方案19】:

我认为问题更多在于 ZSH 的完成。

您需要在 .zshrc 中添加这一行:

zstyle ':completion:*' rehash true

如果你有Oh-my-zsh,已经做了一个PR,可以集成直到拉取:https://github.com/robbyrussell/oh-my-zsh/issues/3440

【讨论】:

【参考方案20】:

在 Mac Catalina 上使用 Node v12+,全局依赖项显示在 /$HOME/.npm-global/bin

添加

export PATH="$HOME/.npm-global/bin:$PATH"

~/.bash_profile 将所有内容保存在一个位置,然后添加

source $HOME/.bash_profile

发送至~/.zshrc,如果还没有的话就可以了。无需注销并重新登录,只需重新启动终端即可。

【讨论】:

【参考方案21】:

对于 OSX Catalina 用户

brew install node@14

我正在使用节点 14,因为 Angular 不支持最新版本(不知道为什么).. 那么

echo 'export PATH="/usr/local/opt/node@14/bin:$PATH"' >> ~/.zshrc

【讨论】:

我听说 Brew 不适合生产环境,因为它可能会导致公司安全策略出现问题。我不会推荐这个,除非它是你的个人机器。 谢谢@Shah 我会记住这一点,从没想过 brew 有一些安全问题。非常感谢。 这不是 Brew,更多的是您的公司可能不会授予某些操作的权限【参考方案22】:

只要在我的终端上写这个就解决了这个问题。请注意,我必须在我的项目文件夹中单独编写它。

export PATH="$HOME/.npm-packages/bin:$PATH"
export PATH="$HOME/.node/bin:$PATH"

来源:https://cloudlinuxtech.com/npm-command-not-found-fix/

【讨论】:

【参考方案23】:

有时简单的事情会奏效。卸载节点并再次安装对我有用。

brew uninstall node
brew install node
npm update

【讨论】:

以上是关于在 zsh 中安装 npm 后找不到命令的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 中安装 Tesseract.js 后找不到名称“缓冲区”错误

mac上的xampp-vm在堆栈管理器中安装后找不到'/opt/lampp'目录

在我的 Mac 操作系统中安装 libevent 后找不到文件 <event2\event.h>

通过 npm 安装后找不到 yarn 命令

sh: react-scripts: 运行 npm start 后找不到命令

typescript/raven.d.ts,行:205 在离子中安装 npm 时找不到名称“未知”