nvm 和 nrm安装使用

2023-11-18

前端工具推荐:nvm(Node 版本管理工具) 和 nrm(管理npm源)

一、nvm

        如果直接将 node 安装到电脑上,通常只能安装某个特定的版本,如 v18.12.1。而某些老项目可能只支持老版本的 node,如 v14.19.3。这时候怎么办呢?先卸载当前版本、再安装需要使用的版本,当需要使用新版本时又重新安装 ?不必这么麻烦,nvm 可以替咱解决这个问题。

1.1 nvm 是什么

        nvm:Node Version Manager,Node 版本管理工具。可以很方便的安装、切换 Node JS 的版本。它可以方便地在一个系统中安装和管理多个node.js版本。这个工具可以快速切换不同版本的node.js,在不影响其他应用程序的情况下轻松测试代码。

该项目在 github 上 68k stars

以下是nvm的主要特点:

  1. 支持多平台,包括Linux、macOS和Windows操作系统。

  2. 支持安装和管理多个node.js版本,可以在不同版本之间切换。

  3. 管理全局npm包,可以在不同版本之间共享npm包。

  4. 支持自定义node.js安装和源代码编译选项。

  5. 实现简单,使用方便,通过简单的命令就可以完成安装、卸载和切换node.js版本。

1.2 安装 nvm

1、windows:可从 github 下载,下载地址:Release 1.1.10 · coreybutler/nvm-windows · GitHub

2、Mac:在官方 Github 页面上获取最新版本的安装命令,Github 地址:GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

当前最新的安装命令为:


curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

或

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

安装完成后,查看 nvm 版本:

nvm --version

如果版本号正确显示,则安装成功。

如果安装失败,可以尝试彻底删除之前在电脑上已经安装的 node 和 npm:

# 删除全局 node_modules 目录
sudo rm -rf /usr/local/lib/node_modules

# 删除 node
sudo rm /usr/local/bin/node

# 删除全局 node 模块注册的软链
cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

1.3 使用 nvm
 

  1. 安装 Node.js 版本:

    • 查看官方所有可安装的 Node 版本:nvm ls-remote

    • 安装最新稳定版的 Node.js:nvm install stable

    • 安装指定版本的 Node.js:nvm install <version> (例如:nvm install 14.17.0)支持模糊安装,如:nvm install 14

  2. 切换 Node.js 版本:

    • 切换到已安装的其中一个版本:nvm use <version> (例如:nvm use 14.17.0

    • 可以通过简写版本号进行切换(例如 nvm use 14),nvm 将自动选择符合的已安装版本。

    • 如果在项目目录中创建了 .nvmrc 文件,nvm 在进入该目录时会自动切换到文件中指定的 Node.js 版本。

  3. 查看已安装的 Node.js 版本:

    • 列出已安装的所有版本:nvm ls

    • 列出远程可用的所有版本:nvm ls-remote

    • 查看当前的 Node 版本:nvm current

  4. 卸载 Node.js 版本:

    • 卸载指定的 Node.js 版本:nvm uninstall <version> (例如:nvm uninstall 14.17.0)或 nvm uninstall 14

  5. 设置默认的 Node.js 版本:

    • 设置默认版本:nvm alias default <version> (例如:nvm alias default 14.17.0

    • 这样,在新打开的终端中将自动使用默认版本。

  6. 运行 Node.js 命令和 npm:

    • 在已安装的 Node.js 版本下运行命令:nvm exec <version> <command> (例如:nvm exec 14.17.0 node -v

    • 在当前使用的 Node.js 版本下运行命令:nvm run <command> (例如:nvm run node -v

上述为常用命令。此外还有一些不常用、但可能会用到的命令:

1.在当前的 Node 版本下,重新全局安装指定版本号的 npm 包。

nvm reinstall-packages <version>

2.给不同版本的 Node 添加别名

nvm alias <name> <version>

3.删除定义的别名

nvm unalis <name>

nvm还支持其他的命令,可以通过nvm --help来查看使用帮助。总之,nvm是一个非常实用的工具,对于开发者来说非常值得尝试。

二、nrm
 

在开发中,我们通常需要安装很多 npm 包,而默认的 npm 源有时候就可能下载很慢,所以就需要切换 npm 源,nrm 就可以帮助我们管理和切换 nrm 源。其特点如下:

  • 管理多个源:nrm 允许管理多个 npm 源,例如官方源、淘宝源、cnpm 源等。你可以根据需要快速切换不同的源。

  • 快速切换:nrm 提供了快捷的命令来切换 npm 源,无需手动修改配置文件。你可以通过简单的命令在不同的源之间进行切换。

  • 测试速度:nrm 可以测试各个源的响应速度,并给出评分,帮助你选择最快的源来加快依赖包的下载速度。

前面介绍的 nvm 可以用来切换 Node 的版本。在开发中,除了 Node 版本可能会切换,npm 源也可能会切换,如默认的 npm 源、淘宝源等,手动切换每次都需要输入:

npm config set registry https://mirrors.cloud.tencent.com/npm/

命令虽然简单,但地址每次都得到处搜索。使用 nrm 便可以方便的管理各个源。

2.1 nrm 是什么

nrm:NPM Registry Manager,npm 注册中心管理,即 npm 源管理工具,使用它可以快速切换npm源。

2.2 安装 nrm

使用 npm 全局安装 nrm:

npm install -g nrm

安装完成后,查看版本号:

nrm --version

正确显示版本号,则安装没问题。

2.3 使用 nrm

1.查看可用源列表:你可以使用以下命令查看当前可用的源列表:

nrm ls

2.切换源

nrm use <源名称>
如:nrm use tencent
例如,要切换到 taobao 源,可以执行:
nrm use taobao

3.添加新的源

nrm add <源名称> <源地址>
如:nrm add local http://localhost:7001/

3.1添加自定义源:如果你有自定义的源,可以通过以下命令添加:

nrm add <源名称> <源地址>

 例如,添加一个名为 myregistry 的自定义源:

nrm add myregistry http://myregistry.com/

4.删除源 如果要删除已添加的源,可以使用以下命令:

nrm del <源名称>
如:nrm del local

5.源测速

# 测试所有源nrm test
# 测试指定的源nrm test <源名称>
如:nrm test yarn

6.查看当前的源

nrm current

如果没有显示结果,那就用原始的命令查看:

npm config get registry

在安装 nrm 时,我遇到以下报错,这就是说没有安装权限:

图片

可以使用管理员权限进行安装,只需要在命令前面增加以一个 sudo,执行 后输入电脑的密码即可。

 

*本文到此结束,假如对你有所启发,希望点“赞”和“收藏”,多谢鼓励!*

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nvm 和 nrm安装使用 的相关文章

  • 使用绝对 url 前缀获取

    大多数时候我都会加上前缀fetch https developer mozilla org en US docs Web API Fetch API Using Fetch or 节点获取 https www npmjs com packa
  • 让 webpack 热更新在我的同构 Web 应用程序中正常工作

    我正在创建一个带有 Node Express 后端和 React 前端的 Web 应用程序 我 我认为 大部分内容都已启动并运行 但让浏览器执行热刷新的最后一步并未按预期工作 我会尝试在这里发布所有相关设置 如果您需要其他任何信息来找出我哪
  • 使用 knex.js 查询多个表

    我想渲染Expres js and knex js两个表仅使用一个 get 函数 以便在一个 HTML 模板中使用两个表中的数据 当我只查询一张表 学校或学生 但我不知道如何处理两张表时 它会起作用 有什么建议吗 app get schoo
  • 如何安全地存储和处理 JWT 密钥

    读完这篇文章后 JWT 什么是好的密钥 以及如何将其存储在 Node js Express 应用程序中 https stackoverflow com questions 30089604 jwt whats a good secret k
  • Babel NodeJS ES6:语法错误:意外的令牌导出

    我正在尝试使用 babel 来运行我的 NodeJS 程序 其中包括 ES6 语法和 Colyseus 库的导出 但是 当我运行命令时 babel node server js 出现以下错误消息 export class MyRoom ex
  • 无法读取未定义的属性“isLoggedIn”

    此代码用于添加产品 然后添加到购物车和订单 并在后端使用 mongodb 创建 pdf 实际上 session isLoggedIn 是在 auth js 中定义的 检查该代码 但仍在 app js 中它给出了此错误 应用程序 JS代码 c
  • 如何获取与值匹配或存在于另一个表中的记录?

    我试图弄清楚在这种情况下如何获取所有任务 其中两个字段等于某个值或者它们存在于另一个表中 这是查询 SELECT TASKS task id TASKS task title TASKS task description TASKS tas
  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • 访问 Node.js 全局模块

    npm 文档是这样说的 如果您正在安装想要在程序中使用的东西 请使用 require whatever 然后将其安装在本地项目的根目录下 如果您要安装要在 shell 中使用的东西 请在命令行或 某些东西 全局安装它 以便它的二进制文件最终
  • 什么是 Node.js 模块?

    关于这个问题 Node js module exports 的用途是什么以及如何使用它 https stackoverflow com questions 5311334 what is the purpose of nodejs modu
  • 创建猫鼬模型时无法读取未定义的属性“用户”

    我正在尝试创建一个猫鼬模型并使用它从 mongodb 获取数据 但出现异常 我的 package json 中的猫鼬版本是 猫鼬 4 5 5 TypeError Cannot read property users of undefined
  • 我怎样才能摆脱错误:无法在 Heroku 上找到模块“模型”

    我在 Heroku 上不断收到此错误 错误 找不到模块 模型 我正在使用 Node JS 我在用着这个 Node JS 项目 https github com gravityonmars nodejs starter 我从 Heroku 复
  • 为什么我从 findAll Sequelize 得到未定义的电子邮件数据结果?

    请帮忙 如何显示来自 Sequelize findAll 查询的电子邮件 因为我从源代码中得到 Undefine 有人可以帮助我吗 这是我的代码 testdata get req res gt User findAll then data
  • Typescript 和 Mongoose - “this”在实例方法中不可用

    我目前正在将我的 API 从 JS 转换为 TS 然而 我在猫鼬和打字稿方面遇到了一些困难 具体来说 this在我的实例方法中不可用 My code AccountSchema methods comparePassword async f
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • 如何从控制器返回 PDF 文件

    我正在尝试使用 NestJs 从控制器端点返回 PDF 文件 未设置时Content typeheader 返回的数据getDocumentFile 很好地返回给用户 然而 当我添加标头时 我得到的返回似乎是某种奇怪形式的 GUID 响应总
  • 如何模拟“焦点”和“打字”事件

    尝试模拟 onfocus 和打字事件 但它不起作用 Sub Login MyLogin MyPass Dim IEapp As InternetExplorer Dim IeDoc As Object Dim ieTable As Obje
  • 如何使用 Stripe 在一次操作中创建客户和卡片?

    我正在尝试第一次初始化客户 我有一个表格 他们可以在那里注册和填写所有内容 然后他们提交 在客户端上 会发生以下情况 var cardValues AutoForm getFormValues credit card form insert
  • 如何检测和测量 Node.js 中的事件循环阻塞?

    我想监视 node js 中事件循环每次运行需要多长时间 但是我不确定衡量这一点的最佳方法 我能想到的最好的方法是这样的 var interval 500 var interval setInterval function var last
  • nodejs mocha suite 未定义错误

    我正在尝试使用摩卡运行一些测试 但似乎无法克服这个错误 E tdd nodejs cart gt mocha cart test js node js 201 throw e process nextTick error or err Re

随机推荐

  • 直流电路中升降压(Buck-Boost)变换电路的设计、参数选取及Matlab/Simulik仿真

    创作不易 感谢大家点赞关注支持 感兴趣的可以点击收藏 这一篇文章给大家介绍一种升降压 Buck Boost 直流变换电路 喜欢的可以点击收藏 升降压 Buck Boost 直流变换电路是通过调节开关管占空比的大小 占空比越小 输出电压越小
  • QT 之键盘事件(捕获键盘按下、松开事件)

    我们在做软件时候 经常会碰到这样的场景 比如按下F5进行刷新功能 按下F1进行帮助之类的快捷键方式 那么在QT中该怎样做呢 查阅文档 QT已经实现了这一系列的键盘事件 void QWidget keyPressEvent QKeyEvent
  • 拷贝构造和拷贝赋值

    拷贝构造表示有新的对象被定义 Object obj1 obj2 新的Object对象obj1被定义 此时调用拷贝构造函数 copy construction 拷贝赋值表示没有新的对象被定义 obj1 obj2 obj1是一个已经被声明过的对
  • WebSocket学习

    一 简介 WebSocket 是一种网络通信协议 RFC6455 定义了它的通信标准 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 HTTP 协议是一种无状态的 无连接的 单向的应用层协议 它
  • Pythonの类

    Python是一种面向对象编程语言 因此类在Python中是很重要的概念 类是一种定义数据和行为的模板 可以创建对象并针对特定的问题对其进行操作 在Python中 类的定义以关键字 class 开头 后跟类的名称 类可以包含方法和属性 方法
  • mpvue实现微信小程序样式切换以及本地缓存

    功能描述 在页面A的添加应用中点击 添加 跳转到展示所有应用的页面B 通过点击开关 在页面A中展示所开启的应用 效果展示 代码 页面B代码 div class itembox div class boxhead img div class
  • [HDU 5079][2014 Asia AnShan Regional Contest]Square(DP套DP)

    题目链接 http acm hdu edu cn showproblem php pid 5079 题目大意 给你一个 n n n 8 n middot n n le 8 的棋盘 上面有一些格子必须是黑色 其它可以染黑或者染白 对于一个棋盘
  • python实现逻辑回归三种方法_纯Python实现逻辑回归

    前几天使用后sklearn实现了逻辑回归 这里用纯python实现逻辑回归 首先 我们定义一个sigmoid函数 def sigmoid inX sigmoid函数 return 1 0 1 exp inX 这里使用梯度上升进行逻辑回归 梯
  • 【编译之美】【5. 代码优化:数据流分析】

    有些优化只能在全局优化中做 在本地优化中做不了 比如 代码移动 Code motion 能够将代码从一个基本块挪到另一个基本块 比如从循环内部挪到循环外部 来减少不必要的计算 循环剥离 部分冗余删除 Partial Redundancy E
  • 角落的开发工具集之Vs(Visual Studio)2017插件推荐

    工具善其事 必先利其器 装好这些插件让vs更上一层楼 因为最近录制视频的缘故 很多朋友都在QQ群留言 或者微信公众号私信我 问我一些工具和一些插件啊 怎么使用的啊 那么今天我忙里偷闲整理一下清单 然后在这里面公布出来 Visual Stud
  • 毕业设计-基于深度学习的花卉识别分类

    目录 前言 课题背景和意义 实现技术思路 一 花卉识别相关理论基础 二 基于 ResNeXt 和迁移学习的花卉种类识别 三 基于 EfficientNet 和迁移学习的花卉种类识别 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光
  • scss 中公共变量的导出方法:export

    前言 在使用vue或者react开发项目时都会用到scss 或者less等的扩展语言 那么肯定会有公共变量提取与使用 这篇文章就是记录如何导出公共css变量的 export 关键词 menuText bfcbd9 menuActiveTex
  • React 相关方法(API)介绍-元素与组件操作

    JSX可以减少定义组件的复杂性 但对于React来说JSX并不是必须的 JSX标签最终会被转换为原生的JavaScript 除使用JSX语法外 还可以使用React提供的API来创建组件 本文将介绍使用React创建元素 及一些React中
  • 类与对象基础

    1 面向对象概述 面向过程就是分析出解决问题所需要的步骤 然后用函数把这些步骤一一实现 使用的时候依次调用就可以了 面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象 然后通过调用对象的方法来解决问题 当然 一个应用程序会包含多个
  • JAVA构造方法与static 关键字

    JAVA的构造方法 什么是构造方法 构造方法用来生成一个实例化的对象并对对象实例中的成员变量进行初始化 采用new创建对象时 构造方法被执行 构造方法的方法名必须和类名保持一致 注意 构造方法没有返回值 不可以加void 只能用 publi
  • 设计模式之命令模式

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 【2021应用上架】超详细开发者账号申请&应用上架审核经验整理

    一 准备阶段需要注意的 1 上架前开发者账号申请 申请的主体确定 在公司有多个主体的情况下 用哪个公司主体认证开发者 上架APP时需要考虑到应用相关的各种材料申请在哪个公司名下 材料所属公司主体与开发者账号主体不一致的情况需要开发者花费时间
  • vue节流和防抖

    节流 节流是间隔执行 在定时器到时间后再清空定时器 函数将每个 n 秒执行一次 在内部定义一个定时器和一个开关变量 初始化变量为true 执行定期器前判断变量是否false 就return 为true 如果是继续执行 并且把变量赋值为fal
  • 使用JSON.toJSONString时,出现“$ref”怎么办?服务器返回对象显示$ref怎么解决?

    现象 代码 Map
  • nvm 和 nrm安装使用

    前端工具推荐 nvm Node 版本管理工具 和 nrm 管理npm源 一 nvm 如果直接将 node 安装到电脑上 通常只能安装某个特定的版本 如 v18 12 1 而某些老项目可能只支持老版本的 node 如 v14 19 3 这时候