In WSL2: Ubuntu 20.04 for Windows 10 nodejs is installed but npm is not working
Asked Answered
T

5

21

I am using WSL2: Ubuntu 20.04 in my Windows 10 operating system. I have installed nodejs using the command sudo apt-get install -y nodejs when I do node -v command I get v12.18.3

mrd@DESKTOP-2EO5K4H:/mnt/c/Users/musfi$ node -v
v12.18.3

but when I do npm -v command I get this below command

mrd@DESKTOP-2EO5K4H:/mnt/c/Users/musfi$ npm -v
-bash: /mnt/c/Program Files/nodejs/npm: /bin/sh^M: bad interpreter: No such file or directory

I also do whereis command. Hope this will help to find solution.

mrd@DESKTOP-2EO5K4H:/mnt/c/Users/musfi$ whereis node
node: /usr/bin/node /usr/include/node /mnt/c/Program Files/nodejs/node.exe /usr/share/man/man1/node.1.gz

mrd@DESKTOP-2EO5K4H:/mnt/c/Users/musfi$ whereis npm
npm: /usr/bin/npm /mnt/c/Program Files/nodejs/npm /mnt/c/Program Files/nodejs/npm.cmd /usr/share/man/man1/npm.1

I have tried almost all the stackoverflow solutions and github issues but nothing is worked for me.
Hope any kind soul has the solution to this problem. Thanks in advance.

Tammara answered 3/9, 2020 at 3:56 Comment(0)
W
46

Try this

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
sudo apt install npm
Widower answered 3/9, 2020 at 4:7 Comment(4)
It has worked. Can you explain to me which PATH you export? And what was the problem?Tammara
PATH is env variable which tells where to look for commands,in your case the npm bin was not at the right path.Widower
The ONLY thing that worked across the entire internet, including Chat GPT. Thank you!Bedtime
Glad it is still helping people.Widower
D
21

A better way is configuring /etc/wsl.conf in your Windows User directory.

Adding this into the /etc/wsl.conf, so Windows Path will not take the precedence

[interop]
appendWindowsPath=false

For more config details check the Microsoft Dev Blog here.

Dextrous answered 11/8, 2021 at 4:58 Comment(2)
This should be the accepted solution. If node/npm is installed in both WSL2 and your Windows host OS, this will cause issues due to path interoperability.Reitman
This worked. For anyone else, the issue I had was: /mnt/c/Windows/system32/nvm: line 1: syntax error near unexpected token (' /mnt/c/Windows/system32/nvm: line 1: Downloading node.js version 14.19.3 (32-bit)... 'Laplante
H
8

Solution for following error: -bash: /mnt/c/Program Files/nodejs/npm: /bin/sh^M: bad interpreter: No such file or directory

Edit ~/.bashrc Append at end of file:

# strip out problematic Windows %PATH%
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')

Now npm init will work.

Handtomouth answered 27/12, 2020 at 17:37 Comment(0)
D
7

To install nodejs in WSL don't use apt follow Microsoft's guidance:

See also how to remove nodejs if you installed it via apt:

For npm to work under WSL1:


WSL2 Notes:

NB: if you use a VPN your container connectivity may be broken under WSL2 (e.g with Cisco AnyConnect) - the fix works but may no longer be needed under AnyConnect (WSL2 on a VPN now works for me after a recent update @ end of July 2022)

I thought my WSL containers were running under WSL2 (I upgraded the WSL kernel with wsl --update) - while setting up Visual Studio with WSL I saw a WSL1 warning. You also have to upgrade containers:

wsl --set-version ubuntu-22.04 2
wsl --set-default-version 2

To get Visual Studio integration working properly with Ubuntu 22.04 in WSL you also currently have to upgrade gzip to install VS Code Server for x64 in WSL (code .: in the Linux terminal):

wget http://ftp.debian.org/debian/pool/main/g/gzip/gzip_1.12-1_amd64.deb
sudo dpkg -i ./gzip_1.12-1_amd64.deb

Finally I upgraded npm & everything works (choose one of the following commands):

  • nvm install-latest-npm
  • npm install -g npm@latest

Azure AD / CLI Notes

If you use nodejs with Azure Active Directory there seems to be an issue with the azure-cli forgetting credentials under WSL1 / WSL2 & persistently telling you to az login. In this case you need to run your local node development instances on Windows.

Dara answered 9/6, 2022 at 17:18 Comment(0)
M
1

For all Unix/Linux/MacOS operating systems, I would always rather go with the "Node Version Manager". It normally works flawlessly on Linux and MacOS (and there's a Windows port for it as well) and enables a very simple way of installing node and npm correctly without the need of being root.

See here: https://github.com/nvm-sh/nvm

I can confirm here on my machine that it also works on Ubuntu 20.04 on WSL2.

Marketplace answered 18/9, 2020 at 18:14 Comment(1)
nvm (and n) are anti-patternsTrent

© 2022 - 2025 — McMap. All rights reserved.