在 WSL2 上安装 nvm 时,我可以在 Windows 本身使用它吗?

When installing nvm on WSL2, can I use it in Windows itself?

我想在我的 Windows 机器上安装 node.js,并且我想使用 nvm 来执行此操作。在我知道的 windows 机器上安装实际 nvm 的唯一方法是使用 WSL(我目前正在考虑使用 WSL2,但如果有理由使用 1,请告诉我,我没有经验)。据我所知,WSL 有点类似于(或者是?)虚拟机,在这种情况下,只有在我想在 WSL 中使用 node.js 时,在 WSL 中安装 nvm 才有意义。还是我错了,有一些魔法在起作用,使 Windows 本身能够使用安装在 WSL 中的 nvm?


简而言之:

WSL 上的 nvm -> WSL 上的 node.js

WSL 上的 nvm -> node.js Windows


我知道 WSL 只允许我安装一些 linux 发行版。我只是为了争论才说“安装在 WSL 上”。

您是正确的,运行ning nvm 在 Windows 上唯一受支持的方法是通过 WSL。 Windows 有一个单独的(与“原始”nvm 无关)nvm-windows project, but I can't speak to the quality of it. On the "pro" side, I do see that Microsoft references it in some of their NodeJS 文档。但作为一个“骗局”,它看起来像是大约 3 年前的某个地方最后一次更新。这可能是也可能不是(或成为)问题。

是的,如果您在 WSL 下使用 nvm,它只会安装 Linux 版本。您不能使用它来管理 Node-for-Windows 安装。正如@ThomasUrban 在评论中指出的那样,已经安装了 Windows 节点版本甚至可能在尝试安装 nvm.

时导致问题

我个人更喜欢n,但它也会有类似的限制。

这确实是一个单独的问题,可能应该单独 post 编辑,但 WSL2 和 WSL1 确实相互补充。我要去 copy/paste 来自 Reddit post 我前一段时间做过:

  • WSL2 相对于 WSL1 的优势:
    • 真正的 Linux 内核,它允许像 Docker 这样的功能成为 运行 的本机功能。另一方面,WSL1 通过尝试将它们映射到等效的 Windows API.
    • 来模拟 Linux APIs
    • 允许 VPN、隧道等的真实网络堆栈
    • ext4 性能略优于 WSL1
    • 通过使用虚拟 HDD (.vhdx)更强大的文件系统
  • 与 WSL1 相比,WSL2 的缺点:
    • 性能变慢 NTFS/drvfs。说真的,WSL 内核存储库的 git clone 在 WSL1 上需要几秒钟,但在 WSL2 上大约需要 10 分钟。如果您需要使用 NTFS 上的文件,请为此保留一个 WSL1 实例。

    • 网络位于 Windows 主机“后面”的虚拟 NIC 上。这意味着如果您 运行 WSL2 实例上的一项服务(例如 ssh 或 http),如果没有一些骇人听闻的端口转发,您网络上的其他设备将无法使用该服务。

      WSL1 的网络堆栈是伪桥接的,因此可以直接从 Windows 主机 IP 地址访问网络服务。

      因此,如果您使用 WSL 进行 React/Angular/Svelte/Vue/etc 开发,从网络的角度来看,WSL1 更直接。

所以也许令人惊讶的是,对于很多 Node 开发人员来说,WSL1 可能是更好的选择。您始终可以安装第二个副本并将其设为 WSL2 - 两者将 运行 并排放置。

最后一点:

I am aware that WSL only allows me to install some Linux distributions.

你可能会感到惊讶。虽然 Microsoft Store 中有一些预打包的发行版,但 WSL 能够导入几乎任何(微软称完全“任何”)发行版。参见 this doc