1. 先搞清楚 nvm 到底解决了什么问题以及它和直接装 Node.js 的区别如果你在 Windows、macOS 或 Linux 上做前端或 Node.js 后端开发迟早会遇到版本问题。比如你手头一个老项目需要 Node.js 14但另一个新项目必须用 Node.js 18 或 20。直接安装多个 Node.js 版本管理起来会非常混乱环境变量冲突、全局包路径错乱是家常便饭。nvmNode Version Manager就是专门解决这个痛点的工具。它不是一个独立的运行时而是一个版本管理命令行工具。它的核心价值就两点一键安装/切换多个 Node.js 版本以及为每个版本隔离全局 npm 包环境。这意味着你可以在同一台机器上为项目 A 使用 Node.js 16为项目 B 瞬间切换到 Node.js 20两个版本的全局 npm 包互不干扰。很多人第一次接触时会把它和直接去 Node.js 官网下载安装包搞混。直接安装是“覆盖式”的你只能有一个“当前生效”的 Node.js。而 nvm 是“仓库式”的它帮你维护一个版本列表你只是从中指定一个来“激活”使用。这个根本区别决定了 nvm 是团队协作、多项目并行开发的标配工具。所以这篇文章适合所有需要接触不同 Node.js 版本的开发者无论你是前端、后端还是全栈。最关键的不是学会安装命令而是理解它的工作逻辑以及如何避开那些让新手头疼的“坑”比如脚本执行权限、环境变量失效、安装缓慢等问题。2. 在 Windows 上安装 nvm选对安装包和注意安装路径虽然 nvm 最初是为 Unix 系统macOS/Linux设计的但在 Windows 上也有官方维护的版本就是nvm-windows。这是你唯一应该去下载的 Windows 版 nvm。不要去 GitHub 找其他同名的非官方项目。2.1 安装前的关键准备卸载现有 Node.js这是最重要的一步但很多人会忽略。如果你之前已经通过安装包.msi方式安装了 Node.js必须先彻底卸载它。否则nvm 无法接管 Node.js 的安装路径和环境变量会导致命令冲突出现node命令指向不明的问题。卸载步骤进入 Windows 的“应用和功能”设置。找到Node.js点击卸载。同时检查并删除可能残留的 Node.js 安装目录通常是C:\Program Files\nodejs\。最好也检查一下用户环境变量PATH删除任何与 Node.js 或 npm 相关的路径。完成这步后你的机器上应该没有node或npm命令可用了。这是正确的起点。2.2 下载与安装 nvm-windows访问发布页打开浏览器访问nvm-windows的 GitHub 发布页面。搜索 “nvm-windows releases” 就能找到。选择安装包下载最新版本的nvm-setup.exe。我建议用setup版本因为它能帮你自动配置系统环境变量比手动配置 zip 包省心得多。安装过程注意点安装路径安装程序会询问 nvm 的安装路径。默认是C:\Users\你的用户名\AppData\Roaming\nvm。我强烈建议就用这个默认路径。不要改到C:\Program Files或其它需要管理员权限的目录否则后续操作可能频繁触发权限提示。Node.js 符号链接路径接下来会问你 “Node.js Symlink” 的路径。默认是C:\Program Files\nodejs。这个路径非常重要。nvm 会在这里创建一个符号链接可以理解为一个快捷方式指向你当前激活的 Node.js 版本。系统环境变量PATH里指向的就是这个目录。所以保持默认即可除非这个目录有特殊权限问题。安装完成后一定要重新打开一个全新的命令行窗口CMD 或 PowerShell。这样新的环境变量才会生效。2.3 验证安装与解决首次运行问题打开新的命令行输入nvm version如果正确显示 nvm 的版本号如1.1.12说明安装成功。但很多人在第一次使用nvm list或nvm install时可能会遇到一个经典的 PowerShell 权限错误这正是热搜词里提到的nvm : 无法加载文件 D:\nvm\nodejs\npm.ps1因为在此系统上禁止运行脚本。这个错误和 nvm 本身关系不大而是 Windows 系统默认的 PowerShell 执行策略Execution Policy限制导致的。它禁止运行未签名的本地脚本。解决方法选一种即可方法一推荐仅当前窗口生效以管理员身份打开 PowerShell执行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser然后在弹出的确认提示中输入Y。这仅为当前用户修改策略相对安全。之后在同一个PowerShell 窗口里nvm 命令就可以正常工作了。方法二更便捷如果你不想改策略或者改完依然有问题最直接的办法是改用命令提示符CMD来运行 nvm 命令。nvm-windows 在 CMD 下工作是完全正常的不会触发 PowerShell 的脚本策略。对于日常的版本安装、切换用 CMD 足够了。我个人的习惯是在 CMD 里管理版本nvm install,nvm use在 VS Code 的终端可以设置为 CMD或其它 IDE 终端里进行项目开发。这样可以完美避开 PowerShell 的权限困扰。3. 核心使用流程安装、切换、查看与日常管理nvm 的命令非常简洁核心就是几个动词。下面我们按照实际使用的顺序来走一遍。3.1 查看可安装版本与安装 Node.js安装好 nvm 后第一件事是安装一个 Node.js 版本。查看远程可用版本nvm list available这个命令会列出所有官方可安装的 Node.js 版本号。你会看到很多版本包括最新的 Current 版本、长期支持LTS版本以及较旧的版本。安装指定版本 假设你需要安装最新的 LTS 版本它的代号可能是 “Hydrogen”。你可以直接安装nvm install lts或者安装一个精确版本nvm install 18.19.0安装过程注意nvm 会从 Node.js 官方源下载速度取决于你的网络。如果遇到下载缓慢或超时是因为默认源在国外。我们可以配置淘宝镜像来加速这步很重要nvm node_mirror https://npmmirror.com/mirrors/node/ nvm npm_mirror https://npmmirror.com/mirrors/npm/设置镜像后再执行nvm install命令速度会有显著提升。验证安装安装完成后nvm 默认不会自动“使用”这个新版本。你需要先“切换”到它见下文。但你可以通过以下命令查看已安装的版本列表nvm list或nvm ls你会看到所有已安装的版本前面带*或-的表示当前正在使用的版本。3.2 切换与使用版本这是 nvm 最常用的功能。切换版本nvm use 18.19.0或者如果你安装时用了别名ltsnvm use lts成功后会提示Now using node v18.19.0 (64-bit)。验证切换结果切换后立即检查node -v npm -v这两个命令输出的版本号应该与你刚刚切换的版本一致。同时检查where node命令它显示的 node.exe 路径应该在 nvm 的安装目录下如C:\Users\xxx\AppData\Roaming\nvm\v18.19.0\node.exe而不是其他地方。设置默认版本每次新开命令行窗口nvm 可能会重置。如果你希望某个版本作为默认启动版本可以nvm alias default 18.19.0这样以后新开的终端都会自动使用这个版本。3.3 卸载版本与其它实用命令卸载一个版本nvm uninstall 14.21.3在卸载前请确保你没有正在使用这个版本nvm use到其他版本。查看当前使用版本的安装路径nvm which current这在配置 IDE 或需要绝对路径时有用。快速运行特定版本的 Node.js不切换全局环境nvm run 16.20.2 app.js这个命令会用 Node.js 16.20.2 来运行app.js文件但执行完后你的全局版本还是原来的不会变。适合快速测试。4. 高级场景、常见问题与排查思路掌握了基本命令只是开始把 nvm 用稳还需要处理一些边界情况和问题。4.1 全局 npm 包与版本隔离这是 nvm 的另一个核心优势版本隔离。当你用nvm use切换到 Node.js 18 后用npm install -g yarn安装的全局 yarn只存在于 Node.js 18 的环境下。当你切换到 Node.js 16 时那个全局 yarn 是不可用的你需要重新安装。好处项目环境纯净不会因为全局包版本冲突导致奇怪错误。注意这意味着一些你习惯的全局工具如nodemon,pm2,typescript等需要在每个常用的 Node.js 版本下分别安装一次。4.2 配合项目自动化切换.nvmrc 文件在项目根目录创建一个名为.nvmrc的文件里面只写版本号例如20.11.0然后在该目录下执行nvm usenvm 会自动读取.nvmrc文件中的版本并切换过去。这对于团队协作非常有用确保所有人使用相同的 Node.js 版本进行开发。4.3 WSLWindows Subsystem for Linux中安装 nvm热搜词里有 “wsl安装nvm安装node”。在 WSL 的 Linux 发行版如 Ubuntu中安装 nvm过程和原生 Linux 一致通常更简单。通过 curl 或 wget 下载安装脚本curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash或者wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash注意版本号v0.39.7请替换为当时最新的稳定版。安装脚本会自动克隆仓库到~/.nvm并尝试在~/.bashrc,~/.zshrc等文件中添加源。安装完成后你必须关闭当前终端重新打开或者执行source ~/.bashrcnvm 命令才会生效。之后的使用命令和 Windows 版完全一样nvm install,nvm use等。WSL 中的 nvm 和 Windows 宿主系统中的nvm-windows是完全独立的两个东西它们管理的 Node.js 版本也互不干扰。4.4 典型问题排查链路当 nvm 命令不按预期工作时按这个顺序排查命令未找到输入nvm提示不是命令。Windows检查是否以管理员身份运行了安装程序是否在安装后打开了新的 CMD/PowerShell 窗口环境变量NVM_HOME和NVM_SYMLINK是否已添加可以回看安装路径章节。macOS/Linux/WSL是否执行了source ~/.bashrc或重启了终端安装脚本是否成功修改了 shell 配置文件可以用cat ~/.bashrc | grep nvm查看。切换版本后node -v没变首先确认切换命令是否成功有成功提示。执行where nodeWindows或which nodemacOS/Linux。如果显示的路径不是 nvm 目录下的比如还是旧的C:\Program Files\nodejs说明系统PATH环境变量中旧 Node.js 的路径优先级更高。回到第一步彻底卸载旧版本 Node.js。nvm use需要管理员权限这通常发生在 Windows 上如果你把 nvm 或 Node.js 的符号链接装到了受保护目录如C:\Program Files。解决方案就是卸载重装使用默认的、不需要管理员权限的用户目录路径。安装 Node.js 版本失败网络问题最常见配置淘宝镜像加速。权限问题确保 nvm 安装目录有写入权限。杀毒软件/防火墙拦截暂时禁用或添加例外。磁盘空间不足检查目标磁盘。全局 npm 包丢失记住这是特性不是 bug。每个 Node.js 版本有独立的全局node_modules。切换到新版本后常用的全局工具需要重新npm install -g一次。4.5 与其它工具如 nvs, fnm的简单对比nvm 不是唯一选择但是最经典、社区最广的。类似工具还有nvs(Node Version Switcher, 跨平台由微软维护)、fnm(Fast Node Manager, 用 Rust 写速度更快)。它们核心功能相似区别在于nvm最稳定功能最全文档最丰富支持.nvmrc但 Shell 启动稍慢因为它是 Shell 脚本。fnm启动速度极快兼容.nvmrc但相对年轻某些边缘场景可能不如 nvm 成熟。nvs跨平台体验一致支持自动根据.nvsrc切换。对于绝大多数开发者从nvmWindows 用nvm-windows开始是最稳妥的选择。它的所有“坑”基本都被踩过一遍解决方案网上也最全。最后我建议你把 nvm 的常用命令list,install,use,alias default记熟再把镜像配置好。真正开发时90%的时间你只需要nvm use这一个命令。管理多版本 Node.js 环境从此应该是一个轻松、可预测的过程而不是一个玄学问题。如果在团队中推广务必统一使用.nvmrc文件这是保证开发环境一致性的最低成本方案。