ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Node多版本管理利器:nvm安装与使用指南

Node多版本管理利器:nvm安装与使用指南 做前端、写Node服务端的人迟早都会被同一个问题逼疯不同项目要的Node版本不一样。老项目锁死Node 14新项目已经跑到Node 20本地装新的老项目启动直接报错切回旧的新项目又用不了最新语法。我当年同时维护三个项目一个要Node 12一个要Node 16还有一个要Node 18每次切换都得手动下载安装包、改环境变量、重启终端一折腾就是一下午。后来所有同事都给我指了同一条路用nvm。nvm的全称是Node Version Manager直白点说就是Node版本管理器。它能在同一台机器上装多个Node版本想用哪个就用哪个切换只是敲一条命令的事。这篇文章我就围绕nvm安装与使用这个主题把Windows、macOS、Linux三个平台的安装步骤、常用命令、全局配置和踩坑记录完整写一遍。特别是Windows上用nvm-windows的时候那个经典的“nvm could not be found or does not exist. exiting. no installations recognized”报错劝退了多少新手我会把原因和解决办法一条条拆开讲。刚入行的前端新人、维护多套环境的后端同学以及被版本切换折磨过的老手都可以直接对照操作。顺带说明一下搜索“nvm”时还会蹦出一些其他领域的词比如汽车软件里的AUTOSAR NVM、嵌入式里的非易失性存储甚至有Jetson存储相关的内容。本篇只聊Node.js生态里的nvm其他领域的同名简称不在讨论范围内如果你搜的是那些看到这里就可以跳过了。1. 从痛点出发nvm到底在解决什么问题1.1 多版本Node带来的现实麻烦很多刚接触Node的人不理解版本多就多呗全装最新版不就行了等你真的在项目里跑起来就明白了。最典型的是老项目依赖的第三方库比如node-sass它跟Node版本强绑定。node-sass在Node 16之后基本不维护了你硬要在Node 20上跑编译阶段就报错给你看。再比如一些用C插件node-gyp的项目换个大版本Node很多原生模块都得重新编译编译工具链略微不一致就失败。还有CI/CD流水线里开发环境和测试环境Node版本不一致本地好好的代码推上去就崩这种经历谁碰谁知道。更隐蔽的是有些框架对Node版本有硬性要求。老一点的Vue CLI项目一般要求Node 10到16区间新一点的Vite项目又要求Node 18以上。团队里几个人环境不同提交上来的lockfile可能都在不同Node版本下生成依赖树对不上后面运维的人查问题查到头皮发麻。nvm解决的就是这种“一套机器上同时存在多个Node版本”的需求。它不是把所有版本揉在一起而是各自独立安装、独立管理用符号链接或环境变量切换当前生效的版本。日常使用里你只感知到“我当前用的是哪个版本”完全不用关心多个版本是怎么共存的。1.2 nvm与nvm-windows同一个名字两个分支这里必须先说清楚一个很多人踩过的坑nvm有两个主流分支一个是给macOS和Linux用的一个是给Windows用的它们不是同一个项目安装方式、命令细节、版本号体系都不一样。原始nvm是nvm-sh维护的开源项目以前的repo叫creationix/nvm本质是一个Shell脚本依赖bash/zsh的环境变量和函数机制所以只能跑在类Unix系统上macOS和Linux用这个。它的版本号一直保持0.3x.x这样的格式比如v0.39.7用curl拉安装脚本就能装。Windows上用的是另一个独立项目叫nvm-windows由coreybutler维护。它跟原版nvm不是同一个代码库也不是简单的移植实现机制完全不同nvm-windows是一个可执行程序通过创建符号链接把当前选中的Node版本映射到固定的C:\Program Files\nodejs目录从而让系统PATH里始终只有一个Node入口。它的版本号是1.x.x比如1.1.12。这两套东西千万别混为一谈。网上很多教程不区分平台把原版nvm的命令直接丢给Windows用户结果Windows用户执行nvm ls-remote发现根本没这个命令还以为自己装错了。实际上Windows版用的是nvm list available后面我会仔细讲命令差异。1.3 下载渠道与版本甄别小心来路不明的安装包搜索词里有个“windows如何安装nvm的v0.40.8版本”我想特别提醒一句nvm-windows的官方版本号一直是1.x原版nvm是0.3x.x并不存在官方发布的v0.40.8。如果你在某处下载到的安装包显示0.40.8那大概率是非官方改造版或者是论坛里流传的旧版第三方打包的混合体。非官方版本你没法确认里面有没有夹带私货鬼知道它在后台干了什么建议一律不要用。官方渠道就认准两个地方。Windows用户去GitHub的coreybutler/nvm-windows仓库点Releases页面下载nvm-setup.exe或者nvm-setup.zip推荐下载zip再解压执行因为exe直接下载有时候会被浏览器或杀毒软件拦截。macOS和Linux用户去nvm-sh/nvm仓库按README里的安装脚本执行即可。版本选择的原则是选最新正式版不要追RC候选版。nvm-windows目前稳定在1.1.x装新版不会带来什么兼容问题因为它的核心逻辑已经很多年没大变过了。macOS/Linux原版nvm也一样认准最新的0.39.x就行。2. 安装与初始化Windows重点讲macOS/Linux顺带过2.1 Windows安装nvm-windows的完整步骤Windows上装nvm-windows有几个前置决定直接影响后面会不会翻车我按顺序说。第一步先把电脑上已有的Node卸载干净。这一点很多人忽略也是后续命令冲突的根源。nvm-windows的工作机制是用符号链接把C:\Program Files\nodejs指向当前使用的Node版本目录如果你已经装过独立Node这个目录是真实存在的符号链接会因为目标已存在而创建失败导致nvm use了之后node -v还是旧版本。卸载时建议用系统的“添加或删除程序”卸载Node同时手动清理C:\Program Files\nodejs残留目录以及环境变量里%PATH%中Node相关路径。npm全局目录如果之前装在用户目录下顺手也清理一下避免以后版本切换后旧包干扰。第二步下载nvm-setup.zip解压后运行里面的nvm-setup.exe。安装向导会让你填两个目录第一个是nvm本身的安装目录也就是所有Node版本的存放位置比如C:\Users\你的用户名\AppData\Roaming\nvm也可以自己改成D:\nvm第二个是Node符号链接目录默认是C:\Program Files\nodejs。这里两条硬性建议目录路径不要带中文不要带空格Node符号链接目录不要设置在nvm安装目录内部。如果后面你遇到各种莫名其妙的问题排查的第一个对象就是这两条。第三步安装完成后环境变量会自动配好。nvm-windows会新增两个系统变量一个叫NVM_HOME指向nvm安装目录一个叫NVM_SYMLINK指向nodejs符号链接目录同时会把这两个目录加进PATH。但注意已经打开的终端窗口不会刷新环境变量必须全部关掉重开一个。如果你用的还是老掉牙的CMD建议直接切到Windows Terminal省得环境变量不刷新引发的奇怪问题。第四步在终端里执行nvm version验证安装。如果输出版本号说明装好了。如果没有先检查环境变量是否存在再检查PATH顺序nvm目录必须排在系统原有Node路径前面。这里还有个非常容易忽略的点nvm-windows的nvm install和nvm use需要管理员权限。因为它要创建、删除和重写C:\Program Files\nodejs这个系统目录下的符号链接没有管理员权限直接失败或者静默失败。所以后面日常操作我建议直接用管理员身份打开终端别省这一步。不少人的“nvm命令无法使用”都是从这里开始的。2.2 macOS/Linux的原生nvm安装macOS和Linux用原版nvm安装就一条命令curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash这条命令把nvm的脚本拉下来直接执行安装脚本会把nvm仓库克隆到~/.nvm目录并且在你的Shell配置文件中追加几行加载代码。装完重开终端或者手动执行source ~/.zshrc如果用zsh或source ~/.bashrc如果用bash然后执行nvm --version验证。这里有个高频坑安装脚本默认往哪个配置文件写取决于你的默认Shell。很多人默认是zsh但脚本检测失败写到了.bash_profile结果每次开终端都找不到nvm命令。如果你执行完脚本后发现nvm: command not found手动把配置里的这段加载nvm的代码挪到.zshrc就行export NVM_DIR$HOME/.nvm [ -s $NVM_DIR/nvm.sh ] \. $NVM_DIR/nvm.sh [ -s $NVM_DIR/bash_completion ] \. $NVM_DIR/bash_completionmacOS用户如果之前装过Homebrew版的Node同样建议先卸载干净再装nvm。Homebrew的Node目录在/opt/homebrew/opt/node如果PATH里Homebrew路径排在nvm前面你执行node -v显示的依然是旧版本那时候别急着骂nvm先查which node看实际指向。2.3 装完先做检查三行命令确认环境底子干净安装只是第一步装完一定要做基线检查否则后面出问题你不知道是安装时就错了还是后面操作导致的。Windows依次执行nvm version nvm root nvm listnvm version确认程序本体没问题nvm root会打印nvm目录同时还把settings.txt的位置暴露给你nvm list列出已安装的Node版本刚装完应该是空的如果你在这时看到有一堆版本说明这台机器上已经有人用过nvm了或者残留了旧配置。macOS/Linux依次执行nvm --version which nvm nvm lsnvm ls同样列出已安装版本。重点看which nvm的输出如果指向~/.nvm/nvm.sh说明加载成功如果在输出里找不到nvm说明Shell配置加载有问题回到上一节处理。3. 常用命令与多版本实战3.1 安装Node、切换版本、删除版本环境就绪后日常操作就四组命令我直接给对照表。操作场景nvm-windowsWindows原版nvmmacOS/Linux查看已安装版本nvm listnvm ls查看远端可安装版本nvm list availablenvm ls-remote安装指定版本nvm install 18.20.4nvm install 18.20.4切换版本nvm use 18.20.4nvm use 18.20.4查看当前版本nvm currentnvm current卸载指定版本nvm uninstall 18.20.4nvm uninstall 18.20.4设置默认版本nvm alias default 18.20.4nvm alias default 18.20.4查看某个版本安装路径nvm which 18.20.4nvm which 18.20.4最常用的就是nvm install和nvm use。安装版本号可以精确到小版本比如nvm install 18.20.4也可以只给大版本号比如nvm install 18这时候nvm会解析成这个版本线的最新发布版本。我个人的习惯是精确到小版本理由很简单团队协作时package-lock.json和.nvmrc里记录的版本号越精确大家本地环境越一致。只给大版本号看起来省事但今天你装到18.20.2明天新同事装到18.20.8依赖树的生成环境还是不一致排查起来很烦。nvm use切换后验证一下就三行node -v npm -v which node在Windows上which node理论上应该指向C:\Program Files\nodejs\node.exe这是符号链接实际指向你当前使用版本的真实目录。如果指向的不是这个路径说明PATH顺序有问题或者旧Node残留没清干净。卸载版本也需要注意nvm uninstall只能卸载当前没在使用的版本如果你正在用这个版本会提示退出或切换。卸载前想清楚这个版本上的全局npm包也会一并清掉没有回收站可救。3.2 加速下载配置node_mirror与npm_mirror很多人在nvm install这一步卡住进度条半天不走或者直接超时。原因是默认下载源在境外网络环境不佳时速度很慢。解决方式很直接换镜像源。nvm-windows在nvm安装目录下有个settings.txt里面的内容大概是这样root: C:\Users\xxx\AppData\Roaming\nvm path: C:\Program Files\nodejs node_mirror: https://nodejs.org/dist/ npm_mirror: https://github.com/npm/cli/archive/node_mirror是Node二进制包的下载地址模板npm_mirror是npm包下载地址模板。想加速就直接改成npmmirror原淘宝镜像的地址。在nvm-windows里可以直接用命令设置nvm node_mirror https://npmmirror.com/mirrors/node/ nvm npm_mirror https://npmmirror.com/mirrors/npm/设置完可以打开settings.txt确认一下镜像地址已经被覆盖。下次nvm install就会从镜像源拉取速度提升体感非常明显。原版nvm则是在安装命令里加参数nvm install 18.20.4 --node-mirrorhttps://npmmirror.com/mirrors/node/或者通过环境变量设置。macOS/Linux用户如果不嫌麻烦也可以直接改shell配置里加一行export NVM_NODEJS_ORG_MIRRORhttps://npmmirror.com/mirrors/node/一劳永逸。这里提醒一句镜像地址一旦写在settings.txt里换机器、换环境时要记得同步不然你以为是全新环境实际却在走老配置。3.3 项目级版本锁定.nvmrc的正确打开方式版本管理做到团队级别就不能靠每个人自觉执行nvm use 18.20.4了得让项目自己声明“我需要哪个版本”。这个机制就是.nvmrc文件。操作很简单在项目根目录创建一个.nvmrc内容只写版本号18.20.4然后告诉团队进项目后先执行nvm use原版nvm在较新版本支持自动读取.nvmrc或者nvm use配合读文件脚本。Windows版nvm-windows对这个的支持比原版弱一些我自己在Windows上更习惯显式执行nvm use 18.20.4或者在项目里放一个简单的脚本读取.nvmrc再调用nvm切换。这样做的价值在于版本信息跟着仓库走新人拉下代码就知道该用哪个NodeCI脚本里也能读取.nvmrc装对应版本彻底消灭“我这跑得好好的你那儿怎么就崩了”的经典甩锅现场。4. 全局配置与协作场景优化4.1 为什么装了nvm反而找不到node和npm这是被问爆的问题明明nvm装好了nvm ls也能列出版本但node -v就是提示找不到命令。原因得从nvm-windows的机制讲起。Windows版nvm把当前版本“伪装”成固定的C:\Program Files\nodejs目录这个目录本质是符号链接。系统PATH里只有一个Node入口就是NVM_SYMLINK指向的那个目录。刚安装完、还没执行过任何nvm use时这个符号链接是不存在的系统自然找不到node。到这一步就明白了安装nvm之后第一次用一定要执行一次nvm use 版本把符号链接创建出来之后再开终端才能直接用node命令。如果执行了nvm use还是找不到第一检查终端是不是管理员权限——符号链接创建失败时nvm-windows可能只给一行失败提示甚至不提示第二检查C:\Program Files\nodejs目录是不是真实目录而不是链接如果它是之前独立安装Node留下的实体目录nvm的符号链接根本建不出来卸载旧Node并删除目录后重新nvm use。macOS/Linux上找不到node的机制不一样。原版nvm是通过Shell函数注入的执行node -v时实际是nvm的函数在帮你找路径。如果你在启动终端时没有加载nvm那node命令自然不存在。这种问题几乎都是配置文件写错位置导致的上一节讲过不重复了。4.2 默认版本与全局npm包管理每次打开终端都要手动nvm use太蠢了所以nvm提供了默认版本机制。nvm alias default 18.20.4执行一次后新开的终端会自动加载默认版本。Windows版nvm-windows也支持nvm alias default原理类似。团队里如果Node基线统一大家各自设置一次默认版本之后的日常体验跟之前单独装Node几乎没区别但底层版本随时可换。关于全局npm包这里有个很多新人踩过的坑通过npm install -g装的全局包比如pnpm、yarn、nodemon、serve在nvm体系下是跟着Node版本走的不是全机器共享的。也就是说你用Node 16装的全局yarn切到Node 20后命令可能就没了或者还在但版本对不上。这不是bug是nvm的设计使然。每个Node版本目录里都有自己的一套全局node_modules彼此隔离。好处是不会出现“全局包和版本不兼容”的连锁问题坏处是切换版本后要手动补装全局包。解决思路有两个要么固定在默认版本上安装需要长期使用的全局包要么在切换版本后执行npm ls -g --depth0看缺什么补什么。原版nvm提供过一个nvm reinstall-packages命令用来迁移全局包nvm-windows版本支持不完整别过度依赖手动重装更靠谱。4.3 我现在实际使用的工作流讲完理论我把自己跑了很长时间的一套工作流放出来供参考。我在Windows主力机上装的是nvm-windows最新稳定版nvm目录放在D:\nvm符号链接保持默认的C:\Program Files\nodejs。日常维护着两条Node版本线Long Term SupportLTS稳定线用于绝大多数项目比如18.20.4一条最新稳定大版本用于跑新框架和工具链比如20.11.1。每个项目根目录都有.nvmrc我进项目后第一件事就是nvm use用哪个版本一目了然。团队协作时前端小组在文档里写明Node版本要求新人入职照着nvm install装好并设置默认版本即可。CI脚本里读取.nvmrc自动切换版本保证流水线环境跟本地一致。这套流程跑下来因为Node版本不一致导致的报错基本绝迹了。全局包我只装两个pnpm和nodemon并且固定在默认版本上装。理由很简单这些工具跟项目强相关版本跟随默认Node走就够了真遇到特殊项目要用老版本临时在对应版本里重装一个就行几分钟的事。5. 常见报错与排查实录5.1 “could not be found or does not exist. exiting. no installations recognized”报错分析这个报错是搜索热词里的常客原话一般是Requested version is not installed or does not exist. exiting. No installations recognized.第一次碰到这个报错的人很容易慌以为是nvm坏了其实它表达的意思很明确nvm在本地现有的Node版本里找不到你指定的版本或者它所理解的版本列表已经乱了。触发这个报错最常见的有四种场景按出现频率排序第一种执行nvm use时拼错了版本号或者用了没装的版本。比如你只装了18.20.4但敲了nvm use 18.20.2报错理所当然。先nvm list确认已装版本再nvm use这是最简单也最容易被忽视的排查。第二种settings.txt里的目录路径跟实际目录对不上。比如你把nvm目录从D盘搬到了E盘或者改了用户名settings.txt里root字段还是旧路径nvm找不到版本目录自然报“no installations recognized”。检查方式是执行nvm root看输出的路径跟实际nvm目录是否一致不一致就修正settings.txt。第三种nvm install下载到的文件不完整或者版本目录损坏。网络下载中断、杀毒软件误删文件都会导致版本目录名存在但内容不完整。解决办法是nvm uninstall那个版本重新nvm install装的时候保持网络稳定。第四种用了非官方安装包。开头提过的v0.40.8之类来路不明的版本内部路径结构跟官方版不一致安装时没报错但运行时找不到版本目录。这种情况别浪费时间排查了直接卸载重装官方版。macOS/Linux用户遇到类似报错时还多一个可能nvm脚本没正确加载。执行command -v nvm看有没有输出没有就回到Shell配置问题那节处理。5.2 权限、杀毒软件与路径的坑Windows下绝大多数的nvm“诡异问题”往上追溯都是权限和目录问题。权限方面我见过最典型的情况是普通权限的终端执行nvm use终端看起来没有任何反应但node -v还是旧的或者不存在用管理员身份重开终端同一命令立刻生效。原因就是符号链接创建被系统拒绝nvm-windows却没有把错误信息很好地展示给用户。我现在给自己定了个规矩只要碰nvm一律管理员终端砍掉一半的未知问题。杀毒软件方面Windows Defender或者第三方杀软可能把符号链接当作可疑操作拦截或者把nvm目录里刚下载的node.exe隔离掉。判断方法是执行nvm install后立刻检查nvm ls版本在列表里但nvm use后node -v报错去杀软的隔离区里翻一下十有八九有node.exe。解决办法是把nvm安装目录加入杀软排除列表。路径问题前面提过两次这里汇总nvm目录不要放带中文或空格的路径符号链接目录不要设在nvm目录内部如果机器名是中文导致默认用户目录带中文强烈建议把nvm目录挪到D盘或其他纯英文路径否则有些工具会出幺蛾子。5.3 常见错误速查表我把日常运维中高频出现的问题整理成一张表方便大家收藏对照。报错/现象可能原因处理方案nvm不是内部或外部命令环境变量未配置或终端未刷新检查NVM_HOME/NVM_SYMLINK重开终端node -v 提示找不到命令未执行过nvm use符号链接不存在管理员终端执行nvm use指定版本nvm use 没反应非管理员权限符号链接创建失败管理员身份重开终端再执行显示No installations recognizedsettings.txt路径错误或版本目录损坏nvm root检查路径卸载重装对应版本下载速度极慢或卡住默认下载源网络不佳配置node_mirror/npm_mirror镜像切换版本后全局包消失nvm各版本全局包隔离在目标版本上npm i -g重装nvm install报错退出下载文件损坏或杀软拦截重新install加白名单目录装完nvm后node还是旧版本旧Node残留或PATH顺序不对卸载旧Node清理PATH用which node确认5.4 升级与彻底重装nvm本身nvm用久了或者之前装的版本有问题需要重来也要讲清楚方法。原版nvm升级很简单重新执行安装脚本即可脚本会覆盖当前版本并保留已经安装的Node版本目录不会丢数据。想确认当前版本执行nvm --version。nvm-windows升级则是直接下载新版安装包运行安装程序覆盖到同一个nvm目录已装的Node版本和settings.txt都会保留。如果你之前装了非官方版本想彻底重装流程是先在控制面板卸载nvm-windows然后手动删除nvm安装目录默认在%APPDATA%\nvm删除C:\Program Files\nodejs符号链接目录再打开系统环境变量编辑器删掉NVM_HOME和NVM_SYMLINK两个变量以及PATH里的相关条目。清理干净后重新安装官方版基本不会留下任何旧问题。最后再分享一个我个人的小习惯每次给同事排查nvm问题我从来不猜一律先执行nvm root看重定向路径再执行nvm list看版本再执行nvm use看切换反馈三步走完八成问题已经定位了。工具本身不复杂绝大多数翻车都出在环境和权限这些外围因素上。把这几个检查项变成肌肉记忆你会发现自己比很多教程还专业。
返回列表