在Windows的Ubuntu子系统(WSL)上,npm命令无法正常工作

4
我正在运行最新稳定版本的Windows,通过cmder wslbridge运行Ubuntu bash(我尝试直接运行bash但出现相同错误)。移动到基于Windows的React Native文件夹并尝试运行一些命令行,如npm run androidreact-native run-androidgradlew clean总是会产生错误;

enter image description here

enter image description here

令人惊讶的是,一些其他命令(如npm start)可以正常工作...

而npm会打印出: /usr/local/bin/npm

我在Windows和Ubuntu上都安装了npm,在Ubuntu中运行whereis npm命令会显示:

enter image description here

我真的很困惑;在Windows文件夹中运行npm命令时,应该触发哪个npm?是Windows还是WSL的npm?!

我尝试了很多建议的解决方案,但似乎都没有起作用...


@Biswapriyo 如之前所述,我正在使用带有bash WSL桥接的Cmder,并且颜色主题只有oh-my-zsh……但是我会尝试使用纯净的cmd! 编辑:在cmd.exe中尝试了一下,完全相同的错误! - Solly
你在Windows编辑过gradlew吗?由于Windows使用回车符,可能会出现一些错误。尝试将行尾从\r\n更改为\n。使用sed命令处理gradlew文件:https://unix.stackexchange.com/questions/138472 - Biswapriyo
1个回答

2

如你所说,你不确定运行命令时实际上运行了什么。如果你运行以下命令,它可能会清楚地显示实际上正在运行的内容。

➜  ~ whereis npm
npm: /usr/local/bin/npm /home/damo/.nvm/versions/node/v8.11.1/bin/npm /mnt/c/Program Files/nodejs/npm /mnt/c/Program Files/nodejs/npm.cmd

➜  ~ which npm
/home/damo/.nvm/versions/node/v8.11.1/bin/npm

➜  ~ npm --version
6.4.1

➜  ~ sudo find / -name npm
/home/damo/.npm/10.52.63.39_4783/npm
/home/damo/.npm/npm
/home/damo/.nvm/versions/node/v10.4.1/bin/npm
/home/damo/.nvm/versions/node/v8.11.1/bin/npm
/home/damo/.oh-my-zsh/plugins/npm
/mnt/c/Program Files/nodejs/node_modules/npm
/mnt/c/Program Files/nodejs/node_modules/npm/bin/npm
/mnt/c/Program Files/nodejs/npm
/mnt/c/Users/stangerd/AppData/Roaming/npm

➜  ~ echo $PATH
/home/damo/.nvm/versions/node/v8.11.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/cmder/vendor/conemu-maximus5/ConEmu/Scripts:/mnt/c/Program Files/cmder/vendor/conemu-maximus5:/mnt/c/Program Files/cmder/vendor/conemu-maximus5/ConEmu:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/HashiCorp/Vagrant/bin:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/nodejs:/mnt/c/Program Files/Beyond Compare 4:/mnt/c/ProgramData/chocolatey/bin:/mnt/c/Program Files/Microsoft VS Code/bin:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Users/    stangerd/AppData/Roaming/npm

➜  ~ nvm use 10
Now using node v10.4.1 (npm v6.1.0)

➜  ~ echo $PATH
/home/damo/.nvm/versions/node/v10.4.1/bin:/usr/local/sbin:/usr/local/bin:........

您可以看到,对于我来说,我也有许多版本的npm,但它是我WSL当前使用的nvm版本(通过运行which npm显示)。这是因为当搜索路径时,将使用找到的第一个。在我的所有路径文件夹中,第一个npm实例位于/home/damo/.nvm/versions/node/v8.11.1/bin中。请注意,在使用nvm时,切换节点版本时路径将被更改,并且方便地将此新路径放在所有现有路径文件夹的前面。
另外,值得检查设置的别名,因为这会在查询路径之前进行评估。只需运行alias即可获取列表。
希望这有助于找到实际运行的内容。我很想听听您的进展。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接