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 NOT apt.

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.