yarn command not found after installing via npm
As per the yarn installation for yarn v2, they want you to install using npm install -g yarn
. So I ran sudo npm install -g yarn
on Ubuntu 20.04. But after I do that, it says command not found.
❯ sudo npm install -g yarn
> [email protected] preinstall /usr/local/lib/node_modules/yarn
> :; (node ./preinstall.js > /dev/null 2>&1 || true)
❯ yarn --version
zsh: command not found: yarn
Solution 1:
sudo npm install -g npm
then
sudo npm install -g yarn
Then reboot your system. That did it for me. Before a reboot only sudo yarn worked. I tried looking at file permissions but everything seemed in order and the files were executable as expected. Nevertheless after a reboot it worked.
If you go to /usr/local/bin after the installation there's a link there to where yarn.js lives, as expected, and file permissions for it were also correct.
/usr/local/bin is added to $PATH, so it's surprising that it doesn't see the new cmd right away, but perhaps it didn't reload or map it until after the reboot? I don't know. But I just spent a good hour trying to figure this out so I'm posting what worked for me to spare other the hassle.
Solution 2:
If you want to avoid reboot, use
/usr/local/lib/node_modules/yarn/bin/yarn --version
Solution 3:
Uninstall cmdtest
:
sudo apt remove cmdtest
Then, run these commands:
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
Solution 4:
TL;DR
If you are managing node via nvm
, then probably the path to yarn binary is not included in the $PATH
variable. You should add this -
# Add this at the end (or after the $NVM_DIR initialization)
# in your profile - .bashrc | .zshrc | .profile, etc
export PATH="`yarn global bin`:$PATH"
at the end of your profile file (.zshrc
for me) or at least after the $NVM_DIR
initialization.
I have recently faced this issue and while searching for a solution, I landed up here.
Here is what my environment looks like:
- OS: Ubuntu 20.04
- Shell:
zsh
- NodeJS: managing it via
nvm
, and NOTapt
.
After going through all the answers, I was not keen on uninstalling anything. So I tried to dig a bit deeper.
I installed yarn
via npm install -g yarn
command. So the first thing I wanted to verify was the location of the yarn
binary. To do this, I ran the command where yarn
which lists the installation path for the yarn
binary.
$ where yarn
/home/<user_name>/.nvm/versions/node/v16.11.1/bin/yarn
Then it hit me. In my .zshrc
file, I had added the yarn global bin
command (which spills out the directory of all the global packages installed by yarn) at the top like so:
# Top of my .zshrc file
export PATH="`yarn global bin`:$HOME/bin:/usr/local/bin:$PATH"
and as per the installation instruction of nvm
, the $NVM_DIR
(the variable which holds the nvm
directory path) was added at the end of my .zshrc
file.
So when I was starting up my shell, it was actually trying to load the yarn
command (present inside the nvm
directory) even before loading the $NVM_DIR
path.
To solve this, I tweaked my .zshrc
file and moved the yarn global bin
command after the $NVM_DIR
like this:
# 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"
I hope that this would be of help.