一、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 到底能帮你解决什么问题?我总结了几点:
- 版本自由切换:一个命令就能在不同 Node 版本之间跳转,不用卸载重装。
- 项目级版本管理:每个项目可以指定自己的 Node 版本,互不干扰。
- 快速安装新版本:想尝鲜 Node 最新版?一行命令搞定。
- 全局工具隔离:不同 Node 版本下的全局包(比如 yarn、pnpm)不会冲突。
- 团队协作标准化:配合
.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 去版本列表里找到对应的 Node
- 然后让系统「以为」那个版本就是唯一的 Node
嗯,就是这么回事。后面的章节,我会带你一步步把 NVM 装起来,配置好,然后真正用起来。