安装npm后,使用yarn命令时提示“command not found”的错误

25
根据yarn v2的纱线安装要求,他们希望您使用npm install -g yarn进行安装。 所以我在Ubuntu 20.04上运行了sudo npm install -g yarn。 但是在我这样做之后,它会显示命令未找到。
❯ sudo npm install -g yarn

> yarn@1.22.10 preinstall /usr/local/lib/node_modules/yarn
> :; (node ./preinstall.js > /dev/null 2>&1 || true)


❯ yarn --version
zsh: command not found: yarn

1
不要使用 sudo 运行它。如果您的路径设置正确,则此问题是由用户引起的。 - Hamza Anis
11个回答

36
sudo npm install -g npm

然后

sudo npm install -g yarn

然后重新启动系统。 对我来说有效。 在重新启动之前,只有sudo yarn命令可以使用。我尝试查看文件权限,但一切似乎都很正常,文件也像预期的那样可执行。尽管如此,在重新启动后它可以工作了。

如果你在安装后前往/usr/local/bin,那里会有一个链接指向yarn.js所在的位置,而且文件的权限也是正确的。

/usr/local/bin已经添加到$PATH中,所以让人惊讶的是它没有立即看到新的命令,但也许在重新启动之前它没有重新加载或映射?我不知道。但我刚刚花了一个小时来解决这个问题,所以我发布了我的解决方法,以避免其他人遇到类似的麻烦。


对于未来的观众,我在执行此操作之前删除了位于appdata / roaming中的npm和npm_cache,因为即使这个修复程序对我也没有解决问题。删除后,我运行了这些命令,重新启动了电脑,问题得到了解决。 - wiregh0st
在Ubuntu 20.04上,不需要重新启动即可完成此操作。 - lacostenycoder

14

TL;DR 如果你通过nvm管理node,那么yarn二进制文件的路径可能没有包含在$PATH变量中。你应该添加这个路径 -

# Add this at the end (or after the $NVM_DIR initialization)
#   in your profile - .bashrc | .zshrc | .profile, etc
export PATH="`yarn global bin`:$PATH"

在你的配置文件末尾(对于我来说是.zshrc),或者至少在$NVM_DIR初始化之后添加以下内容。


最近我遇到了这个问题,在寻找解决方法时,我来到了这里。

这是我的环境:

  • 操作系统:Ubuntu 20.04
  • Shell: zsh
  • NodeJS:通过nvm管理,而非apt

经过查看所有答案后,我不想卸载任何软件。所以我试图深入了解一些信息。

我通过npm install -g yarn命令安装了yarn。因此,我想要验证的第一件事是yarn二进制文件的位置。为了做到这一点,我运行了where yarn命令,它列出了yarn二进制文件的安装路径。

$ where yarn

/home/<user_name>/.nvm/versions/node/v16.11.1/bin/yarn

然后我想到了一个办法。在我的.zshrc文件中,我在顶部添加了yarn global bin命令(它会列出由yarn安装的所有全局包的目录),如下所示:

# Top of my .zshrc file
export PATH="`yarn global bin`:$HOME/bin:/usr/local/bin:$PATH"
根据 nvm 的安装指南,我在我的 .zshrc 文件的结尾添加了包含nvm目录路径的变量$NVM_DIR。因此,在启动shell时,它实际上尝试加载$NVM_DIR路径之前就加载了nvm目录中存在的yarn命令。

为了解决这个问题,我调整了我的.zshrc文件,并将yarn global bin命令移动到$NVM_DIR之后,像这样:

# Top of my .zshrc file
export PATH="$HOME/bin:/usr/local/bin:$PATH"

# ...
#
# Something in between
#
# ...

# Bottom of my .zshrc file
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

# Here is where I have added the path to yarn global
export PATH="`yarn global bin`:$$PATH"

希望这可以有所帮助。


对我来说,运行 nvm current 显示“none”。选择一个专用版本后,例如 nvm use 16 或 'lts',它又可以正常工作了。 - nonNumericalFloat
如果yarn不在路径上,运行yarn是否可以在rc启动文件中工作? - Lee Meador
将NVM初始化移动到yarn导出之上就解决了问题! - Joshua S

5

3

卸载 cmdtest

sudo apt remove cmdtest

接下来,运行以下命令:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn

1
如果您想避免重新启动,请使用/usr/local/lib/node_modules/yarn/bin/yarn --version

1

yarn 文档缺少一步,你需要在安装和运行 yarn --version 之间重新启动计算机。

这对我很有效。


1

这与 OP 遇到的问题不同,但如果您在使用多个 Node 版本的环境中工作,也会遇到此错误。在这种情况下,您需要在每个 Node 版本下安装 yarn,如下所示:

/node/vx.x.x/lib/node_modules/yarn/bin/yarn.js 

在切换版本后,如果以上内容不存在,则直接运行

npm install -g yarn 

如果yarn已安装在低于其他答案所述版本的情况下,将会出现问题。

0

我最近遇到了类似的情况,以下是我的解决方法。

首先,我对当前的npm安装进行了故障排除:

npm config -list

我有一个~/.npmrc文件,它有一个不同的前缀:

PREFIX=/opt/homebrew

这使得我的npm安装在/opt/homebrew下寻找全局安装的软件包。

在我的情况下,我正在使用不同的npm安装(不再使用homebrew)。一个简单的解决方法是从~/.npmrc文件中删除此自定义PREFIX,问题就解决了。

现在npm在/usr/local/bin/下寻找全局安装的软件包。


命令应该是 npm config list,使用 npm config -list 会报错。 - undefined

0

如果你使用sudo安装yarn,它将仅对超级用户可用。因此,你可以在命令前不加sudo来安装它,它会正常工作。

npm -i g yarn


-1

我在git bash上使用npm install -g yarn安装了yarn,并使用yarn -v测试了已安装的yarn版本,但当我使用yarn start时,它会给我返回以下错误:

C:\Users\{username}\AppData\Roaming\npm/node_modules/node/bin/node: line 1: This: command not found

以下是我用于解决问题的简单步骤(适用于Windows 10):

  1. 卸载node.js
  2. 重新启动计算机
  3. 删除C:\Program Files\nodejsC:\Users\{username}\AppData\Roaming\npm
  4. 重新安装node.js,并使用node -v进行检查
  5. 以管理员身份启动vs code并编写npm install
  6. 编写yarn start

1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

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