18

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.

5 Answers5

37

Try this

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
sudo apt install npm
Jatin Mehrotra
  • 9,286
  • 4
  • 28
  • 67
12

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.

Kidd Tang
  • 1,821
  • 1
  • 14
  • 17
  • 1
    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. – Harold Jan 27 '23 at 23:23
7

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.

Subhasish Paul
  • 211
  • 3
  • 7
6

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.

Stuart Cardall
  • 2,099
  • 24
  • 18
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.

donmartin
  • 1,753
  • 2
  • 15
  • 30