nvm 是如何在操作系统文件层面管理 Node.js 版本的?

很多人知道 nvm(Node Version Manager)可以一键切换 Node.js 版本,但它到底是如何在系统文件层做到“多版本共存、快速切换”的呢?下面用简单易懂的方式带你了解。


核心思路:把不同版本放在不同文件夹里

nvm 不会把 Node.js 安装在系统默认目录(比如 /usr/local/binC:\Program Files),而是放到它自己的目录下。例如:

在 Linux / macOS:

1
2
3
4
~/.nvm/versions/node/
├── v14.21.3/
├── v16.20.0/
└── v18.17.1/

在 Windows(nvm-windows):

1
2
3
4
D:\Program Files\nvm\
├── v14.21.3\
├── v16.20.0\
└── v18.17.1\

每个版本都有一套完整的 Node 和 npm 文件,不互相覆盖。


一、切换版本时做了什么?

当你运行:

1
nvm use 16

nvm 的操作大致有两步:

① 修改软链接 / 文件映射

  • 在 Linux/macOS 中,node 命令其实是一个指向某个版本目录里 node软链接(symlink)
  • 在 Windows 中,使用的是一个 硬链接 / 文件拷贝或 shim 文件

例如:

1
/usr/local/bin/node  ->  ~/.nvm/versions/node/v16.20.0/bin/node

这意味着:你每次敲 node,实际运行的是当前版本对应的文件。


② 修改环境变量(PATH)

nvm 通过改变当前终端会话的 PATH,让系统优先找到对应版本的 Node。

例如切换后,PATH 会变成:

1
PATH=~/.nvm/versions/node/v16.20.0/bin:$PATH

这样无需删除旧版本,只是“指向变了”。


二、安装新版本时发生了什么?

当你运行:

1
nvm install 18

nvm 会:

  1. 下载该版本 Node.js 的压缩包或安装包
  2. 解压到自己的版本目录
  3. 如果需要,可自动设置为默认版本(alias)

不会影响已有版本,彼此隔离。

三、完整过程展示

image-20250928144743669


总结

nvm 是通过为每个 Node 版本单独建目录,并用软链接 / PATH 指向当前版本,实现版本管理与快速切换的。

这就是它在操作系统文件层面工作的核心逻辑。

基于此,我们也可以更好的了解到 nvm 的特点:

  • 多版本共存:每个版本独立存放
  • 快速切换nvm use 16 一秒换版本
  • 无需管理员权限:不会修改系统目录
  • 支持默认版本设置nvm alias default 18
  • 项目兼容性高:适合开发测试多版本环境