Skip to main content

Command Palette

Search for a command to run...

npm not working in WSL2

Published
1 min read

When trying to run npm in WSL2 I got an error along these lines

/mnt/c/Program Files/nodejs/npm: /bin/sh^M: bad interpreter:

As the message indicates the problem is that WSL2 tries to run the Windows version of npm. You are supposed to be able to run Windows binaries from WSL2 but here there is some script involved (I think) that messes up.

Anyhow, the simplest fix is to just make sure that /usr/bin appears before Program Files in PATH:

PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"

Restart shell, or do that 'source' thing.

References: https://github.com/microsoft/WSL/issues/1512

927 views
A

wsl2 is trying to access node/npm installed on windows. This is because the windows environment variables are accessible through wsl2. You can turn this off by changing appendWindowsPath=False in /etc/wsl.conf .This disables all windows env variable access from wsl2. The downside is that you won't be able to use explorer.exe.

Another way is to use a node virtual environment like nodeenv and install everything inside the environment.

or you could remove the windows node/npm path from wsl2.

PATH=$(REMOVE_PART="/mnt/c/Program Files/nodejs" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')

My nodejs was installed in "/mnt/c/Program Files/nodejs". This will remove nodejs from the wsl path, it should work now. These are some other fixes.