node.js - 适用于 Linux (WSL) 的 Windows 子系统使用与 Windows 共享的 Node.js 安装:Node.js npm 和 npx 二进制文件不起作用
问题描述
我最近搬到了 Windows + WSL 环境(顺便说一下,WSL 进展顺利)。这样做的主要原因是有一个用于开发的 Linux 环境,并有一个用于其他应用程序和游戏的 Windows,而无需重新启动我的计算机(之前有一个双启动设置)。
在设置过程中,我发现大多数 Windows 安装的二进制文件都可以从 WSL 执行。因此,我可以在 Windows 中安装 java jdk 并将二进制文件符号链接到 WSL共享 jdk 安装,这完美无缺)。但是对节点做同样的事情,节点 npm 和 npx 二进制文件不工作:(
我想拥有一个可以使用nvm windows进行管理的单节点安装。所以我通过以下方式开始安装:
在 WSL 中,我按照此处的 Nick Janetakis 指南(感谢Nick )配置了我的/etc/wsl.conf,以便将 Windows 驱动器安装在/而不是/mnt/:
/etc/wsl.conf
[automount]
root = /
options = "metadata"
然后在windows中安装节点:
C:\Windows\system32> nvm install 10.15.0
... installing process...
C:\Windows\system32> nvm use 10.15.0
...success message...
C:\Windows\system32> node -v
v10.15.0
C:\Windows\system32> npm -v
6.4.1
到目前为止,一切都按预期工作。下一步是将 Windows 节点二进制文件符号链接到 WSL。二进制文件位于:
C:\Windows\system32> where node
C:\Program Files\nodejs\node.exe
C:\Windows\system32> where npm
C:\Program Files\nodejs\npm
C:\Program Files\nodejs\npm.cmd
C:\Windows\system32>where npx
C:\Program Files\nodejs\npx
C:\Program Files\nodejs\npx.cmd
所以在 WSL 终端内(请记住,我的磁盘安装在 /c 而不是 /mnt/c 作为默认行为):
user@host:~$ mkdir ~/bin
user@host:~$ ln -s /c/Program\ Files/nodejs/node.exe ~/bin/node
user@host:~$ ln -s /c/Program\ Files/nodejs/npm ~/bin/npm
user@host:~$ ln -s /c/Program\ Files/nodejs/npx ~/bin/npx
和...
user@host:/d/tmp$ node -v
v10.15.0
user@host:/d/tmp$ echo "console.log('Hello World');" >> index.js
user@host:/d/tmp$ node index.js
Hello World
伟大的!(注意:由于节点安装在 Windows 上,当在 WSL 上时,您必须在磁盘驱动器中使用它,在这种情况下是 /d)。但...
user@host:~$ npm -v
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module 'C:\home\user\bin\node_modules\npm\bin\npm-cli.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
现在这就是我写这篇文章的原因。错误很明显,npm 试图在一个路径中找到 npm-cli.js,该路径是 Windows 路径中 npm 符号链接位置的有线组合。
有没有办法告诉 npm/npx 它必须从 WSL 中找到其文件的正确 Windows 路径?
很抱歉这个冗长的问题,但由于非常特殊的设置,我认为上下文化是必要的。
解决方案
我无法在 Windows 10 中使用 Ubuntu 20.04 LTS 在 WSL 中安装 npm。
但是,当我按照此处的说明进行操作时,我确实设法使其正常工作。请注意,它说它适用于 WSL2,但安装节点的步骤在 WSL1 环境中有效(现在是 7 月 20 日,我仍然无法在我的 Windows 10 版本中获得 WSL,啊!)。
简而言之,此解决方案可让您在 WSL 环境中安装 nvm(节点版本管理器)。
sudo apt-get install curl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
然后,您可以安装默认情况下随 npm 一起提供的较新版本的节点,例如
nvm install --lts
推荐阅读
- firebase - react-native-firebase v6 -> TypeError: undefined is not a function near (...'this.firestore.native.collectionGet...')
- jquery - 在 DataTables 的第二页中添加行后,操作事件不起作用
- javascript - 如何在 Javascript 自动填充中获取整个单词
- javascript - nextjs 收到有关区分大小写的文件名的警告
- c# - Xamarin XAML 分组 CollectionView 示例不起作用
- javascript - 继承类的原型对象如何等于 JavaScript 中原始类的新实例?
- excel - 将一列分成多列
- javascript - 已安装实时服务器但无法在 VS 代码中运行
- reactjs - 如何将 Contentful api 数据与 React Context API(尤其是 useContext)一起使用?
- azure - 未加载运行时堆栈 - Azure - Github Actions