一、NVM入门:什么是NVM、为什么需要NVM、NVM与nvm-windows的区别、NVM的核心价值

1.1 什么是NVM?

NVM,全称是 Node Version Manager。

说白了,它是一个用来管理 Node.js 版本的工具。你可以在同一台电脑上,随时切换不同的 Node.js 版本。

我刚开始接触前端时,项目里用的还是 Node 8。后来新项目直接上了 Node 16。那时候我电脑上只装了一个 Node,每次切换项目都要卸载重装,折腾得够呛。后来发现了 NVM,才算是解脱了。

NVM 本身是一个 Shell 脚本,最初只支持 macOS 和 Linux。后来社区为了照顾 Windows 用户,搞了一个独立的移植版,叫 nvm-windows。这个我们后面会细说。

一句话总结:NVM 就是 Node.js 的「版本遥控器」。想用哪个版本,一键切换就行。

1.2 为什么需要NVM?

你可能会问:我直接装一个最新的 Node 不就行了?

嗯,现实没这么简单。我遇到过好几次这样的情况:

  • 老项目依赖某个旧版本的 Node(比如 12.x),升级 Node 后直接报错,依赖装不上。
  • 新项目要求 Node 18+,但你的电脑上还是 Node 14。
  • 团队里有人用 Windows,有人用 Mac,Node 版本不一致导致 CI/CD 构建失败。

这些场景,说白了就是 版本冲突。没有 NVM,你只能手动卸载、安装、再卸载、再安装。有了 NVM,一切就简单了。

我的建议:不管你是刚入门还是老手,都别直接在系统里装 Node。先装 NVM,再通过 NVM 装 Node。这是最省心的做法。

1.3 NVM 与 nvm-windows 的区别

很多人容易搞混这两个东西。我刚开始也以为它们是一样的,后来踩了坑才发现区别很大。

对比项 NVM(原版) nvm-windows
支持平台 macOS、Linux Windows
实现方式 Shell 脚本(bash/zsh) Go 语言编译的 exe 程序
安装方式 curl/wget 安装脚本 下载安装包或通过 Scoop/Chocolatey
命令风格 nvm use 16.20.0 nvm use 16.20.0(基本一致)
核心差异 通过修改 PATH 环境变量切换版本 通过符号链接(symlink)切换版本
是否官方 官方维护(nvm-sh/nvm) 社区维护(coreybutler/nvm-windows)

注意:nvm-windows 不是 NVM 的「Windows 版」,而是一个独立的项目。它们的命令虽然很像,但底层实现完全不同。千万不要在 Windows 上尝试装原版 NVM,会报错的。

1.4 NVM 的核心价值

NVM 到底能帮你解决什么问题?我总结了几点:

  1. 版本自由切换:一个命令就能在不同 Node 版本之间跳转,不用卸载重装。
  2. 项目级版本管理:每个项目可以指定自己的 Node 版本,互不干扰。
  3. 快速安装新版本:想尝鲜 Node 最新版?一行命令搞定。
  4. 全局工具隔离:不同 Node 版本下的全局包(比如 yarn、pnpm)不会冲突。
  5. 团队协作标准化:配合 .nvmrc 文件,整个团队用同一个 Node 版本。

举个例子。我之前维护一个老项目,用的是 Node 12。同时我在开发一个新项目,需要 Node 18。没有 NVM 的时候,我每天要手动卸载重装两次。有了 NVM,我只需要:

# 切换到老项目
nvm use 12.22.12
npm start

# 切换到新项目
nvm use 18.17.0
npm run dev

整个过程不到 5 秒。你想想看,这省了多少事。

核心价值一句话:NVM 让你从「版本管理」的泥潭里解脱出来,专注于写代码本身。

1.5 NVM 的核心工作流程

下面这张图展示了 NVM 的核心工作流程。你可以看到,NVM 就像一个中间层,帮你管理所有 Node 版本。

NVM 核心工作流程 NVM 核心工作流程 开发者 NVM 版本管理器 nvm install / nvm use / nvm ls 已安装的 Node 版本列表 Node 12.22.12 (老项目) Node 16.20.0 (稳定版) Node 18.17.0 (新项目) 当前激活的 Node 版本 NVM 通过修改 PATH 或符号链接,让系统只「看到」当前选中的 Node 版本

从这张图你可以看到,NVM 的核心逻辑其实很简单:

  • 你告诉 NVM 想用哪个版本
  • NVM 去版本列表里找到对应的 Node
  • 然后让系统「以为」那个版本就是唯一的 Node

嗯,就是这么回事。后面的章节,我会带你一步步把 NVM 装起来,配置好,然后真正用起来。