首页 > 解决方案 > 在 WSL2 上安装 nvm 时,我可以在 Windows 本身中使用它吗?

问题描述

我想在我的 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 -> Windows 上的 node.js


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

标签: node.jswindows-subsystem-for-linuxnvm

解决方案


您是正确的,在 Windows 上运行的唯一受支持的方法nvm是通过 WSL。有一个单独的(与“原始”nvm 无关)nvm-windows项目,但我不能谈论它的质量。在“专业”方面,我确实看到微软在他们的一些Windows的NodeJS文档中引用了它。但作为一个“骗局”,它看起来像是在大约 3 年前的某个地方最后一次更新。这可能是也可能不是(或成为)问题。

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

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

这确实是一个单独的问题,可能应该单独发布,但 WSL2 和 WSL1 确实相得益彰。我将复制/粘贴我不久前所做的 Reddit 帖子:

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

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

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

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

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

最后一点:

我知道 WSL 只允许我安装一些 Linux 发行版。

你可能会感到惊讶。虽然 Microsoft Store 中预装了一些发行版,但 WSL 几乎可以导入任何发行版(微软称其为“任何”)发行版。请参阅此文档


推荐阅读