解决nvm切换node版本不成功的问题(包含全网最正确最齐全的nvm安装配置,全网最细最有用的一篇)

news2025/1/13 13:12:18

废话前言:

因为现在已经接近实习尾声,我已经没有什么事可干了,于是我就从java后端和python转回前端,开始准备写写前端项目

 但是当我重新打开那尘封已久的后端项目的时候,有些是之前GitHub拉去下来的vue项目,那学过前端的都知道,首先要干的事就是1、【npm init】,然后 2、【npm install】了,结果我一输入命令,你冯了个臭福的,老子最他妈比烦的事又来了,来一次老子火一次 ——> 该死的傻逼前端配置问题

一、出现的问题情况

AI插件给出的解释是这个项目依赖 [18.20.3] 这个版本的Node,但我的电脑的Node版本是 [16.19.1]

那么此时我还不慌,因为我很早之前就因为切换Node这个问题安装了【nvm】【nvm】是一个帮忙管理【Node】的工具,它可以允许安装多个版本的【Node】,并轻松切换不同版本的【Node】为当前电脑全局使用的版本。

那么老子就自信满满地输入【nvm ls】检查我已经安装的Node版本,哎嗨刚好有 [18.20.3] 这个版本,那么就很简单,直接【nvm use 18.20.3】就可以切换成这个版本了,结果电脑连着闪了两次系统提示框(闪一次是切换成功),我就意识到大事不妙,用【node -v】一看,我操你冯了臭福啊!!!操你冯了臭福啊!!!还是尼玛福的[16.19.1]版本!!!最怕的事情来了!!!!!

此时我上网查了一下,简单总结说一下原因就是:

我电脑有2个【Node的路径】,我自己在环境变量设置了我指定的【Node的路径】,但是【nvm】不知道为什么还有一个【Node的路径】,默认是【C:\Program Files\nodejs】

那么如果你的电脑也出现解决nvm切换node版本不成功的问题,那么就可以【Win + R】用cmd打开终端执行这个命令

where node

如果出现下面这种情况,出现两行内容的,那就是跟我一样的错误情况了;那么如果只有一行的话就是正常情况,就不用跟着我下面的操作执行,因为你可能遇到的并不是跟我一样有的情况,请自行查找别的教程

 此时我就很纳闷,我记得我明明环境变量设置的【Node的路径】是【E:\nodejs】啊,然后我在【nvm】的根目录的【setting】配置文件里写的路径也是【E:\nodejs】,虽然【nvm】的【安装Node】的路径默认是【C:\Program Files\nodejs】,可是我已经换成我指定的【E:\nodejs】路径了啊.......

后面我是用全身解数,用尽办法,都没有办法把它改回我的指定的【Node安装路径】,哪怕我删除了默认路径【C:\Program Files\nodejs】,只要我一执行【nvm install 18.20.3】或【nvm use 18.20.3】,马上就会自动又出现这个傻逼默认路径【C:\Program Files\nodejs】,没完没了!!!!我操他妈!!

二、如何解决

那么看完上面内容,如果你的情况跟我一样是不知道为什么2个【Node的路径】,那么接下来请老老实实按我的步骤,包没错

根据我学计算机这么久的经验,永远只有一种解决方案最稳妥最快,那就是全部卸载重新安装。不要害怕你有很多项目已经绑定了node,到时候下载回来就得了很快的,我自己就是,首要的问题是【安装好nvm】!!!

1、卸载nvm

打开控制面板,找到软件卸载

然后去【系统】——>【高级系统设置】——>【环境变量】,懂得都懂的,然后把系统变量里【NVM HOME】和【NVM SYMLINK】删了,还有【path】里的【%NVM HOME%】和【%NVM SYMLINK%】,也就是你曾经安装【nvm】的时候配置的【nvm安装路径】跟【nvm安装node的路径】

这里就不截图演示了

2、卸载所有跟node有关的任何东西

首先还是像刚刚那样,去控制面板的软件卸载那里,找到node卸载(当然一般情况这是单独安装node才会这样,一般用【nvm】管理node的话,卸载nvm就是卸载node了)

接下来,重点检查这几个地方的这些文件,有的话全部删掉!

  • C:\Program Files (x86)\Nodejs
  • C:\Program Files\Nodejs
  • C:\User\用户名 目录下的 【.npmrc】文件(.node_repl_history如果存在也删除,没有就忽略)
  • C:\Users\用户名\AppData\Roaming\npm
  • C:\Users\用户名\AppData\Roaming\npm-cache
  • C:\Users\用户名\AppData\Local\npm-cache
  • 你之前用nvm时,指定的自定义的node安装路径

最后输入【nvm -v】【npm -v】【node -v】,如果都显示下面这样就卸载干净了

3、重新安装【nvm】

这里就是正式安装【nvm】的步骤了,如果只是为了安装【nvm】而没有我前面遇到的问题的同志,请先将上面【卸载旧的遗留的所有node有关文件】做完,然后回来,从这里开始认认真真按照我的每一步做

(这里我懒得截图,前两个截图借鉴博主:步步生花@苏殿主 的文章的截图)

(1)下载NVM

  • 地址:Releases · coreybutler/nvm-windows · GitHub
  • 点击nvm-setup.exe进行下载

在这里插入图片描述

(2)双击下载好的文件,开始安装

在这里插入图片描述

这里我还是像以前一样,在别的硬盘创建了一个叫 “NVM” 的文件夹,里面专门用来存放【nvm的安装目录】和【node的目录】,这是我的个人习惯怕c盘内存不够,当然你们用默认的安装路径也没事,看个人习惯。

安装完毕我们就可以在我们指定的安装目录下看到【nvm】这个目录了,也就是【nvm的安装目录

但是这里注意!!!我们刚刚设置的【node的目录】(比如上图的E:\NVM\nodejs)是一个暂时不存在的目录,即便你事先已经创建好了这个目录,在nvm安装完之后你也会发现不见了,这时不要慌,这是正常的

这个刚刚设置的【node的目录】只会在你确定使用了某个版本的node之后,才会自动创建一个出来。(这就是前面我为什么一用【nvm use 18.20.3】就马上在默认路径多出一个nodejs文件夹)

再去检查我们的【环境变量】的【系统变量】和【path变量】,确保【系统变量】里有【NVM_HOME】和【NVM_SYMLINK】,以及【path变量】里有【%NVM_HOME%】和【%NVM_SYMLINK%】

一般情况下,nvm安装时会自动帮添加好,但是还是要再三确认无误!!!

然后用终端执行【nvm -v】检查安装成功了没有,有版本号就对了

(3)配置nvm目录下的setting配置文件

nvm的安装目录下有个【setting】文件,是用来配置nvm安装node、npm...这些工具的路径、下载的镜像网址这些配置的,我们点进去编辑

然后粘贴下面的内容进去,【Ctrl + S】保存,因为npm、yarn这些都是国外的,连外网下载慢,要换成淘宝的镜像网址

# 配置node镜像:
node_mirror: https://npmmirror.com/mirrors/node/

# 配置npm镜像:
npm_mirror: https://npmmirror.com/mirrors/npm/

三、用【nvm】安装【node】

接下来我们就可以安装node了,只需输入下面命令

//<version>是指安装指定版本的 Node.js
nvm install <version>

比如我开头需要安装 [18.20.3] 版本的【node】,那我就:

如果你们没有我这个需求,你可以用【nvm list available】查看一下现在node有什么版本

然后下面这个指令是查看你已经用【nvm】下载好的【所有的版本的node】

nvm ls
//或者 nvm list

在我们的【nvm】安装根目录下也能够看到我们已经安装好的node版本

四、使用、切换node

那么此时我们会想到上面我们说过,刚安装好nvm的时候没有【node的目录】,这是因为我们还并没有指定并使用node,现在我们去输入【node -v】、【npm -v】也只会是啥也没有

那么只需要执行一个命令

nvm use <你已有的其中一个版本的node>

此时会弹出一个window提示框,选【是】就行

此时你再输入【node -v】、【npm -v】试试

爽!爽死了!!!牛逼!!!!!还有,我们设置的【node的目录】出现了!!更爽了!!!

那么以后当我们的项目需要某个特定版本的node的时候,我们就可以直接直接用【nvm use <node版本>】 直接切换了。

五、解释这一切一切的原理

那么如果你只是一个想快速用【nvm】的看客,那么就不用看这里。但是应该会有很多人回像我一样一直困惑这么几个东西【node】、【nvm】、【npm】、【cnpm】、【yarn】,那么我就用简短的话解释清楚。

1、Node.js

首先解释node,为什么我们学前端的时候从来就没有说学什么鬼Node,但是搞个死人前端每次都要用到这个b玩意?因为它是一个【运行环境

就跟java的jdk、微信小程序的微信环境...等等一样,他们都需要在特定的环境才能运行。那有人会疑问,前端的代码的运行环境不是浏览器吗,这个说法不完全对。

在以前,js代码只能运行在浏览器中。所以通常前端使用js写,后端则要用另一种语言写,比如Java、PHP、Ruby等。而【Node.js】出现之后,js就可以脱离浏览器运行了,可以用来写后端服务代码。同时,在【Node.js】出现之后,大批前端程序员才使用 js 开发出了一些我们熟知的前端框架(如前端开发脚手架vue-cli、静态网站生成器hexo等等)

简单来说:【Node.js】就是让前端的js允许在浏览器使用的运行环境。但是注意:【Node.js】不是前端!!它是轻量级的后端开发语言,它服务于前端、也服务于后端,他对于前端就只是一个依赖的运行环境后端才是用它来写代码

2、npm

npm是Nodejs package manager的缩写,顾名思义,是【Node.js包管理器】。

他就是一个帮助我们下载安装各种各样工具的管理器,前端开发的肯定不止一次见到【npm install xxx】这样的命令,前端不管是第三方库、依赖包都可以使用它来直接在项目中下载并安装;另外它也是【Node.js】的帮手,比如我们用npm才能运行启动vue这些项目

前面为什么我们在没有指定并使用node的时候,输入【npm -v】就啥也没有;而当我们正式使用了node,才会出现npm的版本号。因为它是【Node.js】的 “小弟”,它随着【Node.js】被安装,并不能单独安装。

3、cnpm

cnpm是淘宝做的npm国内镜像,淘宝镜像与官方同步频率目前为10分钟一次以保证尽量与官方仓库同步。

cnpm安装命令npm install cnpm -g --registry=https://registry.npm.taobao.org

cnpm相比于npm,除了使用时命令名多了个c,其余都是一样的

使用cnpm不如使用npm修改为淘宝镜像源,因为cnpm是只读的,只能用来安装npm包,不能进行publish、adduser等操作

4、yarn

yarn与npm一样,都是js包管理器,都适用于nodejs。不一样的是,yarn与npm的架构和包管理方式方式不同

随着 Node 社区的越来越大,越来越多的人将 Node 应用到企业级项目,这让 npm 暴露出很多问题。于是yarn诞生了,它解决了npm的缺点,还提供了其它更好的体验,很多人转而用yarn而非npm (其实yarn还是需要用npm安装的npm install -g yarn)

在受到 yarn 的冲击之后,npm 官方也决定改进这几个缺点,于是发布了npm5 版本。npm6更是加入了缓存,又进一步提升了安装速度。慢慢的npm重新回到原本的地位,也就没有必要使用yarn这种第三方的工具了(毕竟npm是nodejs内置的。

所以我们很多Vue的项目也会用【yarn serve】来启动项目,也会用yarn来下载安装工具包,这个要根据个人喜好以及公司情况来。

5、nvm

这个我就不用怎么解释了吧,上面讲这么详细了,如果不用nvm,我们以前前端要运行vue,还得单独下载安装node,然后好不容易下载了最新版的node,过段时间接了别人的vue项目想打开看看,还特么得用旧版本的node,还得卸载了之前我们手动下载安装的node,而且环境变量啥的这些自己还容易配错。

那么nvm就是专门用来管理node的,你可以用它随心的安装node,并切换各个版本node作为当前电脑运行的node环境

更多详细细节可以参考这篇文章,讲得很通透:node、npm、cnpm、yarn介绍和使用_node yarn-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【I/O多路复用】

基于I/O多路复用的并发编程 I/O实现I/O多路复用select优缺点 pollepoll优点 I/O I/O复用是基于一个单进程或单线程的一个执行流当中监控多个输入输出流的技术&#xff08;网络套接字或者文件描述符进行监控&#xff09;。单进程或单线程&#xff0c;允许多个用户对单进程发起连…

virtualbox从u盘启动

1.添加到vboxusers用户组 sudo usermod -G vboxusers -a whoami 2.为u盘设备添加访问权限&#xff0c;注意替换对应的设备文件&#xff0c;我这里是/dev/sdf sudo chmod orw /dev/sdf 3.为u盘创建一个虚拟的硬盘镜像 sudo VBoxManage internalcommands createrawvmdk -fi…

Unity Protobuf3 GC 问题(反序列化)

背景&#xff1a;Unity接入的是 Google Protobuf 3.21.12 版本&#xff0c;排查下来反序列化过程中的一些GC点&#xff0c;处理了几个严重的&#xff0c;网上也有一些分析&#xff0c;这里就不一一展开&#xff0c;默认读者已经略知一二了。 如果下面有任何问题请评论区留言提…

Java开发笔记-mysql语句查询指定索引

今天同事遇到一个奇怪的sql查询的问题&#xff1a;一条sql有时候执行素的很快(0.xxs)&#xff0c;有时候执行很慢(20s)&#xff0c;不知道是什么问题. 猜测&#xff1a;1、是不是第一次执行&#xff0c;被mysql缓存了&#xff1f;后面几次直接拿缓存的结果。 2、是不是网络的原…

入门redis

一、安装redis-py库 打开pycharm 在终端中输入 pip install redis 二、连接到redis服务器 import redis r redis.Redis(hostlocalhost, port6379, db0, decode_responsesTrue)host是 Redis 服务器的主机名或 IP 地址&#xff0c;port是端口号&#xff0c;db是要使用的数据库编…

指纹浏览器VS虚拟机,在跨境电商中用哪个更好?

在当今的数字世界中&#xff0c;隐私和安全变得越来越重要。尤其是跨境电商卖家来说&#xff0c;经常需要网络上执行环境独立的操作&#xff0c;例如账号运营、在线购物、网上银行、社交媒体管理等。 为了保护账号隐私与做好账号防关联隔离&#xff0c;人们经常寻求指纹浏览器…

Windows-Server-2016/2019绕过WindowsDefender

当获得了一个webshell的时候&#xff0c;下一步要反弹个shell回来 在尝试了https://github.com/trustedsec/unicorn独角兽失败之后&#xff0c;找到了一篇使用golang将shellcode注入到内存的文章 Bypassing Antivirus with Golang - Gopher it! | JUMPSEC LABS GitHub - brimst…

9.Java基础概念-面向对象

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words&#xff01; 类和对象 类&#xff…

mmyolo训练模型报错:ValueError: Key img_path is not in available keys解决办法

使用mmyolo训练模型 的时候报错&#xff1a;ValueError: Key img_path is not in available keys. Traceback (most recent call last): File “tools/train.py”, line 123, in main() File “tools/train.py”, line 119, in main runner.train() File “/root/anaconda3/en…

基于Ubuntu22.04 安装SSH服务

安全外壳协议&#xff08;Secure Shell&#xff0c;简称 SSH&#xff09;是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。 SSH 由 IETF 的网络小组&#xff08;Network Working Group&#xff09;所制定&#xff0c;SSH 为建立在应用层基础上的安全协议。SSH…

Linux下进程间的通信--管道

关于进程间的通信 Linux进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&#xff09;是指在多个进程之间传输数据或信号的一些方法。由于Linux中的进程有各自独立的地址空间&#xff0c;因此它们不能直接访问对方的内存。为了实现进程间的通信&#xff0c;…

python探索分形和混沌

简单产生复杂&#xff0c;混沌孕育秩序 0. 引言 a. 分形 fractal 【也叫碎形】 分形是一种具有自相似性和复杂结构的几何图形。在分形结构中&#xff0c;无论放大多少次&#xff0c;局部的结构特征都与整体结构相似。这种特性在自然界中广泛存在&#xff0c;比如树木枝干、山…

目前AI 辅助代码生成是否将成为未来编程的主流?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 我的答案是 肯定的 &#xff01; AI辅助代码生成正在迅速崛起&#xff0c;将会成为未来编程的主流趋势。 当然这里的问题是"…

代码随想录算法训练营第二十三天(回溯 二)

力扣题部分: 39. 组合总和 题目链接:. - 力扣&#xff08;LeetCode&#xff09; 题面: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以…

Windows系统,查看本机端口被哪个进程占用

1 打开CMD 快捷键 WinR&#xff0c;输入cmd&#xff0c;确定&#xff0c;打开命令行窗口。 2 查看端口的进程PID netstat -aon|findstr "80" 3 根据进程PID查看应用名称 tasklist|findstr "1468" 4 如果想关掉该进程&#xff0c;在任务管理器结束进程既…

「数组」数组双指针算法合集:二路合并|逆向合并|快慢去重|对撞指针 / LeetCode 88|26|11(C++)

目录 概述 1.二路合并 思路 复杂度 Code 2.逆向合并 思路 复杂度 Code 3.快慢去重 思路 复杂度 Code 4.对撞指针 思路 复杂度 Code 总结 概述 数组的线性枚举是我们学习编程时遇到的第一种枚举手段。但是它看起来有点愚蠢&#xff1a;只有一个索引i承担全部…

美食攻略系统---附源码99630

摘要 本论文旨在探讨如何利用SpringBoot技术开发一个美食攻略系统。系统将按照软件开发流程&#xff0c;采用B/S架构和面向对象编程思想进行项目开发。在引言部分&#xff0c;将介绍美食攻略系统的背景和开发目的&#xff0c;后续章节将依据软件开发流程&#xff0c;对系统进行…

电路笔记(PCB):数字信号的带宽与上升沿时间经验公式 BW = \frac{0.35}{T_r}

数字信号的带宽由上升沿决定 1. 传输线路的带宽如果小于信号的带宽就会产生失真 带宽限制和失真&#xff1a;当信号通过带宽受限的传输线路时&#xff0c;如果线路的带宽小于信号的带宽&#xff0c;信号的高频成分将被削弱或完全滤除。这种削弱会导致信号失真&#xff0c;特别…

Luma 1.5正式发布,文生视频加强真实感,时长最长5秒

距离上次版本发布仅过去了两个月&#xff0c;Luma AI再次发布了升级版本Dream Machine 1.5。新版本具有更好的文本到视频转换、更智能地提示理解、自定义文本渲染和改进图像到视频的功能。 得益于Luma AI对所有公众开放&#xff0c;任何人都可以免费试用&#xff0c;平台用户在…

CANoe.DiVa的应用——生成TP层测试用例过程流程详解(二)

🙋‍♂️【Vector CANdelastudio配置CDD】文章合集💁‍♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 目录 一.概述2.经典CAN T…